如何在根目录用单命令触发多子目录不同Node版本的Node.js构建?
跨系统Divi插件多版本Node构建解决方案
针对你的需求,提供三个可行的跨平台构建方案,解决Windows/macOS兼容性问题,实现根目录单命令完成全流程构建:
方案1:Yarn工作区 + NVM版本管理
适合依赖不同Node版本的子项目,利用NVM自动切换版本,结合Yarn工作区统一管理依赖与构建流程
配置版本文件
在子目录分别创建.nvmrc指定Node版本:/src/divi4/.nvmrc写入14/src/divi5/.nvmrc写入18
根目录
package.json配置{ "private": true, "workspaces": [ "src/divi4", "src/divi5" ], "scripts": { "install:all": "yarn workspaces run install", "build:divi4": "cd src/divi4 && nvm exec yarn build", "build:divi5": "cd src/divi5 && nvm exec yarn build", "build:root": "你的根目录打包命令", "build": "concurrently \"yarn build:divi4\" \"yarn build:divi5\" && yarn build:root", "postinstall": "yarn install:all" }, "devDependencies": { "concurrently": "^8.2.2" } }执行流程
- 安装依赖:
yarn add -D concurrently - 根目录运行
yarn install自动安装所有子项目依赖 - 运行
yarn build并行构建divi4/divi5,完成后执行根目录打包
- 安装依赖:
注意:Windows需安装nvm-windows,macOS/Linux用官方NVM,确保
nvm exec命令可用
方案2:ShellJS + Cross-Env跨平台脚本
无需依赖NVM,用ShellJS编写跨平台兼容的构建脚本,结合concurrently实现并行执行
创建构建脚本
根目录新建scripts/build.js:const shell = require('shelljs'); const concurrently = require('concurrently'); // 安装子项目依赖 shell.cd('src/divi4'); shell.exec('yarn install'); shell.cd('../../'); shell.cd('src/divi5'); shell.exec('yarn install'); shell.cd('../../'); // 并行构建子项目 concurrently([ { command: 'cd src/divi4 && yarn build', name: 'DIVI4' }, { command: 'cd src/divi5 && yarn build', name: 'DIVI5' } ]).then(() => { // 执行根目录打包 shell.exec('你的根目录打包命令'); }).catch(err => { console.error('构建失败:', err); process.exit(1); });根目录
package.json配置{ "scripts": { "install": "yarn install && cd src/divi4 && yarn install && cd ../divi5 && yarn install", "build": "node scripts/build.js" }, "devDependencies": { "shelljs": "^0.8.5", "concurrently": "^8.2.2" } }执行流程
- 安装依赖:
yarn add -D shelljs concurrently - 根目录运行
yarn install完成全量依赖安装 - 运行
yarn build触发跨平台构建流程
- 安装依赖:
方案3:npm-run-all轻量脚本管理
用npm-run-all简化脚本编排,实现并行+串行的构建顺序
根目录
package.json配置{ "scripts": { "install:divi4": "cd src/divi4 && yarn install", "install:divi5": "cd src/divi5 && yarn install", "install:all": "run-p install:divi4 install:divi5", "build:divi4": "cd src/divi4 && yarn build", "build:divi5": "cd src/divi5 && yarn build", "build:parallel": "run-p build:divi4 build:divi5", "build:root": "你的根目录打包命令", "build": "run-s build:parallel build:root", "postinstall": "yarn install:all" }, "devDependencies": { "npm-run-all": "^4.1.5" } }执行流程
- 安装依赖:
yarn add -D npm-run-all - 根目录运行
yarn install自动安装所有子项目依赖 - 运行
yarn build先并行构建子项目,再串行执行根目录打包
- 安装依赖:
关键注意事项
- Windows路径问题:脚本中避免复杂相对路径,可在ShellJS中用
process.cwd()拼接绝对路径 - Node版本校验:可在子项目
package.json中添加版本检查脚本,比如divi4的prebuild:"scripts": { "prebuild": "node -v | grep -q 'v14' || echo '请使用Node 14构建Divi4'", "build": "你的构建命令" }
内容的提问来源于stack exchange,提问作者xxtesaxx
相关产品推荐
相关产品推荐

