Azure Pipelines中npm命令因prepare脚本执行husky install失败的咨询
解决Azure Pipelines中npm publish触发husky install失败的问题
问题背景
我们的package.json里配置了"prepare": "husky install",这个脚本会在npm install之后、npm publish之前自动执行。本地开发需要这个脚本,但在Azure Pipelines构建服务器上运行时,因为找不到husky命令报错。目前已经通过npm ci --ignore-scripts解决了install环节的问题,但publish环节仍会触发该脚本,尝试npm config set ignore-scripts true也没解决问题。
解决方案
方案1:替换Npm@1任务为script任务,直接执行带参数的npm publish
Azure Pipelines的Npm@1任务的publish命令无法直接添加命令行参数,因此改用script任务执行npm publish并带上--ignore-scripts参数,同时配置访问Azure Artifacts所需的权限令牌:
- script: "npm publish --ignore-scripts" displayName: "npm publish" workingDirectory: 'dist' env: NODE_AUTH_TOKEN: $(System.AccessToken)
方案2:修改package.json,让prepare脚本仅在本地执行
通过判断环境变量,让prepare脚本只在非CI环境下运行(Azure Pipelines默认会设置CI=true):
"prepare": "[ -z \"$CI\" ] && husky install || true"
如果需要兼容Windows环境,可使用跨平台写法(需先安装cross-env作为开发依赖):
"prepare": "cross-env-shell \"if [ -z \\\"$CI\\\" ]; then husky install; fi\""
补充说明
之前尝试的npm config set ignore-scripts true未生效,大概率是因为Npm@1任务会在独立上下文执行,没继承之前设置的npm配置;或者publish任务的工作目录是dist,而配置设置在根目录,未作用到目标目录。
内容的提问来源于stack exchange,提问作者sheamus
相关产品推荐
相关产品推荐

