简单谈谈关于Angular Cli打包的事
本文主要给大家介绍了关于Angular Cli打包的事,分享出来供大家参考学习,狼蚁网站SEO优化话不多说了,来一起看看详细的介绍吧。
一、引言
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://.demo./v2。但会发现,无法加载应用;这是由 index.html 会包括一句
<base href="/" rel="external nofollow" >
倒置所有脚本资源的加载URL指向根目录。Angular Cli 提供一个参数改变该值。
ng build --prod --bh /v2/
往往在开发过程中总需要依赖一些图片资源的访问,倘若在代码中采用绝对路径,那就懵逼了,所以建议不要在代码中使用绝对路径访问资源文件。
四、优化方式
1、输出包体组成分析文件
Webpack 有一个非常好用的工具叫 ,会自动分析包体组成结构,并以一种可视化的方式显示。
,生成 stats.json 包体组成结构的统计文件。
ng build --prod --stats-json
访问 导入生成的JSON文件即可。
利用可视化的视觉可以了解一些优化的细节。
2、Rollup 摇树优化
所谓Rollup是指Webpack2会把那些应用中未使用的引用代码除掉,但不会删除这些代码,所以就需要配合 UglifyJs 能够智能的移除这些未使用的代码。从而减少包体大小。
而Agnular应用是基于Typescript,Angular Cli提供了一个叫 插件,将 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 (更多细节见) 转化成 Webapck 项目所需要的配置文件与运行配置指令。这时候会在根目录产生 webpack.config.js 文件。
不过,也会改变了 package.json 与 .angular-cli.json 的一些配置,若你只想查看 Webpack 配置信息,可以还原这些配置即可。
结论
本文只是日常做一次,都是一些网络中可以查阅到的知识,并无新意。而上面所有 Angular Cli 相关命令,都可以在 都有相应的描述。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对狼蚁SEO的支持。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程