最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

babel7按需加載polyfill示例詳解

 更新時間:2023年02月05日 15:26:17   作者:chenby  
這篇文章主要為大家介紹了babel7按需加載polyfill示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

babel7

babel7發(fā)布了。

在升級到 Babel 7 時需要注意幾個重大變化:

  • 移除對 Node.js 6 之前版本的支持;
  • 使用帶有作用域的 @babel 命名空間,以防止與官方 Babel 包混淆;
  • 移除年度預(yù)設(shè),替換為 @babel/preset-env;
  • 使用選擇性 TC39 個別提案替換階段提案;
  • TC39 提議插件現(xiàn)在是 -proposal,而不是 -transform;
  • 為某些面向用戶的包(例如 babel-loader、@babel/cli 等)在 @babel/core 中引入peerDependency。

官方提供了一個工具babel-upgrade,對于老項目,只需要執(zhí)行:npx babel-upgrade --write --install

具體看 https://github.com/babel/babel-upgrade

useBuiltIns:usage

babel的polyfill總是比較大,會影響一些性能,而且也會有一些沒用的polyfill,怎么減少polyfill的大小呢?

babel7提供了useBuiltIns的按需加載:usage。

配置中設(shè)置useBuiltIns:usage,babel就會自動把所需的polyfill加載進來,不需要手動import polyfill文件。

配置如:

{
    "presets": [
      "@babel/preset-react",
      ["@babel/env", {
        "targets": {
          "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
        },
        "useBuiltIns": "usage",
        "debug": true
      }]
    ],
    "plugins": ["@babel/transform-runtime"]
  }

babel提供的@babel/env全面替換es2015,stage插件。(如果用到stage的某些插件需要自行引入。個人感覺stage用起來太不方便了)。

之前的babel-preset-env/babel-preset-react全都改名為@babel/xxx,如果在babel7你還按之前的寫法,會報錯:

Error: Plugin/Preset files are not allowed to export objects, only functions.

效果

看下useBuiltIns:usage的效果。"debug"選項開到true,可以看到打包的文件。

我用es6摘抄了一些語法,用來測試編譯:

const a = Object.assign({}, { a: 1 });
console.log(a);
function timeout(ms) {
    return new Promise((resolve) => {
        setTimeout(resolve, ms);
    });
}
async function asyncPrint(value, ms) {
    await timeout(ms);
    console.log(value);
}
let s = Symbol();
typeof s;
class ColorPoint {
    constructor(x, y, color) {
      this.color = color;
    }
    toString() {
      return this.color + ' ' + super.toString(); // 調(diào)用父類的toString()
    }
  }
asyncPrint('hello world', 50);
function* helloWorldGenerator() {
  yield 'hello';
  yield 'world';
  return 'ending';
}
var hw = helloWorldGenerator();
console.log(hw.next());

babel編譯之后,可以看到加載的polyfill只加載了 es6.object.assign,es6.promise, es6.symbol,es7.symbol.async-iterator , regenerator-runtime。

babel是怎么知道我們需要哪些polyfill的?

根據(jù)我們填的"targets",babel會去查用到的api,當(dāng)前的target環(huán)境支持什么不支持什么,不支持的才加polyfill。

可以看到我們編譯后的文件已經(jīng)加了polyfill。

文件大小和性能都有很多提高。

useBuiltIns:entry

useBuiltIns:entry就沒有那么智能了,他會根據(jù)target環(huán)境加載polyfill,他需要手動import polyfill,不能多次引入。
@babel/preset-env會將把@babel/polyfill根據(jù)實際需求打散,只留下必須的。做的只是打散。僅引入有瀏覽器不支持的polyfill。這樣也會提高一些性能,減少編譯后的polyfill文件大小。

main.js需要引入polyfill。import '@babel/polyfill';
可以看到效果。我只截了部分polyfill依賴。

編譯后的文件引入了一堆polyfill。

最佳實踐

只用polyfill不是最完美的方案。
polyfill會額外引入一些函數(shù),比如:

因為polyfill沒有babel-runtime的helper函數(shù),在編譯async函數(shù)的時候,會引入以上的代碼asyncGeneratorStep_asyncToGenerator。

如果你每個文件都用到了async,那么冗余的代碼將會很大。

babel-runtime

最佳方案就是在用polyfill的同時,再用babel-runtime。

babel-runtime會把asyncGeneratorStep,_asyncToGenerator等函數(shù)require進來。從而減小冗余。

這得益于babel-runtime的helper函數(shù)。

所以最佳的配置是polyfill+babel-runtime。

如果用了react可以加@babel/preset-react。

{
    "presets": [
      "@babel/preset-react",
      ["@babel/env", {
        "targets": {
          "browsers": ["last 2 versions", "ie 11"]
        },
        "useBuiltIns": "usage"
      }]
    ],
    "plugins": ["@babel/transform-runtime"]
  }

可以看到,_asyncToGenerator2已被require。

以上就是babel7按需加載polyfill示例詳解的詳細內(nèi)容,更多關(guān)于babel7按需加載polyfill的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • javascript 判斷一個對象為數(shù)組的方法

    javascript 判斷一個對象為數(shù)組的方法

    這篇文章主要介紹了javascript 判斷一個對象為數(shù)組的方法的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 微信小程序3種位置API的使用方法詳解

    微信小程序3種位置API的使用方法詳解

    這篇文章主要介紹了微信小程序3種位置API的使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Echarts柱狀圖實現(xiàn)同時顯示百分比+原始值+匯總值效果實例

    Echarts柱狀圖實現(xiàn)同時顯示百分比+原始值+匯總值效果實例

    echarts是一款功能強大、靈活易用的數(shù)據(jù)可視化庫,它提供了豐富的圖表類型和樣式,包括柱狀圖,這篇文章主要給大家介紹了關(guān)于Echarts柱狀圖實現(xiàn)同時顯示百分比+原始值+匯總值效果的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • BootStrap入門教程(二)之固定的內(nèi)置樣式

    BootStrap入門教程(二)之固定的內(nèi)置樣式

    這篇文章主要介紹了BootStrap入門教程(二)之固定的內(nèi)置樣式的相關(guān)資料,本文介紹的非常詳細,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09
  • jquery實現(xiàn)左右滑動式輪播圖

    jquery實現(xiàn)左右滑動式輪播圖

    這篇文章主要為大家詳細介紹了jquery實現(xiàn)左右滑動式輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • javascript異常處理實現(xiàn)原理詳解

    javascript異常處理實現(xiàn)原理詳解

    這篇文章主要介紹了javascript異常處理實現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • js實現(xiàn)簡單隨機抽獎的方法

    js實現(xiàn)簡單隨機抽獎的方法

    這篇文章主要介紹了js實現(xiàn)簡單隨機抽獎的方法,涉及字符串的操作、setInterval定時調(diào)用等技巧,需要的朋友可以參考下
    2015-01-01
  • JavaScript中標(biāo)識符提升問題

    JavaScript中標(biāo)識符提升問題

    標(biāo)識符指的是javascript中定義的符號,標(biāo)識符可以由任意順序的大小寫字母、數(shù)字、下劃線和美元符號組成,但標(biāo)識符不能以數(shù)字開頭,也不能是javascript中的保留關(guān)鍵字。并且要注意,javascript是嚴格區(qū)分大小寫的。
    2015-06-06
  • Javascript 獲取字符串字節(jié)數(shù)的多種方法

    Javascript 獲取字符串字節(jié)數(shù)的多種方法

    Javascript 字符串字節(jié)數(shù)獲取功能多種方法
    2009-06-06
  • 基于JavaScript開發(fā)一個有趣的分組抽簽小程序

    基于JavaScript開發(fā)一個有趣的分組抽簽小程序

    在團隊合作開發(fā)中,經(jīng)常需要將團隊成員分組,來完成各自的任務(wù),而抽簽的方式自然是最公平、最簡單的方法之一,所以本文就來開發(fā)一個有趣的分組抽簽小程序吧
    2023-05-05

最新評論

新源县| 彭阳县| 阿城市| 安乡县| 天等县| 林甸县| 红原县| 徐汇区| 吉木乃县| 滦南县| 贵州省| 论坛| 当雄县| 十堰市| 梁河县| 梓潼县| 青河县| 巧家县| 文化| 林口县| 扎赉特旗| 仁怀市| 长岛县| 永城市| 青田县| 奉贤区| 临泽县| 雷山县| 顺昌县| 永城市| 花莲市| 工布江达县| 英德市| 桓台县| 中江县| 黄浦区| 大方县| 贵南县| 辰溪县| 三穗县| 航空|