问题:我们开发完一个npm包,有没有这样一种方式,既不用正式发包,又能像正式发包一样本地直接安装调试呢?

答案是:有的!!!

它就是:Yalc

Yalc完美地模拟了正式发包及装包的流程,它既可以将本地构建好的包发布到本地全局的.yalc文件夹下,也可以将发布在本地的包安装到本地的任何一个项目里。

安装

全局安装yalc

 1npm i yalc -g

发布本地包——在npm包根目录下执行

1、调整包版本号

2、构建包,即build

 1npm run build

3、将本地构建好的包内容发布到全局.yalc下

 1yalc publish

4、将最新版本的包推送给所有使用yalc安装了该依赖的项目

 1yalc push

注:如果不想推送给所有,可以单独在某个项目内执行yalc update myPackage

安装本地包——在业务项目根目录下执行

1、将发布到本地全局(~/.yalc)的包安装到业务项目中

 1yalc add myPackage

2、重新安装下项目依赖

 1npm install

注:必须执行该命令,因为yalc add并不会自动安装本地包的自身依赖到项目中

更新本地包——在业务项目根目录下执行

注:如果发布时执行了push操作,该步骤可省

将myPackage的版本更新到最新版

 1yalc update myPackage

将所有从本地安装的包都更新到最新版

 1yalc update

删除本地包——在业务项目根目录下执行

从项目中移除从本地安装的依赖包

 1yalc remove myPackage

从项目中移除所有从本地安装的依赖包

 1yalc remove 

常见问题

Q1:包内容更新发布后,刷新页面没生效?

有可能是因为webpack等打包工具对node_modules做了缓存处理,即在不更新版本号的情况下即使包内容变更了也依然会走之前的缓存。故可尝试调整版本号后再做本地发布。 使用上述方案依然不行的话,也可尝试使用yalc link代替yalc add来安装调试包

Q2: 安装或更新本地包后,项目编译报Module not found: Can’t resolve xxx

这个可能是因为添加的本地包还有一些依赖没装上,重新执行npm install即可

个人笔记记录 2021 ~ 2025