前言
`npm install` 可以把发布在 npmjs 平台上的模块包下载到本地,`npm install -g` 可以把包下下来的同时,还帮我们配置好全局变量,让我们可以直接使用命令而不是通过 node 来执行或者配置 `package.json` 的 script 脚本来 run。
但这仅限于已经发布的包,那对于未发布的包,要怎么测试使用呢?难道要把一个未经测试的包发布上去然后 install 下来测试?当然不能这么做,也不用这么做。npm 官方早已考虑到了这一点,给我们提供了测试本地的包的工具指令:`npm link`。
npm link原理
`npm link` 可以帮助我们模拟包安装后的状态,它会在系统中做一个快捷方式映射,让本地的包就好像 install 过一样,可以直接使用。
在 mac 中,我们在终端可以直接敲命令,其实是在执行 `/usr/local/bin` 目录下的脚本,这个目录可以认为是我们的全局命令所在的地方。
而当我们在 `npm install -g` 的时候,其实是将相关文件安装在 `/usr/local/lib/node_modules` 目录下,同时在全局命令 `/usr/local/bin` 目录下会有一个映射脚本,将其指向 /usr/local/lib 下的真实文件。这么做的好处是,可以在保证只有一份可执行文件的前提下,给命令取别名。
同样的,`npm link` 做的事情也是一样,唯一的区别是,它在 /usr/local/lib 下的 `node_modules` 里不是存的真实的文件,而是存了一个快捷方式,指向你当前执行 `npm link` 的目录。如果开发的的是 node 包,则执行的命令名和真实执行的文件入口,会通过项目的 `package.json` 里 `bin` 的配置来获取。
如何使用
cd projectdir
npm link
然后会看到输出类似如下的链接信息,说明成功。
/usr/local/bin/yourpakagename -> /usr/local/lib/node_modules/yourpackagename/xxx
/usr/local/lib/node_modules/yourpackagename/xxx -> /Users/username/Documents/xxx(your real project path)
全局link
测试 node 环境下运行的包时,需要使用全局 link。并且做`npm link`之前,需要在 `package.json` 里配置 `bin` 字段。
# package.json
"bin" : {
"your-command-name": "./path-to/your-command-entry-file"
}
然后再在当前目录下运行
npm link
成功后,就可以直接在终端执行全局命令 `your-command-name` 了。
项目下link
如果是测试前端包,跑在浏览器环境的,比如UI组件库,那需要做两次 link。
先进入待测试组件库目录,将开发的包 link 到全局:
npm link
之后,再进入要使用该组件库的工程,然后在工程中 link 这个组件库:
npm link your-ui-lib
现在你就可以在你的工程中使用这个 UI 组件库,就好像这个 UI 库被 install 到工程中一样。
- End -
相关文章推荐: