无法将Angular8应用部署至OpenShift:报错‘Argument error, options.body’
Argument error, options.body 错误 从你的日志信息来看,有两个关键线索可以定位问题:一个是WARNING a file property was not found in your package.json,另一个是最终触发的ERROR Argument error, options.body。结合这两个点,我整理了几个可行的排查和解决步骤:
1. 给package.json添加files字段,明确需要上传的文件
当nodeshift检测不到files字段时,会默认打包当前目录下的所有文件,这可能导致生成的归档文件过大,或者包含了不必要的内容(比如日志里提到的e2e、.gitignore等非核心文件),进而在上传阶段触发options.body参数错误。
打开你的package.json,添加如下内容,只包含部署所需的核心文件:
"files": [ "src/", "angular.json", "package.json", "package-lock.json", "tsconfig.json", "tsconfig.app.json", "tslint.json", "browserslist" ]
2. 确保package.json的build脚本配置正确
你指定了--build.env OUTPUT_DIR=dist/readXchange-frontend,意味着OpenShift的s2i镜像会在构建阶段执行npm build命令,所以要确保package.json里的scripts有正确的build指令:
"scripts": { "build": "ng build --prod" }
如果方便的话,也可以先在本地执行npm run build -- --prod完成构建,再运行nodeshift命令,减少远程构建的不确定性。
3. 更新nodeshift到最新版本
旧版本的nodeshift可能在处理Windows路径(你的日志里路径混合了\和/)或者归档上传时存在bug。尝试更新到最新版后再执行部署:
npm install -g nodeshift
或者直接用npx指定最新版本运行:
npx nodeshift@latest --strictSSL=false --dockerImage=bucharestgold/centos7-s2i-web-app --imageTag=10.x --build.env OUTPUT_DIR=dist/readXchange-frontend --expose
4. 清理nodeshift临时文件
nodeshift会在本地生成临时归档文件,若之前的临时文件有损坏也可能导致上传失败。删除C:\Users\USER\CODE\angular\readXchange-frontend/tmp目录后,重新运行部署命令。
5. 用.nodeshiftignore排除不必要文件
除了files字段,你还可以创建.nodeshiftignore文件(规则和.gitignore一致),进一步排除非必要文件,缩小归档体积:
.editorconfig .gitignore e2e/ npx/ karma.conf.js tsconfig.spec.json README.md
如果以上方法都无效,建议尝试在WSL(Windows子系统Linux)环境下运行nodeshift命令,避免Windows路径处理带来的兼容性问题。
内容的提问来源于stack exchange,提问作者fabriziogianni7

