使用 Angular CLI 和 Webpack 分析包尺寸

对于 Web app 来说,高性能总是最高优先级,对于 Angular 也不例外。但是随着应用复杂度的不断增长,我们如何才能知道哪些内容打包到了应用中呢?如何跟踪包的尺寸?我们不希望一次发送太多的 JavaScript ,以至于拖慢应用的速度。

过大尺寸的 JavaScript 包是丧失用户欢心的良药。不仅是拖慢了下载效率,而且要花费更多的时间在浏览器中分析然后执行。为了保持应用的速度,我们需要确保包尺寸足够小(250k 或更小),并在适当的时间加载。

在这篇文章中,我们将使用 Angular CLI 和一些简单的命令来获得我们发布产品的 Angular 应用包的详细报告。

Angular CLI

1. 首先,我们需要有一个应用作为分析对象。使用 Angular CLI 的 new 命令可以很简单地创建一个 Angular 应用。

ng new [应用名称]

应用将被创建在应用名称的文件夹中。

查看 new 的详细信息

2. 然后,我们可以产品模式编译应用,我们使用 CLI 的命令进行编译。

这里涉及到两个主要参数 prod 和 stats-json

2.1 prod

产品模式编译使用参数 prod,下面是 dev 和 prod 的区别

使用 --dev/--target=development 和 --prod/--target=production 两者都影响元标志,如果没有指定,默认为 --dev .

Flag --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 with AOT and Angular 5

--prod 还设置了下列的设置:

  • 如果在 .angular-cli.json 中进行了配置,添加 service worker.
  • 在模块中,使用 production 替换 process.env.NODE_ENV 的值。
  • 对代码执行 UglifyJS .

2.2  --stats-json

该参数用于生成可以使用  webpack-bundle-analyzer 或者 https://webpack.github.io/analyse  分析包结构的 stats.json 文件。

2.3 实际执行的命令

ng build --prod --stats-json

查看 build 的详细信息

Webpack bundle analyzer

States.json 是 Webpack 的一个特殊文件,webpack 是 Angular CLI 内部所使用的打包工具。使用 Webpack 帮我们生成的这个文件,我们可以使用各种不同的工具来理解我们的应用。

我们这里使用的工具是  Webpack bundle analyzer 。webpack 包分析器是一个 npm 包,可以在 webpack 的配置中或者命令行使用。对于我们来说,我们使用命令行工具。

为了使用这个工具,我们需要如下步骤:

  1. 通过 npm 安装这个工具

    npm install --save-dev webpack-bundle-analyzer
  2. 为方便使用,安装之后,在 package.json 中的 scripts 部分,添加下面的行来创建自定义的 npm 命令 
    "bundle-report": "webpack-bundle-analyzer dist/stats.json"
  3. 执行命令 
    npm run bundle-report

如果命令成功执行的话,你会看到打开了一个浏览器窗口,并看到类似如下的页面。

途中的每种颜色代表一个独立的包。在这个图中,可以看到我们有三个包,vendor 中包含所有的库代码,polyfill 包和 main 应用代码包。我们可以近一半查看未压缩和压缩之后的尺寸。这使得我们快速检查最大的包,并帮助我们决定何时使用 Lazy Loading 进一步拆分应用。

对于这个示例来说,可以看到应用的主要部分是 framework 部分,因为应用太简单了,在 main 中只有很少的组件。使用这个工具,我们可以看到虽然 Http 模块没有被使用,但是也被打包到应用中了。在移除这个未用到的模块之后,应用比以前变得更小更快了。

随着应用的成长,我们可以通过运行 npm run bundle-report 来仔细分析和检查依赖关系,以保持应用的尺寸和速度。

See also

使用 Angular CLI 和 Webpack 分析包尺寸的更多相关文章

  1. [转]Angular CLI 安装和使用

    本文转自:https://www.jianshu.com/p/327d88284abb 一. 背景介绍: 两个概念: 关于Angular版本,Angular官方已经统一命名Angular 1.x统称为 ...

  2. 使用Angular CLI进行Build (构建) 和 Serve

    第一篇文章是: "使用angular cli生成angular5项目" : http://www.cnblogs.com/cgzl/p/8594571.html 第二篇文章是: & ...

  3. .Net Core + Angular Cli / Angular4 开发环境搭建

    一.基础环境配置 1.安装VS 2017 v15.3或以上版本 2.安装VS Code最新版本 3.安装Node.js v6.9以上版本 4.重置全局npm源,修正为 淘宝的 NPM 镜像: npm  ...

  4. 从Java角度理解Angular之入门篇:npm, yarn, Angular CLI

    本系列从Java程序员的角度,带大家理解前端Angular框架. 本文重点介绍Angular的开发.编译工具:npm, yarn, Angular CLI,它们就像Java在中的Maven,同时顺便介 ...

  5. (转载)从Java角度理解Angular之入门篇:npm, yarn, Angular CLI

    本系列从Java程序员的角度,带大家理解前端Angular框架. 本文是入门篇.笔者认为亲自动手写代码做实验,是最有效最扎实的学习途径,而搭建开发环境是学习一门新技术最需要先学会的技能,是入门的前提. ...

  6. Protrator 官网和下载工具稍慢 , 但能使用. Angular CLI 内置 官方推荐 TS的 demo 不明显 , 而且依赖无法安装

    npm uninstall -g protractor  && cnpm install -g protractor && protractor --version 复 ...

  7. .Net Core+Angular Cli/Angular4开发环境搭建教程

    一.基础环境配置1.安装VS2017v15.3或以上版本2.安装VSCode最新版本3.安装Node.jsv6.9以上版本4.重置全局npm源,修正为淘宝的NPM镜像:npminstall-gcnpm ...

  8. Angular 8 - 更小的包

    Angular 8 - 更小的包 Angular 8 发布 原文地址:https://blog.angular.io/version-8-of-angular-smaller-bundles-cli- ...

  9. Cordova CLI源码分析(四)——创建工程

    在第一篇分析我们曾经举例,创建一个新工程, cordova create hello hellotest com.xxx.hellotest cli.js文件分析命令行参数后,会走到 else if  ...

随机推荐

  1. Sharepoint对List增删改操作

    在sharepoint的开发过程中,用得最多的,就是获取sharepoint的列表数据,以及对其进行一系列的增删改查等操作,这里主要是记录一些常用的操作,通过对象模型方式对数据进行增删改查. 由于sh ...

  2. 本站已稳定运行了XX天,网页时间显示功能实现方法

    这个是我昨晚上添加的效果, 分为三个部分: 1.本站已稳定运行了多少天的实现: 直接把下面代码复制到后台你想添加的位置即可. 1 2 3 4 5 6 7 8 9 本站已稳定运行了 <strong ...

  3. 配置puppet的主机端和客户端的自动认证

    配置puppet的主机端和客户端的自动认证 author:headsen  chen    2017-11-01  17:44:56 个人原创,转载请注明作者,出处,否则依法追究法律责任 1,先在主机 ...

  4. 开源自己用python封装的一个Windows GUI(UI Automation)自动化工具,支持MFC,Windows Forms,WPF,Metro,Qt

    首先,大家可以看下这个链接 Windows GUI自动化测试技术的比较和展望 . 这篇文章介绍了Windows中GUI自动化的三种技术:Windows API, MSAA - Microsoft Ac ...

  5. Angular -ui - BootStrap组件的解释以及使用

    关于UI BootStrap UI BootStrap 是angularUI团队用纯粹angularJS语法编写的Bootstrap组件. 1. 关于ng-router(angular-router. ...

  6. 基于TODO的开发方法

    之前买了一本书,叫<架构探险-从零开始写Java Web框架 >(不推荐购买-),一本标题党书籍!但是我很推崇作者写代码的方式,就是基于TODO的方式进行开发! 个人认为以基于TODO的方 ...

  7. java大数(BigInteger)

    JAVA之BigInteger 用Java来处理高精度问题,相信对很多ACMer来说都是一件很happy的事,简单易懂.用Java刷了一些题,感觉Java还不错,在处理高精度和进制转换中,调用库函数的 ...

  8. 使用Docker快速搭建Nginx+PHP-FPM环境

    下载nginx官方镜像和php-fpm镜像 docker pull nginx docker pull bitnami/php-fpm 使用php-fpm镜像开启php-fpm应用容器 docker ...

  9. table 表格的增删和修改

    如上图,图片的增删都没有问题:唯一的问题就是我改变下一行的内容时,把上面一行给覆盖了,费了好久,终于找到原因了,直接贴代码: 效果如下:

  10. 访问限制:由于对必需的库 C:/Program Files/Java/jre6/lib/rt.jar 具有一定限制,因此无法访问类型。。

    在项目上单击右键选择 属性 Java编译器 错误或警告 选择启用特定于项目的设置 建议不要使用和限制使用的API将 禁止的引用(访问规则) 设置为 警告 然后应用即可解决