如何在npm工作区子包上下文执行根目录定义的npm脚本?
npm工作区复用根目录脚本的解决方案
方法1:让脚本接受目标路径参数
修改根目录package.json的clean脚本,使其支持传入子包路径:
{ "workspaces": ["packages/*"], "scripts": { "clean": "rm -rf $1/lib $1/dist" }, "private": true }
在根目录执行以下命令,清理指定子包:
npm run clean -- packages/example
若要批量清理所有子包,可修改脚本为:
"clean": "for pkg in packages/*; do rm -rf \"$pkg/lib\" \"$pkg/dist\"; done"
直接运行npm run clean即可完成所有子包的清理。
方法2:指定工作目录执行根目录脚本
如果脚本逻辑复杂,不想修改脚本内容,可通过--workdir(npm 8+支持)指定执行目录,同时用--prefix指向根目录调用脚本:
npm run --prefix . clean --workdir packages/example
或者通过cd切换目录后执行:
cd packages/example && npm run --prefix ../.. clean
这两种方式都会让根目录的clean脚本在packages/example的上下文执行,从而删除该目录下的lib和dist。
方法3:通过npm exec跨工作区调用
使用npm exec在目标子包的工作区中调用根目录的脚本:
npm exec --workspace packages/example -- npm run --prefix ../.. clean
这种方式会进入子包的工作环境执行根目录的clean脚本,实现预期效果。
内容的提问来源于stack exchange,提问作者grimsteel
相关产品推荐
相关产品推荐

