全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

简单谈谈关于Angular Cli打包的事

本文主要给大家介绍了关于Angular Cli打包的事,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

一、引言

Angular从开发再到生产环境部署都离不开Angular Cli工具集,而Angular Cli本质上是使用 Webpack(当前使用版本为2) 来打包资源。

Webpack 本身并不复杂,略用过一点都清楚,只需要创建一个 webpack.config.js 的文件并简单的配置,就可以把一个复杂的应用所有文件全部打包成若干静态资源文件。

然而一个复杂的应用免不了使用到第三方类库,当这些外部类库与自身业务脚本联系在一起时,就产生一个大家都关心的问题:性能优化。

Angular Cli在构建一个含有路由、表单、HTTP等基本的Angular应用大约在150KB左右,就Angular体量而言,自己写一个 Webpack 也很难能优化到这个大小。所以说,Angular Cli是很有良心的作品。然而极大的简化对 Webpack 的使用,何乐不为呢?

本文我将介绍Angular Cli的一些配置在生产环境中所产生的效果,希望能让大家由于一些不合理的行为可能会导致文件体量的上升在改善这一问题时有所帮助。

二、.angular-cli.json 配置

Angular Cli 的配置文件是根目录下的 .angular-cli.json,而会影响文件体量的只有 styles、scripts 两个节点。

1、scripts

scripts 节点最后会生成一个独立的 scripts.bundle.js 文件,一般我们会把一些外部非Angular组件的类库放置在这里,比如:jQuery。

"scripts": [
 "../node_modules/jquery/dist/jquery.js",
 "../test.ts"
]

scripts 节点还允许 *.ts 文件。

2、styles

styles 节点最后会生成一个独立的 styles.bundle.css 文件。除此之外,组件内(styles 或 styleUrls)的样式会全部打包进 .js 文件中。

正如 jQuery 一样,如果我们需要引用第三方UI库,比如:bootstrap 那么:

"styles": [
 "../node_modules/bootstrap/scss/bootstrap.scss",
 "styles.scss"
]

默认情况引用的是 ./src/styles.scss,你可以继续导入外部其它外部样式文件。

@import "variables";
@import "nav";
@import "layout";

组件类样式

Angular组件内使用 styles 或 styleUrls 的样式会全部打包进相应模块的 .js 文件中;并且样式生成存储的方式是无法改变的。

encapsulation

顺带提一下。既然是Angular组件,如果说此时还需要外部的样式这显得有点框住组件独立性的特点,然而组件样式是否污染其它组件呢?我们通过指定 encapsulation 样式封装方式来改变这一些行为,它包括三个值:

  • ViewEncapsulation.Emulated 默认,采用额外添加一些 _ngcontent 属性来限定样式隔离
  • ViewEncapsulation.Native 采用Shadow Dom隔离方式
  • ViewEncapsulation.None 不隔离

三、ng build 指令

Angular Cli 会根据 .angular-cli.json 配置(apps/root、apps/main)决定从哪里开始启动。因此,当执行:

ng build --prod --build-optimizer

--build-optimizer 从 1.3.0-rc.5 才开始支持。相比较之前 Cli 版本,Tree-Shaking 力度更大,当然相应的文件大小也更轻。

会从根模块开始逐一对每一个模块进行打包,并保存在每一个文件当中。若采用路由迟延加载模块的话,会在 inline.js 中加上相应的动态加载脚本代码。

1、文件名哈希

Angular Cli 提供了 --output-hashing 参数,来指定文件名哈希模式,它包括四种:

模式 说明
none 不哈希
all 所有(若 --prod 时默认)
media 限资源文件
bundles 限webpack打包后的js文件

注意:这里并不会哈希 assets 文件夹,因为该文件夹采用是直接复制的形式。

2、指定输出

Angular应用很多时候可能是放在现有WEB服务的某个目录下(例如:v2),因此,访问地址会变成:https://www.demo.com/v2。但会发现,无法加载应用;这是由 index.html 会包括一句:

<base href="/" rel="external nofollow" >

倒置所有脚本资源的加载URL指向根目录。Angular Cli 提供一个参数改变该值。

ng build --prod --bh /v2/

往往在开发过程中总需要依赖一些图片资源的访问,倘若在代码中采用绝对路径,那就懵逼了,所以建议不要在代码中使用绝对路径访问资源文件。

四、优化方式

1、输出包体组成分析文件

Webpack 有一个非常好用的工具叫 webpack-bundle-analyzer,会自动分析包体组成结构,并以一种可视化的方式显示。

首先,生成 stats.json 包体组成结构的统计文件。

ng build --prod --stats-json

最后访问 webpack analyse 导入生成的JSON文件即可。

利用可视化的视觉可以了解一些优化的细节。

2、Rollup 摇树优化

所谓Rollup是指Webpack2会把那些应用中未使用的引用代码除掉,但不会删除这些代码,所以就需要配合 UglifyJs 能够智能的移除这些未使用的代码。从而减少包体大小。

而Agnular应用是基于Typescript,因此Angular Cli提供了一个叫 Angular Build Optimizer 插件,将 Typescript 编译结果转化成更友好的UglifyJs版本。这样UglifyJs就能够更有效的移除那些未使用的代码。

Angular Cli只需要加上 --build-optimizer 参数就可以,在一些情况下压缩的还是很厉害的。

ng build --prod --build-optimizer

3、导出Webpack配置

Angular Cli 是基于 Webpack 封闭的一个Angular命令行工具,但并不表示我们无法了解细节。

Webpack 的核心是 webpack.config.js 文件,然后 Angular Cli 构建的项目并看不到该文件。

但是可以透过 ng eject (更多细节见wiki) 转化成 Webapck 项目所需要的配置文件与运行配置指令。这时候会在根目录产生 webpack.config.js 文件。

不过,同时也会改变了 package.json 与 .angular-cli.json 的一些配置,若你只想查看 Webpack 配置信息,可以还原这些配置即可。

结论

本文只是日常做一次总结,都是一些网络中可以查阅到的知识,并无新意。而上面所有 Angular Cli 相关命令,都可以在 Wiki 都有相应的描述。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# angular  # cli  # 打包  # cli打包原理  # angular2  # Angular项目从新建、打包到nginx部署全过程记录  # Angular.js项目中使用gulp实现自动化构建以及压缩打包详解  # angular2+node.js express打包部署的实战  # es6+angular1.X+webpack 实现按路由功能打包项目的示例  # 使用ng-packagr打包Angular的方法示例  # Angular6项目打包优化的实现方法  # 加载  # 这一  # 会在  # 类库  # 只需要  # 会把  # 后会  # 配置文件  # 转化成  # 移除  # 就可以  # 的是  # 都是  # 这是  # 都有  # 在这里  # 何乐不为  # 好了  # 放在  # 也会 


相关文章: 建站VPS选购需注意哪些关键参数?  网站制作公司排行榜,抖音怎样做个人官方网站  如何通过可视化优化提升建站效果?  如何做网站制作流程,*游戏网站怎么搭建?  如何用搬瓦工VPS快速搭建个人网站?  建站主机选购指南:核心配置与性价比推荐解析  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  如何自定义建站之星模板颜色并下载新样式?  如何选择可靠的免备案建站服务器?  如何通过西部建站助手安装IIS服务器?  如何做静态网页,sublimetext3.0制作静态网页?  如何快速生成可下载的建站源码工具?  免费视频制作网站,更新又快又好的免费电影网站?  如何解决VPS建站LNMP环境配置常见问题?  网站图片在线制作软件,怎么在图片上做链接?  浅析上传头像示例及其注意事项  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  建站之星2.7模板:企业网站建设与h5定制设计专题  北京建设网站制作公司,北京古代建筑博物馆预约官网?  如何用5美元大硬盘VPS安全高效搭建个人网站?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  太原网站制作公司有哪些,网约车营运证查询官网?  深圳网站制作平台,深圳市做网站好的公司有哪些?  建站主机空间推荐 高性价比配置与快速部署方案解析  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  香港网站服务器数量如何影响SEO优化效果?  焦点电影公司作品,电影焦点结局是什么?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  济南网站制作的价格,历城一职专官方网站?  如何在建站主机中优化服务器配置?  济南企业网站制作公司,济南社保单位网上缴费步骤?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  如何用好域名打造高点击率的自主建站?  如何用西部建站助手快速创建专业网站?  宝塔建站后网页无法访问如何解决?  盘锦网站制作公司,盘锦大洼有多少5G网站?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  C#如何在一个XML文件中查找并替换文本内容  如何选择美橙互联多站合一建站方案?  图册素材网站设计制作软件,图册的导出方式有几种?  建站之星安装需要哪些步骤及注意事项?  建站之星免费版是否永久可用?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何在Windows环境下新建FTP站点并设置权限?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何在腾讯云免费申请建站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。