Angular6以ng serve方式启动时指定环境方法及关联知识点

2023-11-20

一.踩坑

1.问题来源

  • 如何自定义环境并在启动时指定环境

2.解决方案

  • 使用configuration参数启动项目,如ng serve --configuration=local or ng serve -c local启动名为local的环境
  • 环境的定义在angular.json文件中(architect下build和serve都要添加环境配置),如下所示
"configurations": {
  "production": { #定义环境名词
    "optimization": true,
    "outputHashing": "all",
    "sourceMap": false,
    "extractCss": true,
    "namedChunks": false,
    "aot": true,
    "extractLicenses": true,
    "vendorChunk": false,
    "buildOptimizer": true,
    "fileReplacements": [
      {
        "replace": "src/environments/environment.ts",
        "with": "src/environments/environment.prod.ts"
      }
    ]
  }
}

其中默认使用的时environment.ts文件作为当前的环境文件,如需要在不同环境中使用不同的environment文件则需要写fileReplacements进行文件的替换

二.相关知识

1.添加新环境

Reference :Angular Cli使用

  • 在angular.json的build中添加配置(如添加一个dev2的环境)
"build": {
   "configurations": {
        "dev2": {
          "fileReplacements": [
            {
              "replace": "src/environments/environment.ts",
              "with": "src/environments/environment.dev2.ts"
            }
            /* You can add all other options here, such as aot, optimization, ... */
          ],
          "serviceWorker": true
        }
  • 在angular.json的serve中添加配置,当使用ng serve -c dev2时以dev2环境的方式配置
"serve":
      "configurations": {
        "dev2": {
          "browserTarget": "projectName:build:dev2"
        }

2.构建命令

  • 通常使用的构建命令是ng build,构建会从angular.json中读取相关配置
  • 上述命令等同于如下命令
$ ng build --target=development --environment=dev
$ ng build --dev --e=dev
$ ng build --dev
$ ng build
  • 其中用到了如下特性(关闭 aot 构建、生成 sourcemaps 等):
--aot=false #Ahead of Time编译,执行aot会去掉一些程序执行不需要的代码, 例如angular的compiler这时就不在build输出的文件里了,且–aot参数是让angular-cli启动预编译特性。
--envrionment=dev #-e Build环境
--output-hashing=media
--sourcemaps=true #-sm 生成source map
--extract-css=false
--watch #-w Watch并rebuild
--target -t #Build target
  • 如果需要生成生成环境的构建,运行如下命令:
$ ng build --prod

// 等同于
$ ng build --target=production --environment=prod
$ ng build --prod --env=prod
  • 默认开启的选项有(开启 aot 构建,关闭 sourcemaps 等):
--aot=true
--envrionment=prod
--output-hashing=all
--sourcemaps=false
--extract-css=true

3.测试

  • 如果是库项目或者一些公有底层项目,一个项目需要配套的测试文件,可以使用ng test来进行单元测试,使用ng e2e来进行集成测试。
  • 不过如果是变化频繁的业务型项目,可以看情况是否启用测试。
  • 如果不需要测试,可以将相关测试文件全部删掉即可,另外用ng newng g生成项目和组件时,可以忽略生成测试文件。
$ ng new lego --skip-tests=true
$ ng g c header --spec=false

4.脚手架

  • 可以使用如下命令快速生成项目代码
Component ng g component my-new-component 
// 不生成单元测试文件则可以使用 --spec=false 参数
Directive ng g directive my-new-directive
Pipe ng g pipe my-new-pipe
Service ng g service my-new-service
Class ng g class my-new-class
Guard ng g guard my-new-guard
Interface ng g interface my-new-interface
Enum ng g enum my-new-enum
Module ng g module my-module

5.代理

  • 通常我们采用ng serve --proxy-config proxy.conf.json的方式实现代理,深入了解之后发现,ng serve底层使用了webpack-dev-server,而webpack-dev-server又使用了http-proxy-middleware

6.自定义规范模板

  • 企业中都会有自己的代码规范,可能与ng g命令生成的样式不同,我们可以借助vscode自带的snippet定义模板,可以参考 VSCode Snippet

7.生产与开发build对比

ng build ng build --prod
Environment environment.ts environment…prod.ts
缓存 只缓存css里引用的图片 所有build的文件
source maps 生成 不生成
uglify
Tree-Shaking 不去掉无用代码 去掉无用代码
AOT
Bundling打包
–build-optimizer
–named-chunks
–output-hashing media 所有

8.Serve命令常用参数

--open -o 打开默认浏览器
--port -p 端口
--live-reload -lr 发生变化时重新加载网页(默认开启的)
--ssl 使用https--proxy-config -pc 代理配置
--prod 在内存中serve 生产模式build的文件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular6以ng serve方式启动时指定环境方法及关联知识点 的相关文章

  • Travis-CI“Android 28 许可证尚未被接受”

    我正在尝试使用 Travis 构建 android 项目android 28 and build tools 28 0 0但无论我做什么我都会得到 gt Failed to install the following Android SDK
  • C# 项目在 Visual Studio 中重建的原因

    我有一个包含约 320 个项目的大型解决方案 即使对单个 Web 表单进行很小的更改 也会导致测试 调试小更改所需的构建时间很长 我怀疑构建后文件复制任务会 触及 文件日期时间并导致多次重建 在没有任何强大的命名和版本控制影响的情况下 除了
  • 替代品?

    您建议用什么来替代 Maven Java 构建工具集 只是简单的 Ant 脚本吗 SCons 无论如何 这取决于你使用什么 马文1 马文2 我发现 Maven 2 有很好的文档记录 并且在与 Ant 任务和一些自制的 Java 插件结合使用
  • Gradle 不包括 FXML 和图像

    我一直在寻找将 FXML 和图像包含在build gradle以便将它们构建到罐子中 我有看here https stackoverflow com questions 21128652 location is required in ja
  • Loop_apply.o:文件无法识别:文件格式无法识别

    我正在尝试安装R s plyr包裹 这是错误消息 installing source package plyr package plyr successfully unpacked and MD5 sums checked libs cla
  • 如何在gradle java构建脚本中访问环境变量

    如何在 gradle java 构建脚本中访问环境变量 用户级别或系统级别 我是 gradle 新手 我正在尝试使用 gradle 构建我的项目 目前我已经硬编码了第三方 jar 的路径 如下面的脚本所示 repositories flat
  • ant命令不生成apk文件

    我正在使用 Ant 构建我的应用程序 我的应用程序使用库项目 所以首先我在命令行中运行以下命令以在我的项目中生成 build xml 安卓更新 项目 target 5 p 我的项目路径 l 我的库项目路径 我的应用程序的构建目标是 4 0
  • sbt (play!) 项目与 Maven 父 pom 的集成

    我有一个 Maven 项目 其中包含围绕父 pom 组织的多个 Maven 模块 所有这些模块都打包成 JAR 文件 这些文件是我的 Play 的依赖项 作为 SBT 项目构建的应用程序 MyProject gt pom xml paren
  • 通过 HTTP Post-Commit Hook 将 Github 连接到安全的 Jenkins

    我已经在我的测试服务器上使用 Github 插件设置了 Jenkins 我通过仅允许经过身份验证的用户 匿名用户没有任何权限 和安全连接来保护 Jenkins 不幸的是 Github 提供的提交后挂钩似乎不适用于我的情况 我尝试访问以下网址
  • Bootstrap 在 Angular 6 中无法正常工作

    我开始学习 Angular 并且正在学习教程 我尝试将代码放入导航栏教程中
  • Maven 父项目自动化

    我有这个结构 child C 家长 A child B 如果我尝试在没有父级的情况下安装子级 B maven 会抛出一个错误 我知道按照惯例我应该将父级安装在我的存储库中 但是有没有办法让某人拉取子级并在安装过程中安装自动父辈 编辑 我要尽
  • 在一致的环境中执行Java程序

    在我工作的地方 我们有一个 shell 脚本 它允许我们使用所有必要的库和设置执行任意 Java 类 例如 bin sh JAVA HOME bin java cp LONG LIST OF JARS Xmx6g XX MaxPermSiz
  • 如何将 Jira 问题收集器与 Angular 应用程序集成?

    我正在创建一个 Angular 7 应用程序 它利用 Jira 问题收集器将问题直接提交到各自的项目 当我按照现在的方式构建应用程序时 什么也没有发生 当我直接将代码从方法 submitIssue 移动到 ngOnInIt 下时 会出现问题
  • 生产构建中的错误:索引 html 生成失败 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 升级了角10项目到角12 但现在在运行生产构建时 出现错误 索引 HTML 生成失败 未定义 6 720366 缺少 n
  • 访问附加到 ELF 二进制文件的数据

    我有一个静态 ELF 二进制文件 它从 zip 文件中读取数据 为了简化分发 我想将 zip 文件附加到二进制文件中 如下所示 cat mydata zip gt gt mybinary 我知道这样做不会损坏 mybinary 但我不知道如
  • csproj 文件中的项目顺序重要吗?

    我想以编程方式管理整个团队解决方案中的 VS2008 csproj 文件 我们偶尔会遇到合并问题 在 Hg 中 只是因为两个开发人员在项目中添加了不同的新文件 但它们最终出现在 csproj 文件中的 同一位置 并触发了 解决冲突 的需要
  • 除非我手动选择“重建”,否则 Visual Studio 2010 不会重建更改的代码

    在过去一周左右的时间里 我注意到 Visual Studio 2010 不会重新编译代码 除非我强制这样做 这是一个使用 WPF 的 C 4 0 项目 我按了 F5 如果代码已更改 它似乎使用了重建 然后启动应用程序 相反 它现在在左下角状
  • 在 xhtml 页面中显示版本和构建日期

    我想在 JSF 应用程序的页脚上显示构建版本和构建日期 这些页面是 XHTML 我正在寻找从 pom xml 或其他工件获取信息的方法 我发现以下使用 maven replace 插件 http www vineetmanohar com
  • qmake 和 QT_INSTALL_PREFIX。如何为 Qt 库选择新位置?

    我是 qmake 的新手 我正在尝试构建一个现有的应用程序 Qt 最初安装在 usr local lib Qt 4 3 5 中 qmake query QT INSTALL PREFIX 返回该路径 我已将 Qt 库移动到另一个位置 生成的
  • 使用 Ant 运行 JUnit 测试

    我正在尝试运行我的 JUnit 测试用例 但我不断收到错误 Test com capscan accentsWorld FAILED 报告已创建 但测试未运行 这是我的蚂蚁代码

随机推荐

  • 【MongoDB for Java 1】

    获得数据库服务 Mongo m new Mongo localhost 27017 得到数据库mytest DB db m getDB dbtest 得到mytest数据库下所有表名 Set
  • 【自用】无法通过ESP32创建HomeAssistant实体问题解决(MQTT对ESP32创建实体请求无应答)

    一 问题描述 1 使用 MQTTX 测试客户端能够创建实体 当通过 MQTTX 发送注册实体请求的时候 实体能够在 MQTT 服务器中注册成功 2 使用 ESP32 无法创建实体 在ESP32中通过 publish 函数发送注册请求的时候
  • 数据库不推荐使用外键的9个理由!

    我的经验告诉我 很多数据库 大多数我曾经使用的 不包含外键时并不总是一件坏事 在这篇文章中 我想把重点放在为什么的原因上 为什么这是一个问题 1 潜在的数据完整性问题 缺少外键明显问题是数据库不能强制进行引用完整性检查 如果在高一层没有正确
  • 用指针访问一维数组

    文章目录 顺序查找 数组方式实现 指针实现方式 对一位数组元素的访问有三种方式 指针变量的关系运算 引例 数组实现方式 主函数 指针实现方式 主函数 一维数组作为函数的参数 实际应用 顺序查找 要求用指针实现 在整数集合r中顺序查找与给定值
  • linux下安装redis数据库

    上一篇文章写到安装虚拟机 接下来就可以使用我们的虚拟机了 redis的安装 首先我们下载好需要的安装包 可以进入官网 https redis io download 不挑版本的直接用我分享的redis 6 2 6 tar gz 链接 htt
  • .vimrc配置

    set 前加冒号 与不加 一样 set nu 状态栏 let mapleader
  • Xmind8 Pro安装教程(Win+Mac)

    原文http blog csdn net anzhongliu article details 78081267 转自 https blog csdn net u014172271 article details 79666848 xmin
  • 网络安全工程师教你:Shadon网络空间搜索引擎使用教程

    一 背景介绍 与谷歌不同的是 Shodan不是在网上搜索网址 而是直接进入互联网的背后通道 Shodan可以说是一款 黑暗 谷歌 一刻不停的在寻找着所有和互联网关联的服务器 摄像头 打印机 路由器等等 每个月Shodan都会在大约5亿个服务
  • Linux--shell之while循环+for循环+until循环

    Linux shell之while循环 for循环 until循环 概述 for循环 while循环 until循环 循环嵌套 概述 脚本执行任务的时候总会遇到需要重复执行的时候 为了节省资源 除了计划任务 我们还可以使用脚本来完成 接下来
  • 数据分析库的拓展学习

    01 前言 除了前文所说的python数据分析的 三大神器 之外 你还需要对数据进行进一步的建模 预测 评估 并进行数据可视化 想要一劳永逸 就需要坚持学习一些更好用的数据分析库 接下来就逐一介绍 02 衍生库的使用 Seaborn Sea
  • 前端框架之Vue学习(二)

    一 事件修饰符 enter 回车生效 常用于替代判断是否按下回车事件 once 单次生效 只会生效一次 stop 阻止事件冒泡 self 阻止事件冒泡 只有点击自身时才生效 capture 将后面的事件变为捕获事件 prevent 阻止默认
  • Camunda工作流网关(二)-Parallel Gateway(并行网关)

    目录 1 Parallel Gateway 并行网关 2 业务场景 3 BPMN流程模型文件 在Camunda的 Modeler工具中提供了5种类型的网关 Exclusive Gateway 独占网关或排他网关 Parallel Gatew
  • [SUCTF 2019]EasyWeb

    SUCTF 2019 EasyWeb 打开环境是一段代码 其中if preg match x00 0 9A Za z x7F i hhh 这个判断是难点 它的绕过可以参考这篇文章https www h3399 cn 201909 72364
  • 接口自动化测试学习指南(2023版)

    一 为什么要学习接口自动化测试 1 1 了解接口自动化测试的重要性 提高效率与速度 持续集成与持续交付 准确性与一致性 更广泛的覆盖范围 持久回归测试 节省成本与资源 早期发现问题 提升团队信心 可重复与可维护性 支持多平台与多环境 1 2
  • python离线语音转文字

    1 安装SpeechRecognition第三方库 pip install SpeechRecognition 2 安装pocketsphinx第三方库 安装时 可能会报错error command swig exe failed No s
  • 多益网络笔试

    一笔 2017 05 19 基本上考的是写概率题和智力题 没来得及整理就忘得差不多 最后一个题是个推理题 二笔 2017 05 25 单选 C 的基础知识 二叉树结点计算 填空 类的操作 结构体 联合体的大小计算 简答 1 如何理解虚析构
  • Excel VBA获取最后一行列

    测试excel文件 VBA代码 Function getLastRow Debug Print End xlUp Sheets 1 A65536 End xlUp Row Debug Print usedRange ActiveSheet
  • Linux操作文档——FTP文件传输服务

    文章目录 一 基本概念 1 FTP连接及传输模式 2 用户列表文件ftpusers和user list 二 基于系统用户的FTP服务 1 匿名访问的FTP服务 2 用户验证的FTP服务 三 基于虚拟用户的FTP服务 1 建立虚拟用户的账号数
  • 网站页面导入css,图片等文件的相对路径和绝对路径问题

    相对路径 表示上一级目录开始 表示当前同级目录开始 相对 肯定是个参考对象 很多人可能会认为这个参考对象就是导入css或图片等的页面 但其实对于网站访问而言 这个对象是参考你所访问的url地址的 因为最近在写thinkphp 相对的话对于t
  • Angular6以ng serve方式启动时指定环境方法及关联知识点

    一 踩坑 1 问题来源 如何自定义环境并在启动时指定环境 2 解决方案 使用configuration参数启动项目 如ng serve configuration local or ng serve c local启动名为local的环境