如何阻止Heroku部署React项目时自动安装开发依赖Husky
问题根因
npm的prepare是默认会在npm install/npm ci执行时触发的生命周期钩子,无论当前是开发还是生产环境都会运行。而Heroku生产部署环境默认仅安装dependencies下的依赖,不会安装作为开发依赖的Husky,因此执行prepare脚本时找不到husky命令导致构建失败。
可用解决方案(按推荐优先级排序)
方案1:修改prepare脚本,仅在非生产环境执行
直接修改client目录下package.json的prepare脚本,增加环境判断,生产环境跳过Husky安装:
"scripts": { // 其余脚本保持不变 "prepare": "if [ \"$NODE_ENV\" != \"production\" ]; then cd ../ && husky install ./client/.husky; fi" }
Heroku运行环境为Linux,该shell判断可直接生效,本地开发环境不受影响。如果需要兼容Windows开发环境,可以安装cross-env后改写为跨平台版本。
方案2:配置Heroku禁用prepare脚本执行
直接为你的Heroku应用添加环境变量,让npm全局跳过prepare脚本的执行:
- 你可以直接在Heroku应用后台的Settings页面的Config Vars栏添加变量:
NPM_CONFIG_SCRIPTS_PREPARE=false - 也可以通过Heroku CLI执行命令配置:
heroku config:set NPM_CONFIG_SCRIPTS_PREPARE=false
方案3:安装client依赖时跳过所有脚本执行
修改根目录package.json的install-client脚本,安装依赖时增加--ignore-scripts参数跳过所有生命周期脚本:
"scripts": { // 其余脚本保持不变 "install-client": "cd client && npm ci --ignore-scripts" }
注:该方案会跳过client包所有安装相关的生命周期脚本,如果你没有其他需要在依赖安装时执行的脚本可放心使用。
内容的提问来源于stack exchange,提问作者daniel blythe
相关产品推荐
相关产品推荐

