【问题标题】:Angular CLI build target vs environmentAngular CLI 构建目标与环境
【发布时间】:2018-02-20 00:01:15
【问题描述】:

Angular CLI中,运行build命令时--target--environment选项有什么区别?

来自文档:

ng build 可以同时指定构建目标(--target=production 或--target=development)和与该构建一起使用的环境文件(--environment=dev 或--environment=prod)。默认使用开发构建目标和环境。

但是,他们从未真正阐明两者之间的区别。

据我所知,--environment 标志控制在构建时使用哪个环境文件(environment.tsenvironment.prod.ts)。但是--target 控制什么呢?

【问题讨论】:

  • 您是否阅读过--dev--prod 构建的页面部分?它通过比较它们的设置的表格以及不可标记的生产设置列表准确地解释了这一点。
  • 这是上述表格的链接 - github.com/angular/angular-cli/wiki/…
  • 基于该表,我的理解是否正确,target 标志不会直接影响有关构建过程的任何内容,而只是设置其他标志的快捷方式做什么?此外,虽然您可以定义额外的环境,但您不能定义额外的目标(只有内置的devprod)?
  • @SergeyK 我想知道同样的事情。看来你是对的。

标签: angular angular-cli


【解决方案1】:

--environment.angular-cli.json 中的 apps[0].environments 对象的键

它就像一个运行环境的配置文件(例如:本地、开发服务器、测试服务器、CI服务器、阶段服务器、生产服务器等)。 apps[0].environments 对象的值是包含环境所有设置的文件名。在那里你可以设置后端端点、密钥和任何你想要的东西。然后你可以在你的代码中使用它:

import {environment} from '@environments/environment';
const userEndPoint = `${environment.apiRoot}/user/`;

每个环境都可以是生产(environment.production === true)或非生产环境,即开发(environment.production === false)。这是一个目标,也可以用下一个参数定义:

--target 是两个值的枚举:developmentproduction。这是一个“元”标志,设置其他标志:

标志 | --dev | --prod
--- | --- | ---
--aot | false | true
--environment | dev | prod
--output-hashing | media | all
--sourcemaps | true | false
--extract-css | false | true
--named-chunks   | true | false
--build-optimizer | false | true 使用 AOT 和 Angular 5

--prod 还设置以下不可标记的设置:
- 如果在 .angular-cli.json 中配置,则添加服务工作者。
- 将模块中的 process.env.NODE_ENV 替换为生产值(这对于某些库是必需的,例如 react)。
- 在代码上运行 UglifyJS。

来自https://github.com/angular/angular-cli/wiki/build/1cf783837c392f5fadc7286e1fb28220b9a1b507#--dev-vs---prod-builds

【讨论】:

    【解决方案2】:

    来自文档:Build Targets and Environment Files

    ng build 可以同时指定构建目标(--target=production--target=development) 和用于该构建的环境文件(--environment=dev--environment=prod)。默认情况下, 使用开发构建目标和环境。

    构建目标设置为生产具有以下效果:

    1. 提前编译,这意味着 Angular 编译器不会包含在最终构建中,这意味着渲染速度更快、体积更小
    2. 捆绑文件的散列
    3. 缩小生成的 javascript 文件
    4. Angular 在生产模式下运行,因此它会停止检查每个更改检测两次
    5. 渐进式 Web 应用程序仅在此模式下工作

    【讨论】:

    • 你能解释一下这个脚本的含义吗:“build:client-and-server-bundles”:“ng build --prod && ng build --prod --app 1 --output-hashing=假”,
    【解决方案3】:

    --target=production 意味着 angular-cli 将使用所有内容进行构建,用于生产。 --environment=prod 表示您在应用程序“环境”中拥有的对象将具有“生产”标志=true。

    【讨论】:

      【解决方案4】:

      从 Angular CLI 6 开始,环境选项一直是 deprecated

      build 相关命令中的 environment 选项被替换为 fileReplacements,如何使用请查看 wiki。

      构建系统已经过大修,更易于配置。 Build configuration 选项已移至工作区配置文件 (angular.json)。

      当您使用 CLI 创建项目时,默认会创建“生产”配置,您可以通过指定 --prod 选项来使用该配置。

      默认开发配置和生产配置的区别在于,开发配置使用 CLI 默认值(例如源映射),而生产配置启用 AOT、优化等。--prod 元标志针对“生产”配置并启用runtime production mode

      切换到生产模式通过禁用开发特定检查(例如双重变更检测周期)使其运行更快。

      在部分文档中,“环境”一词甚至是 replaced 和“构建目标”。 --target 选项早在 CLI version 6 也被替换为 --configuration

      【讨论】:

      • --target 呢?在 ng build 命令中添加此标志时,它也不再可执行
      • --target 选项已从至少版本 6 中弃用,并已替换为 --configuration。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 2019-11-19
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多