在 Node 开发过程中随着代码规模的增加,会把一些基础模块封装成独立发布的 npm 包,供所有项目使用。但问题来了:
修改库包的代码后,如何与使用该库的项目代码集成测试?
每次发布到 npmjs 或私库,都会导致版本号更新太频繁;用软连接,各个文件夹切来切去,还得找到 global npm 包的位置。
其实只需要使用 npm 命令npm link
就能够实现。
相同目录下的链接
- 项目和模块在同一个目录下,可以直接使用相对路径链接
// 进入项目目录
$ cd path/to/my-project
// 链接模块目录
$ npm link path/to/my-module
-
npm link
操作会在项目的node_modules
目录下创建一个module-name
的超链接(类似 Windows 的快捷方式)或称 “symlink”,链接到path/to/my-module
。 -
path/to/my-project
和path/to/my-module
都是二者package.json
文件所在的目录。 -
module-name
依据 npm 模块的package.json
指定。
不同目录下的链接
- 项目和模块不在同一个目录下,需要先把模块链接到全局,然后再在项目中链接模块
// 先去到模块目录,把它链接到全局
$ cd path/to/my-module
$ npm link
-
npm link
操作会在全局node_modules
目录(如 MacOS 默认的是/usr/local/lib/node_modules
)下创建一个module-name
的超链接。
// 再去项目目录
$ cd path/to/my-project
// 通过包名建立链接
$ npm link module-name
- 此时只需要指定
module-name
,在项目的node_modules
目录下创建一个module-name
的超链接,链接到/usr/local/lib/node_modules/module-name
,然后再由全局目录下的超链接,链接到具体的代码目录下。
解除链接
- 解除项目和模块的链接
// 进入项目目录,解除链接
$ cd path/to/my-project
$ npm unlink module-name
- 解除模块的全局链接
// 进入模块目录,解除链接
$ cd path/to/my-module
$ npm unlink module-name