# npm link 的应用场景

  1. 开发脚手架时,在本地调试命令
    开发脚手架时,在项目所在目录,执行 npm link 命令,就可以在全局执行项目的 package.json 文件的 bin 属性里面配置的命令
  2. 可以在项目里,直接使用本地包,从而对本地包进行调试
    当我们开发包 a 时,可以在发布前直接 npm link ,将包 a 链接到全局,然后在项目里 npm link a ,这样就可以在项目里面使用包 a ,从而对包进行调试
  3. MultiRepo 多仓库多模块应用 本地开发时,多模块之间共享代码的一种解决方案
    当仓库 a 要使用仓库 b 提供的代码的时候,可以在 b 仓库目录下, npm link 从而将仓库 b 链接到全局,然后再在仓库 a 里执行 npm link b , 然后就可以在 a 里导入 b 了。从而实现多仓库共享代码

# 本地包里执行 npm link 发生了什么?

  1. 在 npm 的全局模块目录(node 安装目录下的 node_modules )下会创建一个 软连接(符号链接) ,指向本地包。

  2. 根据 bin 配置的命令,在可执行目录下创建一个符号链接,指向 bin 里配置的可执行文件。
    例如,如果你的 package.json 文件中有如下配置:

    {
      "name": "your-project",
      "version": "1.0.0",
      "bin": {
        "your-script": "./bin/your-script.js"
      }
    }

    执行 npm link 后,将在全局的可执行文件目录下创建一个名为 your-script 的符号链接,指向你项目中 ./bin/your-script.js 文件。所以当我们在命令行里执行 your-script 的时候,实际相当于执行了 ./bin/your-script.js

    当我们全局安装包的时候,对 bin 的处理也是类似的,在全局的可执行目录下创建一个符号链接,指向 npm 全局模块目录下我们安装的全局包对应的可执行文件

# 项目里面执行 npm link <package-name> 发生了什么

  1. 在项目的 node_modules 目录下创建一个符号链接,指向 npm 的 全局模块目录 下对应的符号链接(这个符号链接是我们在对应的本地包里执行 npm link 的时候创建的)。然后当我们导入这个包的时候,就会在项目的 node_modules 里找,从而就会找到对应的符号链接,然后这个符号链接又指向 npm 全局模块目录下的符号链接,而这个符号链接又指向本地包文件,从而正确的导入和使用。
  2. 在项目的 node_modules/.bin 目录下根据对应本地包的 bin 创建对应的符号链接指向 npm 全局模块的对应的符号链接的可执行文件。

    当我们使用 npx 执行命令的时候,实际上是在 node_modules/.bin 找的对应的可执行文件执行的

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

ziMu 微信支付

微信支付

ziMu 支付宝

支付宝