Azure DevOps中npm返回代码254错误的原因及解决方法
错误含义解析
返回码254是npm命令执行失败的通用退出码,结合你提供的运行日志来看,核心问题是npm找不到package.json文件——日志里明确显示ENOENT: no such file or directory, open '/home/vsts/work/package.json',但你的代码实际存放在/home/vsts/work/1/s目录下(日志里的cwd = /home/vsts/work/1/s可以佐证),说明执行npm run test时的工作目录不对,导致npm在错误的路径下查找配置文件。
解决方案
咱们可以通过以下几步修复这个问题:
指定Npm任务的工作目录
在你的Npm@1任务中添加workingDirectory参数,指向代码仓库的根目录(Azure DevOps用$(System.DefaultWorkingDirectory)这个变量来表示该路径),确保npm能找到package.json。修改后的任务配置如下:- task: Npm@1 inputs: command: 'custom' customCommand: 'run test' workingDirectory: '$(System.DefaultWorkingDirectory)' # 新增这一行,指定正确的工作目录 continueOnError: true确认package.json的test脚本配置
检查项目根目录下的package.json,确保scripts字段里有正确的Cypress测试命令,比如:"scripts": { "test": "cypress run" }升级Node.js版本(可选但推荐)
你当前使用的Node.js 10.x版本已经不再被Cypress的新版本支持(Cypress 10+要求Node.js 14及以上),如果你的Cypress版本较新,建议把Node.js版本换成14.x或更高:- task: NodeTool@0 inputs: versionSpec: '14.x' # 替换成14.x/16.x等兼容版本 displayName: 'Install Node.js'
问题根源说明
Azure DevOps的Npm@1任务默认工作目录可能没有自动继承代码仓库的根目录,导致npm在错误的路径下寻找package.json,触发了文件不存在的错误,最终返回通用失败码254。指定工作目录后就能让npm在正确的位置执行命令了。
内容的提问来源于stack exchange,提问作者ABC123

