Azure DevOps中原先正常的代码执行Npm@1 install任务突然失败
故障根因
核心是node-sass版本与Azure流水线运行环境的Node.js版本不兼容:
- 本地运行的Node版本对应npm 6.14.5,属于Node 14.x版本分支,node-sass@4.14.1对Node 14的适配完整,所以本地安装不会报错
- Azure流水线使用的
ubuntu-latest镜像近期更新了默认预装的Node版本,从日志可看到当前运行环境的Node版本为16.13.0、npm版本为8.1.0,而node-sass@4.x最高仅支持到Node 14,完全不兼容Node 16,因此安装时会触发源码编译失败。
修复方案
可任选以下任意一种方案解决问题:
- 方案1:固定流水线Node.js版本为14.x
在现有Npm@1任务前添加NodeTool任务,指定使用14.x分支的Node版本,和本地环境保持一致:
- task: NodeTool@0 displayName: '指定Node.js版本为14.x' inputs: versionSpec: '14.x'
- 方案2:将node-sass替换为官方推荐的dart-sass
node-sass已经正式被官方废弃,直接将package.json中的node-sass: ^4.14.1依赖替换为sass: ^1.50.0即可,两者API完全兼容,无需修改业务代码即可正常运行。 - 方案3:升级node-sass到支持Node 16的版本
将package.json中的node-sass版本升级到v6.0及以上,该版本开始适配Node 16运行环境。
内容的提问来源于stack exchange,提问作者Connell.O'Donnell
相关产品推荐
相关产品推荐

