亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

簡單談談關于Angular Cli打包的事

2019-11-19 15:33:19
字體:
來源:轉載
供稿:網友

本文主要給大家介紹了關于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 都有相應的描述。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产综合视频在线观看中文| 欧美黑人一级爽快片淫片高清| 69国产精品成人在线播放| 久久青草精品视频免费观看| 国产中文字幕亚洲| 2018国产精品视频| 日韩免费中文字幕| 77777亚洲午夜久久多人| 美女av一区二区| 日韩欧美精品免费在线| 亚洲97在线观看| 2019日本中文字幕| 中文字幕欧美精品在线| 亚洲japanese制服美女| 欧美激情精品久久久久| 亚洲激情第一页| 人九九综合九九宗合| 国产精品中文字幕久久久| 色综合男人天堂| 亚洲国产成人久久| 91高潮精品免费porn| 欧美日韩亚洲天堂| 欧美福利在线观看| 国产精品久久久久av| 亚洲女人天堂色在线7777| 在线丨暗呦小u女国产精品| 国产精品国产自产拍高清av水多| 亚洲天堂av在线播放| 国产精品日韩一区| 91久久综合亚洲鲁鲁五月天| 午夜精品久久久久久久白皮肤| 亚洲毛片一区二区| 91国产高清在线| 久久久久久久国产精品视频| 欧美性极品少妇精品网站| 在线观看精品国产视频| 亚洲国产欧美一区二区三区同亚洲| 国产精品久久久久久久app| 国产精品第七十二页| 日韩av一卡二卡| 色综合伊人色综合网站| 成人综合网网址| 亚洲色图综合网| 一区二区三区亚洲| 欧美成人亚洲成人日韩成人| 日本在线观看天堂男亚洲| 欧美成人免费小视频| 久久国产精品免费视频| 俺去啦;欧美日韩| 日韩精品在线第一页| 欧美精品在线播放| 欧美日韩国产成人高清视频| 国产精品成人在线| 日韩精品在线观看网站| 在线播放国产精品| 亚洲a区在线视频| 成人av电影天堂| 欧美激情综合亚洲一二区| 中文字幕久热精品视频在线| 亚洲成人久久久久| 亚洲第一网站男人都懂| 91精品啪aⅴ在线观看国产| 在线看片第一页欧美| 欧美性猛交xxxx乱大交极品| 国产精品高清网站| 日本成熟性欧美| 伊人伊成久久人综合网小说| 精品成人国产在线观看男人呻吟| 亚洲精品国偷自产在线99热| 97av在线视频免费播放| 日韩中文字幕在线视频播放| 亚洲国产中文字幕在线观看| 亚洲欧美制服第一页| 国精产品一区一区三区有限在线| 国产精品91久久久久久| 日本最新高清不卡中文字幕| 欧美成人在线影院| 亚洲天堂av网| 日韩va亚洲va欧洲va国产| 国产午夜精品一区理论片飘花| 欧美午夜www高清视频| 欧美激情伊人电影| 欧美日韩另类在线| 欧美激情2020午夜免费观看| 国产91色在线免费| 欧美日韩中国免费专区在线看| 91在线观看免费高清| 久久精品国产亚洲精品| 疯狂做受xxxx高潮欧美日本| 亚洲人永久免费| 精品国产视频在线| 日本视频久久久| 国产一区视频在线播放| 欧美在线欧美在线| 成人欧美一区二区三区黑人孕妇| 国产视频精品自拍| 国产精品999999| 欧美日韩午夜激情| 国产亚洲精品久久久| 97香蕉超级碰碰久久免费软件| 国产亚洲成av人片在线观看桃| 法国裸体一区二区| 亚洲深夜福利网站| 久久在线视频在线| 国产精品一区二区电影| 国产精品成熟老女人| 欧美国产在线电影| 欧美日韩一区二区精品| 国产精品久久久久久网站| 97视频免费在线看| 91精品国产91久久久久久| 日韩av在线精品| 亚洲精品视频在线播放| 亚洲色图美腿丝袜| 日韩电影中文字幕av| 一区二区三区视频观看| 疯狂做受xxxx欧美肥白少妇| 亚洲第一色中文字幕| 欧美极品少妇xxxxⅹ裸体艺术| 伊人久久久久久久久久| 国产成人涩涩涩视频在线观看| 国产精品视频一区二区三区四| 国产精品一区二区av影院萌芽| 久久精品国产久精国产一老狼| 2019中文在线观看| 欧美久久精品午夜青青大伊人| 日韩av在线免费观看一区| 欧美裸体xxxx极品少妇| 亚洲男女自偷自拍图片另类| 国产网站欧美日韩免费精品在线观看| 精品国产乱码久久久久久虫虫漫画| 欧美国产一区二区三区| 亚洲人成毛片在线播放| 精品国产乱码久久久久酒店| 亚洲第一福利网站| 欧美超级免费视 在线| 久久中文字幕在线视频| 91久久国产综合久久91精品网站| 欧美性videos高清精品| 久久频这里精品99香蕉| 日韩在线视频线视频免费网站| 亚洲人成自拍网站| 欧美大尺度在线观看| 欧美一级淫片播放口| 一夜七次郎国产精品亚洲| 国产综合在线观看视频| 国产精品久久久| 综合136福利视频在线| 蜜臀久久99精品久久久无需会员| 欧美夫妻性生活xx| 国产视频在线一区二区| 国产亚洲激情视频在线| 亚洲影视中文字幕| 8x拔播拔播x8国产精品| 国产97色在线|日韩| 国产精品午夜一区二区欲梦| 国产精品成人一区二区三区吃奶| 国产欧美日韩视频| 亚洲有声小说3d| 综合网日日天干夜夜久久| 久久精品欧美视频| 欧美一区三区三区高中清蜜桃| 国产精品18久久久久久首页狼| 欧美精品videosex牲欧美|