介绍

npm install 可以把发布在 npmjs 平台上的模块包下载到本地,npm install -g 可以把包下下来的同时,还帮我们配置好全局变量,让我们可以直接使用命令而不是通过 node 来执行或者配置 package.json 的 scripts 脚本来 run

但这仅限于已经发布的包,对于未发布的包,要怎么测试使用?

  1. 我们独立开发好这个依赖包,然后将它直接发布到 npm 镜像站上去,以后在其他项目中使用的时候,直接 npm install moduleName
  2. npm 另外也给我们提供了测试本地的包的工具指令:npm link

npm link 是一个命令行工具,用于在开发过程中将本地包符号链接为依赖项。它通常用于在发布之前测试包。

原理

当我们在 npm install -g 的时候,其实是将相关文件安装在/usr/local/lib/node_modules 目录(Windows 目录为 node 安装目录,可以使用 npm root -g 命令查看)下,同时在全局命令 /usr/local/bin 目录下会有一个映射脚本,将其指向 /usr/local/lib 下的真实文件。这么做的好处是,可以在保证只有一份可执行文件的前提下,给命令取别名。

npm link 做的事情也是一样,唯一的区别是,它在 /usr/local/lib 下的 node_modules 里不是存的真实的文件,而是存了一个快捷方式,指向你当前执行 npm link 的目录。如果开发的的是 node 包,则执行的命令名和真实执行的文件入口,会根据项目的 package.json 里 main 的配置来获取。

npm link 可以帮助我们模拟包安装后的状态,它会在系统中做一个快捷方式映射,让本地的包就好像 install 过一样,可以直接使用。

使用

  1. 进入需要测试的 my-library 目录(package.jsonname 属性为 my-library),执行 npm link 命令。在全局环境下,也就是 nodejs 安装目录下的 node_modules 目录下,会生成一个符号链接文件,在 windows 下就是一个快捷方式。
  2. 进入需要引入 my-library 模块的目录,将 my-library 模块与此项目连接起来,执行 npm link my-library 就可以完成它们的连接。
  3. 当项目和模块在同一个目录下,可以使用相对路径 npm link ../my-library,不需要在 my-library 目录执行 npm link
  4. 使用 npm 中的模块,也可以使用 npm link 命令,比如我们的很多应用都会用到 node-fetch 模块。可以先将 node-fetch 安装到全局模式下:npm install node-fetch -g。然后在每一个要使用 node-fetch 的项目中使用 npm link node-fetch,就可以将 node-fetch 链接到项目的 node_modules 下了。当 npm update node-fetch -g 更新时,所有 link 的项目会同时更新了。

解除

npm unlink 其实是 npm uninstall 的别名。

  1. 在使用 npm 包的项目的文件目录下解除链接:
npm unlink my-library
  1. 去除全局链接:
npm unlink my-library -g