如何在NPM Workspace中为子包执行npm install生成独立node_modules
需求可行性
该需求完全可实现,不需要调整现有开发阶段的monorepo依赖提升配置,开发阶段依然可以保留根目录统一去重的node_modules结构保证效率,仅在部署目标子包时执行对应命令即可生成自包含的子包目录。
具体操作步骤
- 部署打包前先进入目标子包目录:
cd packages/cloud-app - 执行生产依赖安装命令:
npm install --install-strategy=nested --omit=dev- 如果部署场景需要安装开发依赖,去掉命令中的
--omit=dev参数即可 - 该参数为npm v7及以上版本原生支持,会关闭workspace默认的依赖提升逻辑,将当前子包声明的所有第三方依赖、以及引用的同仓库其他工作区子包(如项目中的
helpers、business-logic包),全部安装到当前子包目录下的独立node_modules文件夹中,不会修改根目录或其他子包的文件结构
- 如果部署场景需要安装开发依赖,去掉命令中的
CI/CD场景可选优化
如果不想每次执行命令带长参数,可以在进入cloud-app目录后,临时创建一个仅在部署流程生效的.npmrc文件,写入配置:
install-strategy=nested omit=dev
之后直接执行npm install即可自动按嵌套模式安装依赖,打包完成后直接删除这个临时.npmrc文件,不会影响仓库原有配置。
效果验证
安装完成后packages/cloud-app目录下会生成独立的node_modules目录,包含该子包运行所需的全部依赖,直接将整个cloud-app目录打包上传即可完成常规部署,不需要携带根目录配置或其他工作区子包源码,完全适配不支持NPM workspace的厂商CD流水线。
注意:日常开发阶段不要使用该安装模式,否则会丢失依赖提升带来的安装速度、磁盘占用优化效果。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

