Skip to content

名词解释

SSG

Static site generator, 静态站点生成器

Monorepo(单体仓库)

Monorepo (monolithic[ˌmɒnəˈliθik] repository[rɪˈpɑzəˌtɔri])(单一代码库)是一种管理多个项目或包的代码库结构。与传统的每个项目一个独立仓库的做法不同,monorepo 将多个相关的项目或包集中在一个代码库中。

发音: “摩”(mo)“诺”(no)“瑞”(re)“坡”(po)

优点:

  • 共享代码和依赖更方便。
  • 更容易统一管理和发布版本。
  • 跨项目更容易协作和复用代码。

缺点:

  • 随着项目数量增加,代码库会变得庞大,可能需要更复杂的工具和流程来管理。

pnpm

pnpm 通过从全局 store 硬连接到 node_modules/.pnpm,然后通过软链接来组织依赖关系。

my-project/
├── node_modules/
│   ├── lodash -> .pnpm/lodash@4.17.21/node_modules/lodash/ (软链接)
│   └── .pnpm/
│       ├── lodash@4.17.21/
│       │   └── node_modules/
│       │       └── lodash/ (硬连接到全局 store)
└── ... (其他项目文件)

幽灵依赖问题(Ghost Dependencies)

在依赖管理中,幽灵依赖是指一个项目间接依赖于某些依赖项,而没有在项目的配置文件(如 package.json)中显式声明。这样会导致:

  • 依赖关系混乱,难以维护。
  • 项目在不同环境或团队成员间可能表现不一致,因为这些未声明的依赖可能存在或不存在。

硬连接是一种文件系统对象,它直接指向存储在磁盘上的数据块。创建一个硬连接就相当于给同一个文件取了多个名字,每个名字都可以独立访问同一数据。删除其中一个硬连接,数据并不会被删除,只有当所有的硬连接都被删除后,数据才会从磁盘上移除。 特点:

  • 硬连接指向相同的数据块,因此多个硬连接共享相同的文件内容。
  • 删除一个硬连接,不会影响其他硬连接访问同一文件。
  • 硬连接不能跨文件系统。

软链接是一种特殊的文件,内容是指向另一个文件或目录的路径。打开软链接文件时,系统会自动重定向到目标文件或目录。

特点:

  • 软链接类似于快捷方式,指向目标文件或目录的路径。
  • 删除软链接不会影响目标文件或目录,但删除目标文件或目录会导致软链接变成“悬空链接”(dead link)。
  • 软链接可以跨文件系统。

创建硬链接和软链接

硬连接的文件共享一个数据, 修改其中一个文件的内容, 另外一个文件也会变化。 软链接类似于快捷方式。

在 macOS 上创建硬链接和软链接

在 macOS 上,可以使用 ln 命令来创建硬链接。假设你有一个文件 original.txt:

echo 'Hello, World!' > original.txt

现在,创建一个硬链接 hardlink.txt:

ln original.txt hardlink.txt

这个命令会创建一个硬链接 hardlink.txt,它和 original.txt 指向相同的数据。你可以验证它们的 inode(文件系统中的唯一标识符)是相同的:

ls -i original.txt hardlink.txt  // 8715595886 hardlink.txt	8715595886 original.txt

使用 ln -s 命令来创建软链接。假设你有一个文件 original.txt:

ln -s original.txt symlink.txt

这个命令会创建一个软链接 symlink.txt,它指向 original.txt。你可以查看软链接的信息:

ls -l symlink.txt  // lrwxr-xr-x  1 zhengming  staff  12  7  3 20:42 symlink.txt -> original.txt

你会看到 symlink.txt -> original.txt 这样的输出。

在 Windows 10 上创建硬链接和软链接

在 Windows 10 上,可以使用 mklink 命令来创建硬链接。首先打开命令提示符(以管理员身份运行),然后假设你有一个文件 original.txt

echo Hello, World! > original.txt

现在,创建一个硬链接 hardlink.txt

mklink /H hardlink.txt original.txt

这个命令会创建一个硬链接 hardlink.txt,它和 original.txt 指向相同的数据。

使用 mklink 命令来创建软链接。假设你有一个文件 original.txt:

mklink symlink.txt original.txt

这个命令会创建一个软链接 symlink.txt,它指向 original.txt。