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

时间:2018-06-04 05:46:31

标签: node.js npm npm-install npm-link

我以为我明白了

之间的区别
npm link x

npm install /local/path/to/x

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

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

2 个答案:

答案 0 :(得分:14)

Alex Mills的

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创建符号链接 在全局空间中,然后当你从中调用npm link x时 y,它创建一个不直接映射到x的符号链接,而是创建一个符号链接 全局符号链接。如果你这是一个重要的区别 使用不同的全局node.js版本,例如NVM。

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

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

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

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

答案 1 :(得分:4)

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. 它会安装任何缺少的依赖项
  4. npm install

    现在npm install <folder>与此

    有点不同
    1. 它不会在全局文件夹
    2. 中创建符号链接
    3. 它改变并添加对package.json
    4. 的引用
    5. 创建原始文件夹的符号链接