Angular 应用打包和部署

应用打包

对 Angular 应用打包,只需要执行下面的命令即可:

ng build

命令输出结果如下:

chunk {main} main.js, main.js.map (main) 22.4 kB [initial] [rendered]
chunk {polyfills} polyfills.js, polyfills.js.map (polyfills) 141 kB [initial] [rendered]
chunk {runtime} runtime.js, runtime.js.map (runtime) 6.15 kB [entry] [rendered]
chunk {styles} styles.js, styles.js.map (styles) 12.5 kB [initial] [rendered]
chunk {vendor} vendor.js, vendor.js.map (vendor) 2.22 MB [initial] [rendered]
Date: 2022-06-05T08:13:29.036Z - Hash: 320a98b795509f74dda8 - Time: 6897ms

构建过程会启动 Angular 编译器,主要收集应用中的所有 TypeScript 源文件,转换为 JavaScript 文件。在默认配置下,编译器会将 JavaScript 文件输出到 dist 文件夹。

开发模式构建

输出文件夹主要包含下列文件:

  • favicon.ico: 应用的图标,如显示在浏览器标题栏上
  • index.html: 应用的主 HTML 文件
  • main.js: 包含了开发的应用代码
  • polyfills.js: 提供遗留浏览器的兼容支持
  • runtime.js: 包含了 Angular CLI 相关的代码,能够运行其他文件
  • styles.js: 包含了应用的全局样式
  • vendor.js: 包含了 Angular 框架和其他第三方类库

此外,dist 文件夹还包括了 .map 结尾的文件,主要用于调试目的。

在构建生成的 index.html 文件中,引用了编译器输出的 JavaScript 文件:

<!doctype html>
<html lang=“en”>
<head>
  <meta charset="utf-8”>
  <title>BookStore</title>
  <base href=“/“>
  <meta name="viewport" content="width=device-width, initial-scale=1”>
  <link rel="icon" type="image/x-icon" href=“favicon.ico”>
</head>
<body>
  <app-root></app-root>
  <script src="runtime.js" defer></script>
  <script src="polyfills.js" defer></script>
  <script src="styles.js" defer></script>
  <script src="vendor.js" defer></script>
  <script src="main.js" defer></script>
</body>
</html>

Angular CLI 构建命令可以在两种模式下运行: 开发模式和生产模式。 默认使用开发模式,如直接运行 ng build。如果选择生产模式,需要添加命令选项:

ng build --configuration=production

或者使用快捷命令选项:

ng build —prod

使用生产模式构建应用,输出文件如下所示:

生产模式构建

与使用开发模式构建应用不同的是,输出的文件不再包含 .map 文件,不需要对生产代码进行调试。另外,输出的 JavaScript 文件和 CSS 文件,都包含了一个哈希值,可以让浏览器缓存的文件尽快失效,让新文件发挥作用。

限制包大小

随着应用功能的增多,构建应用的输出文件会越来越大。我们可以在 angular.json 文件中增加一些配置项,限制应用包文件的大小。例如:

  "budgets": [
    {
      "type": “initial”,
      "maximumWarning": “2mb”,
      "maximumError": “5mb”
    },
    {
      "type": “anyComponentStyle”,
      "maximumWarning": “6kb”,
      "maximumError": “10kb”
    }
  ]

上述配置,都是 Angular CLI 命令创建的默认配置。我们可以自定义不同类型的配置,也可以按百分比限制文件大小。

更多的配置选项,可以参考官方文档

部署应用

部署一个 Angular 应用是简单的,只需要把输出文件夹 dist 的全部文件,拷贝到服务器的相应路径下即可。

如果你想部署到另外一个目录下面,而非根目录,可以使用 ng buld 命令的 --base-href 选项,如下:

ng build --prod --base-href=/myapp/

上述命令会改变 index.html 文件的 base 标签的值:

<base href="/myapp”>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容