如何在npm scripts中区分Windows/Mac并仅在Mac执行chmod命令?
跨环境配置husky权限的解决方案
1. 在npm scripts中判断当前运行环境
可以直接利用npm内置的环境变量npm_config_platform,它会返回标准化的平台标识:
- Mac系统返回
darwin - Windows系统返回
win32 - Linux系统返回
linux
如果用Node.js脚本实现判断,也可以用process.platform,返回结果和上述一致。
2. 仅在Mac环境执行chmod命令
有两种实用方案:
方案一:直接在npm scripts中用Shell条件判断
适合不想额外写脚本的场景,直接修改package.json的scripts:
"scripts": { "prepare": "husky install && if [ \"$npm_config_platform\" = \"darwin\" ]; then chmod +x .husky/*; fi" }
注:这种写法依赖Shell环境(比如Mac的Terminal、Windows的Git Bash/WSL),如果是Windows原生CMD,可能不兼容,此时推荐方案二。
方案二:用Node.js脚本实现跨环境判断
写一个简单的Node脚本放在项目中(比如scripts/prepare-husky.js):
const { execSync } = require('child_process'); // 先执行husky初始化 execSync('husky install', { stdio: 'inherit' }); // 仅在Mac系统执行权限设置 if (process.platform === 'darwin') { execSync('chmod +x .husky/*', { stdio: 'inherit' }); }
然后修改package.json的scripts:
"scripts": { "prepare": "node scripts/prepare-husky.js" }
这个方案完全跨平台,不管是Mac还是Windows的原生CMD都能正常运行,不需要额外安装依赖。
内容的提问来源于stack exchange,提问作者laterday
相关产品推荐
相关产品推荐

