npm link

  目录

npm link用法

本地调试用

假设要开发一个工具库,可以供多个项目使用。
一种方法是发布到npm仓库中去,使用的时候,直接npm i moduleName,但是,这种方式不利于开发时候使用,每次改动都需要发布,其它依赖的项目还要更新依赖包,非常麻烦。
另一种方法是使用npm link,在命令行下npm link --help

1
2
3
4
npm link (in package dir)
npm link [<@scope>/]<pkg>[@<version>]

alias: ln

具体的使用示例:

1.在<工具库>目录下,使用npm link命令,会根据目录下的package.json文件,将项目名称和入口文件,软连接到nodejs的全局环境下。可以使用npm ls --global --depth 0命令查看当前全局都有哪些包。

1
2
3
4
5
6
7
8
D:\Program Files\nodejs -> .\
+-- corepack@0.10.0
+-- hexo-cli@4.3.1
+-- http-server@14.1.1
+-- nodemon@3.0.2
+-- npm@8.1.2
+-- pnpm@8.15.1
`-- simple-mind-map@0.9.7 -> .\..\..\..\jinux\test\思维导图\mind-map-main\simple-mind-map

上面是笔者nodejs全局下的包,只有simple-mind-map@0.9.7这个包是通过npm link软连接生成的,其他的都是npm全局安装的。
2.利用npm link生成软链接后,在需要引用<工具库>的项目目录下执行npm link <工具库名称>,这时在node_modules下就安装了这个工具库,而且是指向前面生成的软连接。
3.按照步骤2的方式,可以在多个项目中这样使用。当更改<工具库>代码后,其它引用这个依赖的项目也会自动更改。

卸载

  • 如果不需要依赖<工具库>时,可以在项目目录下执行npm unlink <工具库名称>
  • 全局删除软连接,npm rm --global <工具库名称>,有时候软链接可能删除了,但是还能使用,可以进入到nodejs全局安装的目录手动把这个包删除。

实际工作中的小技巧

比如,<工具库>这个包已经发布到npm上了,本地又有很多项目依赖,如果想每次发布这个包后,所有项目都跟着更新,步骤如下:

  • 全局安装<工具库>这个包,npm i <工具库名称> -g.
  • 在依赖<工具库>这个包的项目下,执行npm link <工具库名称>.
  • 全局更新包npm update <工具库名称> -g,所有link这个包的项目都会更新.

刚开始笔者也有疑问,全局安装的包不是在哪里都可以使用吗?为什么还要link呢?其实,npm i -g moduleName是将模块安装到全局目录下,但是只能在命令行下使用,项目代码中想require引用的话,还需要npm link后才能使用.