问题:我们开发完一个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