最近在卷的时候,同事教会了调试代码,使用npm link。这是我以前根本没有接触到的新知识,哈哈哈。
npm link的具体作用就是在本地直接调试第三方模块的源码。
业务场景:
当封装了一个第三方库,发布到npm的镜像上,在项目中就可以直接安装使用。但是在使用的过程中,如果发现了代码存在bug,那么就需要维护。
第一种方式:就是凭着感觉改,然后重新发布到npm的镜像上,再来确定bug是否修复完成(相对的比较麻烦)。
第二种方式:就是在修复的过程中,直接在本地调试,调试好了,再发布到npm的镜像上(比较推荐)。
那么npm link到底怎么使用呢?
npm link代码演示
创建两个项目,第三库(library) 和 测试项目(test_project)。
第一步:创建第三方库library
首先,在library项目下使用 npm init -y创建一个package.json文件,其中版本号(version)为(1.0.0),这个在后面需要被依赖。
然后创建一个入口文件index.js, 代码如下:
// 简单写一个打印函数,然后导出即可
const log = (str) => console.log(str);
module.exports = log;
第二步:创建本地的测试项目test_library
步骤跟上面一样,先创建一个package.json文件,然后再创建一个入口文件index.js
index.js的代码如下:
const log = require('library')
log('copyer')
进入项目test_project文件夹下,执行 node index.js命令,结果不言而喻,肯定会报错的。
报错的原因:就是找不到第三依赖
library。
那么这时候,npm link的作用就开始了。
第三步:npm link 开始表演
在 library 项目下,执行 npm link 命令,把library项目添加到全局的node_modules文件夹下,建立一个软链接。
在 test_project 项目下,执行 npm link library 命令, 就可以从全局的 node_modules 读取刚刚建立链接的library库。此时,我们就可以正确执行node index.js了。
当重新修改 library 的源码后,重新运行项目,就可以查看最新的效果,是不是很快捷方便啊。
当调试好之后就可以把 library 发布到镜像上去,同时进行解绑操作npm unlink library,最后通过 npm install library 的方式进行使用。
小结
npm link: // 把第三方模块添加到全局的node_modules,供其他项目使用(执行路径:第三方库)
npm link xxx: // 把第三方模块xxx添加到本地项目中,进行调试(执行路径:本地项目)
npm unlink xxx: // 解除本地项目与第三方模块的关联(执行路径:本地项目)
npm unlink: // 解除本地项目与所有的第三方模块的关联(执行路径:本地项目)
认识yalc
在了解 npm link 的过程中,又知道了 npm link的代替品: yalc。
yalc 的方案是在本地模拟一个 npm 仓库,使用真实的 npm package 代替各种 link ,除了不会发布到真实远端仓库外,都和真实发包无异。
安装
npm install yalc -g // 全局安装
使用
针对上面的示例:
// pwd: library
yalc publich // 代替了 npm link 操作(发布)
// pwd:test_project
yalc add library // 代替了 npm link library 操作(关联)
执行 node index.js, 成功运行。
如果修改了第三方库的源码,那么就需要重新发布
// pwd: library
yalc publish // 重新发布
// pwd: test_project
yalc update // 本地项目更新
yalc update [my-package] // 具体某一个包
执行 node index.js, 成功运行,修改的代码也是起效的。
移除依赖
yalc remove [my-package] // 具体的某一个包
yalc remove --all // 移除所有依赖并还原
查看仓库信息
yalc installations show