44

我以为我明白两者之间的区别

npm link x

npm install /local/path/to/x

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

但是,我最近注意到我最初的印象是错误的,它们似乎都使用符号链接 - 那么两者之间有什么区别吗?

4

2 回答 2

30

Alex Mills在 Medium 上的一篇文章对此进行了说明。

npm link x它说和之间的区别npm install /local/path/to/x是:

  1. 最大的不同是npm install /local/path/x它将运行 preinstall/postinstall 钩子,但npm link x不会。

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

  3. npm install /absolute/path/x会改变 package.json,npm link x 不会。

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

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

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

于 2018-06-04T21:29:53.857 回答
6

npm 链接

npm link
npm link <folder>

上述两个命令都将<folder>在全局包中创建一个符号链接。

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

您当前项目的package.json将不会被触摸或更改

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

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

所以总结一下

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

npm 安装

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

  1. 它不会在全局文件夹中创建符号链接
  2. 它更改并添加对 package.json 的引用
  3. 它创建指向原始文件夹的符号链接
于 2018-06-12T05:11:33.007 回答