代码之家  ›  专栏  ›  技术社区  ›  Alexander Mills

“npm link x”与“npm install/path/to/x”之间的区别`

  •  27
  • Alexander Mills  · 技术社区  · 6 年前

    我想我明白了

    npm link x
    

    npm install /local/path/to/x
    

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

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

    2 回复  |  直到 6 年前
        1
  •  17
  •   Cody Gray    5 年前

    An article on Medium 亚历克斯·米尔斯把它裸露出来。

    它表明了 npm link x npm install /local/path/to/x 是:

    1. 最大的区别是 npm install /local/path/x 将 运行预安装/安装后挂钩,但是 NPM链路X 不会的。

    2. npm link 使用全球NPM空间, npm安装/local/path/x 没有。npm link创建到x的符号链接 在全局空间中,然后从调用npm link x时 它创建的符号链接不是直接指向x,而是指向 全球符号链接。如果你是 使用不同的全局node.js版本,例如nvm。

    3. npm install /absolute/path/x 将更改package.json, NPM链路X 没有。

    要获取新的本地副本而不是符号链接,请使用 npm pack ,就像这样:

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

    您也可以使用cp/rsync,但这不会运行install hook或将可执行文件放入 node_modules/.bin …那会有用的。

        2
  •  5
  •   Tarun Lalwani    6 年前

    NPM链接

    npm link
    npm link <folder>
    

    上述两个命令都将创建 <folder> 在全局包中。

    现在 npm link <folder> 将在您的 node_modules 文件夹也用于当前项目。这些名称将基于 package.json 而不是基于你链接的文件夹名

    这个 包.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. 它创建到原始文件夹的符号链接