angular 8 不兼容IE11


差異化加載

在構建 Web 應用時,確保你的應用與大多數瀏覽器兼容是目標之一。JavaScript 在不斷發展,新功能不斷推出,不是所有瀏覽器都能以同樣的進度實現這些新功能。這就是編譯和膩子腳本(polyfill)的用武之地。你在開發過程中使用 TypeScript 編寫的代碼會被編譯並打包成一種兼容大多數瀏覽器的格式,通常為 ES5。 膩子腳本用於抹平差距,提供一些老式瀏覽器中根本不存在的功能。

確保這種瀏覽器的兼容性是有代價的,那就是更大的包體積。所有現代瀏覽器都支持 ES2015 及更高版本,但在大多數情況下,你仍然要考慮那些從老式瀏覽器訪問你的應用的用戶。為了最大限度地提高兼容性,你需要發布一個包含所有已編譯代碼的發布包(bundle),以及所有可能會用到的膩子腳本。用戶如果在支持大量最新 JavaScript 特性的現代瀏覽器中使用此應用,他就不應該為這些額外的包體積付出啟動時間和流量等方面的代價。這就是差異化加載發揮作用的地方。

差異化加載是指 CLI 在構建應用時,構建兩個單獨發布包的策略。現代的發布包中包含了現代的語法,利用了現代瀏覽器的內置支持,減少了膩子腳本的運行需求,減小了發布包的大小。第二個發布包中則包含了額外的編譯代碼,所有必需的膩子腳本,並導致了更大的包大小。這個策略允許你繼續構建你的 Web 應用來支持多個瀏覽器,但是只加載相應瀏覽器中必需的代碼。

配置差異化加載

Angular CLI 第 8 版及更高版本已支持構建差異化加載的發布包。工作空間中的每個應用項目,都可以根據其中的 browserslist 和 tsconfig.json 文件來配置發布包的構建方式。

來看看新創建的 Angular 應用的默認配置:

browserslist 是這樣的:

> 0.5% last 2 versions Firefox ESR not dead not IE 9-11 # For IE 9-11 support, remove 'not'.

tsconfig.json 是這樣的:

{
"compileOnSave": false,
"compilerOptions": {
"importHelpers": true,
"module": "esnext",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es2015",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2017",
"dom"
],
"plugins": [
{ "name": "tslint-language-service"}
]
}
}
 

默認情況下,會忽略老式瀏覽器(如IE 9-11),其編譯目標設置為 ES2015。結果就會生成兩個發布包,並啟用差異化加載。如果忽略全部不支持 ES2015 的瀏覽器,就只會生成一個版本。要了解不同配置下差異化加載的構建結果,請參考下表。

 

如上紅色字體顯示:把browserslist 中的not移除,tsconfig.json 的"target":改為“es5”即可,但會增加體積

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM