背景
在项目开发过程中,随着项目越来越大,公共的组件或方法越来越多,会将一些功能封装成可独立发布的npm包。但在开发调试的时候存在一个问题,如何将使用该库的项目代码集成测试?
方案
1、修改后直接发布npm或私库(不推荐)
问题
每次发布到 npmjs 或私库,都会导致版本号更新太频繁。
2、用软连接(不推荐)
问题
用软连接,各个文件夹切来切去,还得找到 global npm 包的位置。
3、用软连接(不推荐)使用 npm 命令npm link
1、相同目录下的链接
项目和模块在同一个目录下,可以直接使用相对路径链接
// 进入项目目录
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
指定。
2、不同目录下的链接
项目和模块不在同一个目录下,需要先把模块链接到全局,然后再在项目中链接模块
// 先去到模块目录,把它链接到全局
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
,然后再由全局目录下的超链接,链接到具体的代码目录下。
3、解除链接
解除项目和模块的链接
// 进入项目目录,解除链接
$ cd path/to/my-project
$ npm unlink module-name
解除模块的全局链接
// 进入项目目录,解除链接
$ cd path/to/my-project
$ npm unlink module-name
拓展-京东小程序
建立连接后,需要在京东小程序中重新构建npm包,由于指定的npm包只能链接到node_modules下,如果依赖包的路径有特殊处理,则需要重新构建npm包。如果被单独拿出来的依赖包没有更新,建议删除node_modules,重新执行一遍。