npm link 的使用
介绍
npm install
可以把发布在 npmjs
平台上的模块包下载到本地,npm install -g
可以把包下下来的同时,还帮我们配置好全局变量,让我们可以直接使用命令而不是通过 node
来执行或者配置 package.json
的 scripts
脚本来 run
。
但这仅限于已经发布的包,对于未发布的包,要怎么测试使用?
- 我们独立开发好这个依赖包,然后将它直接发布到
npm
镜像站上去,以后在其他项目中使用的时候,直接npm install moduleName
。 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
过一样,可以直接使用。
使用
- 进入需要测试的
my-library
目录(package.json
的name
属性为my-library
),执行npm link
命令。在全局环境下,也就是nodejs
安装目录下的node_modules
目录下,会生成一个符号链接文件,在windows
下就是一个快捷方式。 - 进入需要引入
my-library
模块的目录,将my-library
模块与此项目连接起来,执行npm link my-library
就可以完成它们的连接。 - 当项目和模块在同一个目录下,可以使用相对路径
npm link ../my-library
,不需要在my-library
目录执行npm link
。 - 使用
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
的别名。
- 在使用
npm
包的项目的文件目录下解除链接:
npm unlink my-library
- 去除全局链接:
npm unlink my-library -g