package.json 跨平台脚本配置
在一个
package.json中处理 Windows 和 Linux 的不同命令。
场景
Windows 用 rmdir /s /q 删除目录,Linux 用 rm -rf。怎么在一个 package.json 里支持两个平台?
方案一:条件执行 (推荐)
利用 Node.js 的 process.platform 判断操作系统:
json
{
"scripts": {
"clean:win": "rmdir /s /q build",
"clean:unix": "rm -rf build",
"clean": "node -e \"require('child_process').execSync(process.platform === 'win32' ? 'npm run clean:win' : 'npm run clean:unix', { stdio: 'inherit' })\""
}
}或者用更简洁的方式:
json
{
"scripts": {
"clean": "node -e \"const{execSync}=require('child_process');execSync(process.platform==='win32'?'rmdir /s /q build':'rm -rf build',{stdio:'inherit'})\""
}
}方案二:使用 cross-env + shx
bash
npm install -D cross-env shxjson
{
"scripts": {
"clean": "shx rm -rf build",
"build": "cross-env NODE_ENV=production webpack"
}
}- cross-env:统一设置环境变量,抹平 Windows/Linux 差异
- shx:在 npm scripts 中使用 Unix-like 命令,跨平台兼容
方案三:使用 rimraf
专门用于跨平台删除的 npm 包:
bash
npm install -D rimrafjson
{
"scripts": {
"clean": "rimraf build"
}
}其他常见的跨平台命令对照
| 操作 | Linux | Windows (cmd) | 跨平台方案 |
|---|---|---|---|
| 删除目录 | rm -rf build | rmdir /s /q build | rimraf build |
| 复制文件 | cp -r src dist | xcopy /E src dist | shx cp -r src dist |
| 创建目录 | mkdir -p dist | mkdir dist | shx mkdir -p dist |
| 环境变量 | NODE_ENV=prod | set NODE_ENV=prod | cross-env NODE_ENV=prod |