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

56

我以为我理解了两者之间的区别

npm link x

npm install /local/path/to/x

最初我认为前者在创建一个到x的符号链接,而后者则安装了x的一个独立副本到你的项目中,而不是通过符号链接来使用它。

然而,最近我发现我的初始印象是错误的,它们似乎都使用符号链接 - 那么这两者之间有什么区别,是什么呢?

2个回答

43

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 空间,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中...这样就能工作。


1
这不是我的文章,应该是另一个名叫Alex Mills的人写的,之前没注意到,但很高兴得到了认可! - Alexander Mills
1
哈!想象一下!抱歉,我不应该给你信用。已更正。干杯! - Cody Gray
听起来 npm link 可以与 Git 一起使用,而 npm install /absolute/local/path 则不行。 - Merchako

8

npm link

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 install

现在,npm install <folder>与此有点不同:

  1. 它不会在全局文件夹中创建符号链接。
  2. 它会更改并添加对package.json的引用。
  3. 它会创建到原始文件夹的符号链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接