`npm link x` 和 `npm install /path/to/x` 的区别

Difference between `npm link x` and `npm install /path/to/x`

我以为我理解了

之间的区别
npm link x

npm install /local/path/to/x

最初我认为前者创建了一个到 x 的符号链接,而后者在您的项目中安装了一个单独的 x 副本,而不是对其进行符号链接。

不过,我最近发现我原来的印象是错误的,他们似乎都使用符号链接——那么这两者之间有什么区别吗?

An article on Medium 作者 Alex Mills 将其展开。

上面写着npm link xnpm install /local/path/to/x的区别是:

  1. 最大的区别在于npm install /local/path/x会 运行 preinstall/postinstall 挂钩,但 npm link x 不会。

  2. npm link 使用全局 NPM space,npm install /local/path/x 不使用。 npm link 创建一个 symlink 到 x 在全局 space 中,然后当你调用 npm link x 时 y,它创建一个 symlink 不是直接指向 x,而是指向 全局符号link。这是一个重要的区别,如果你是 使用不同的全局 node.js 版本,例如 NVM。

  3. npm install /absolute/path/x 将改变 package.json、npm link x 没有。

要获取新的本地副本而不是 symlink,请使用 npm pack,如下所示:

tgz="$PWD/$(npm pack)"
cd <other project>
npm install "$tgz"

您也可以使用 cp/rsync,但这不会 运行 安装挂钩或将可执行文件放在 node_modules/.bin 中......这会起作用。

npm link

npm link
npm link <folder>

以上两个命令都会在全局包中创建 <folder> 的 symlink。

现在 npm link <folder> 将在您的 node_modules 文件夹中为您当前的项目同步 link 相同的内容。这些名称将基于 package.json 中的项目名称,而不是基于您 linking

中的文件夹名称

您当前项目的package.json不会被触及或改变

包的依赖项仍将被安装,如您在此处的代码中所见

https://github.com/nodejs/node/blob/31d5bdea70e44802918d6f4aa7c378bc1992be54/deps/npm/lib/link.js#L156

总结一下

  1. 它在全局文件夹中创建一个符号link(总是)
  2. 它不会改变 package.json
  3. 它确实安装了任何缺少的依赖项

npm 安装

现在npm install <folder>和这个有点不一样

  1. 它不会在全局文件夹中创建符号link
  2. 它更改并添加了对 package.json
  3. 的引用
  4. 它创建一个 symlink 到原始文件夹