【问题标题】:Difference between `npm link x` and `npm install /path/to/x``npm link x` 和 `npm install /path/to/x` 之间的区别
【发布时间】:2018-11-13 09:41:13
【问题描述】:

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

npm link x

npm install /local/path/to/x

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

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

【问题讨论】:

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


    【解决方案1】:

    An article on Medium by 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,它创建的符号链接不是直接指向 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... 中。

    【讨论】:

    • 这不是我的文章,它一定是另一个叫 Alex Mills 的人,奇怪的是之前没有注意到这一点,对我的功劳感到高兴!
    • 哈!想象一下!对不起,那我不应该给你功劳。已更正。干杯!
    【解决方案2】:

    npm 链接

    npm link
    npm link <folder>
    

    上述两个命令都会在全局包中创建&lt;folder&gt; 的符号链接。

    现在npm link &lt;folder&gt; 将在您的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 &lt;folder&gt; 和这个有点不同

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

    【讨论】:

      猜你喜欢
      • 2016-01-08
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多