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

问题描述 投票:24回答:2

我以为我理解了它们之间的区别

npm link x

npm install /local/path/to/x

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

然而,我最近注意到我的原始印象是错误的,他们似乎都使用符号链接 - 所以两者之间有什么区别,它是什么?

node.js npm npm-install npm-link
2个回答
17
投票

亚历克斯米尔斯的An article on Medium露出了它。

它说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链接在全局空间中创建一个符号链接到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中...这将起作用。


5
投票

asl链接

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. 它会创建一个原始文件夹的符号链接
© www.soinside.com 2019 - 2024. All rights reserved.