如何在package.json中根据Node.js版本设置条件执行脚本?
基于Node.js版本条件执行package.json脚本
完全可以实现根据Node.js版本条件执行不同构建脚本,以下是具体实现方案:
1. 编写版本检测脚本
在项目根目录创建check-node-version.js文件,用于检测当前Node.js版本并执行对应命令:
const { execSync } = require('child_process'); const nodeVersion = process.version; const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0], 10); const targetCommand = process.argv[2]; if (majorVersion === 16) { if (targetCommand === 'dev') { execSync('webpack --progress --mode production --dev', { stdio: 'inherit' }); } else if (targetCommand === 'prod') { execSync('lingui add-locale en && lingui extract --clean && lingui compile && webpack --mode production', { stdio: 'inherit' }); } } else if (majorVersion === 18) { if (targetCommand === 'dev') { execSync('SET NODE_OPTIONS=--openssl-legacy-provider && webpack --progress --mode production --dev', { stdio: 'inherit', shell: true }); } else if (targetCommand === 'prod') { execSync('SET NODE_OPTIONS=--openssl-legacy-provider && lingui add-locale en && lingui extract --clean && lingui compile && webpack --mode production', { stdio: 'inherit', shell: true }); } } else { console.error(`不支持的Node.js版本:${nodeVersion},请使用16或18版本`); process.exit(1); }
2. 修改package.json的scripts配置
将原有构建脚本替换为调用检测脚本的命令:
"scripts": { "build:dev": "node check-node-version.js dev", "build:prod": "node check-node-version.js prod" }
补充说明
- 脚本通过
process.version获取当前Node版本,提取主版本号进行判断 stdio: 'inherit'用于将命令的输出同步到控制台,方便查看构建日志- 若需跨平台兼容(Linux/macOS),Windows的
SET命令需替换为export,也可使用cross-env包统一处理环境变量,命令改为cross-env NODE_OPTIONS=--openssl-legacy-provider && ...
内容的提问来源于stack exchange,提问作者tRuEsAtM
相关产品推荐
相关产品推荐

