章
目
录
今天测试环境的vue项目在使用jekins构建到执行pnpm run build时报错,提示错误如下:
+ pnpm run build
> cmms-web@0.0.0 build /var/lib/jenkins/jobs/cmms-web-test/workspace
> vue-tsc && vite build
/var/lib/jenkins/jobs/cmms-web-test/workspace/node_modules/.pnpm/vue-tsc@1.8.27_typescript@5.5.3/node_modules/vue-tsc/bin/vue-tsc.js:68
throw err;
^
Search string not found: "for (const existingRoot of buildInfoVersionMap.roots) {"
(Use `node --trace-uncaught ...` to show where the exception was thrown)
ELIFECYCLE Command failed with exit code 1.
Build step 'Execute shell' marked build as failure
WARN: Unable to locate 'report-task.txt' in the workspace. Did the SonarScanner succeed?
SSH: Current build result is [FAILURE], not going to run.
Finished: FAILURE
报错原因
然后百度了下和bing搜索了下都不行,还是得google,一下子就搜索到了问题原因(更具体看这个地址),顺便推荐下google镜像站,如下:
翻译下就是因为原先typescript版本由5.4版本升级到了5.5版本导致的,啥?我没升级啊,咋回事?看了下jekin构建时安装依赖时的截图,发现确实是5.5.3版本,那么原因基本就确定了,基本就是因为版本升级导致的!
解决办法
按照搜索的解决办法是如下:
cd frontend
rm -rf node_modules
npm cache clean --force
如果你是pnpm就就直接使用pnpm,这个方法对本地可能比较有效,但是我这里本地是ok的,上线到测试环境却报错的了,于是看了下本地的ts的版本,使用如下指令:
pnpm list
结果如下:
本地确实是5.4版本的,后来发现pnpm-lock.yaml
中的版本也是5.4版本的(npm就去看package-lock.json),没问题,那就奇怪了,怎么本地版本正常,开发环境就异常的,经排查发现是因为pnpm-lock.yaml
文件竟然没提交到gitlab,导致jekins去拉取后pnpm install直接拉的的就最新版本,到此,问题就明确了,把pnpm-lock.yaml
文件提交了gitlab,再去构建发现版本就正常了:
进而构建就成功了,vue build报错Search string not found: “for (const existingRoot of buildInfoVersionMap.roots) {“问题完美解决!
后续更新优化
后来发现新的项目还是不行,最后解决方案修改package.json文件中的配置项,如下:
#原来是
"typescript": "^5.0.5",
#现在改为
"typescript": "~5.4.5",
然后再去pnpm install发现直接更新了ts版本问5.4.5,pnpm-lock.yaml
中的也也跟着自动更新了,完美解决!