npm-link说明书
npm-link
将本地的两个npm包建立软链接,方便在开发阶段快速调测.
假设项目my-project
是我们开发项目, 需要用到独立my-utils
模块. 在开发阶段my-utils
中的修改我们希望可以实时同步到my-project
项目中.
将两个npm包建立链接只需要2步.
将包发布到本地全局
通过命令进入my-utils
工程目录:
1 | # 进入 my-utils工程目录 |
npm link
之后,在你操作系统中保存npm包全局的目录就会出现my-utils
的npm 包,但不是实体的只是软链接的方式存在.
建立npm 包引用关系
通过命令进入my-project
工程目录:
1 | # 进入工程目录 |
通过上面的命令,在my-project
项目中就可以引用本地的my-utils
工程了,并且my-utils
工程如果有变化会实时更新到my-project
中.
其他建立引用关系方式
你可以不将my-utils
工程发布到全局,而让my-project
能够建立依赖.
npm link
支持路径建立引用关系
1 | $ cd path/to/my-project |
移除引用关系
如果my-project
不想于本地的my-utils
建立引用关系了,可以移除掉.
1 | $ npm unlink my-utils |
npm link命令
1 | $ npm link (in package dir) |
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
的配置来获取。
1 | $ cd projectdir |
你会看到如下信息:
1 | /usr/local/bin/yourpakagename -> /usr/local/lib/node_modules/yourpackagename/xxx |
node包 全局 link
测试 node 环境下运行的包时,需要使用全局 link。并且做npm link
之前,需要在 package.json
里配置 bin
字段。
1 | # package.json |
然后再在当前目录下运行
1 | $ npm link |
成功后,就可以直接在终端执行全局命令 your-command-name
了。
参考
https://docs.npmjs.com/cli/v6/commands/npm-link
作者: Fynn
链接: https://fynn90.github.io/2019/12/01/npm_link%E8%AF%B4%E6%98%8E%E4%B9%A6/
本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可