Skip to content

Angular build --prod 命令报错解决方案

问题描述

当尝试使用 Angular CLI 构建生产环境版本时:

bash
ng build --prod --aot

控制台返回以下错误:

Error: Unknown argument: prod

ng serve 命令正常工作,不带参数的 ng build 也能正常运行。为什么 Angular 会返回这样的错误?

原因分析

这个错误的原因是 --prod 参数在 Angular 12 中已被标记为已弃用,并在 Angular 14 中完全移除。这是 Angular CLI 团队对命令行参数进行简化和标准化的一部分。

版本兼容性说明

  • Angular 12: --prod 已弃用,但仍可使用
  • Angular 13: --prod 仍然可用但有警告
  • Angular 14+: --prod 已完全移除,不再支持

解决方案

方法一:使用新命令(推荐)

使用新的 --configuration production 参数替代 --prod

bash
ng build --configuration production --aot

方法二:简化命令

从 Angular 15 开始,ng build 命令默认行为已优化,等同于使用生产配置:

bash
ng build --aot

或者明确指定生产配置的简写形式:

bash
ng build -c production --aot

方法三:更新 package.json 脚本

package.json 中添加自定义构建脚本:

json
{
  "scripts": {
    "build-prod": "ng build --configuration production --aot",
    "build-dev": "ng build --configuration development"
  }
}

然后使用以下命令构建:

bash
npm run build-prod

方法四:更新 CI/CD 流水线配置

如果您在 Azure DevOps 或其他 CI/CD 平台中使用构建命令,需要更新相关配置:

xml
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod" />
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:ssr -- --prod" Condition=" '$(BuildServerSideRenderer)' == 'true' " />
xml
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --configuration production" />
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:ssr -- --configuration production" Condition=" '$(BuildServerSideRenderer)' == 'true' " />

配置示例

angular.json 文件中,您可以配置不同的构建环境:

json
"configurations": {
  "production": {
    "budgets": [
      {
        "type": "initial",
        "maximumWarning": "500kb",
        "maximumError": "1mb"
      }
    ],
    "outputHashing": "all",
    "sourceMap": false,
    "namedChunks": false,
    "aot": true,
    "extractLicenses": true,
    "vendorChunk": false,
    "buildOptimizer": true,
    "fileReplacements": [
      {
        "replace": "src/environments/environment.ts",
        "with": "src/environments/environment.prod.ts"
      }
    ]
  },
  "development": {
    "buildOptimizer": false,
    "sourceMap": true,
    "namedChunks": true,
    "extractLicenses": false
  }
}

总结

  • --prod 参数已在 Angular 14+ 中移除
  • 使用 --configuration production-c production 替代
  • 考虑更新 CI/CD 流水线和构建脚本以兼容新语法
  • 从 Angular 15 开始,默认构建行为已优化,简化了生产构建命令

遵循这些建议将确保您的 Angular 项目构建过程顺利运行,并与最新版本的 Angular CLI 保持兼容。