1. 程式人生 > 實用技巧 >@babel/plugin-transform-runtime(三)

@babel/plugin-transform-runtime(三)

部落格:姜瑞濤的官方網站
原文連結:https://www.jiangruitao.com/docs/babel/deep/babel-plugin-transform-runtime-3/
版權採用《署名-非商業性使用-禁止演繹 4.0 國際》許可協議 轉載需註明原文作者、連結與版權協議

本節我們來講一下@babel/plugin-transform-runtime的配置項,可能會有點小枯燥,不過對你理解其使用很有幫助。

@babel/plugin-transform-runtime是否要開啟某功能,都是在配置項裡設定的,某些配置項的設定是需要安裝npm包的。

@babel/plugin-transform-runtime在沒有設定配置項的時候,其配置項引數取預設值。下面的兩個配置作用是等效的。

  {
    "plugins": [
      "@babel/plugin-transform-runtime"
    ]
  }
  // 是上方的預設值
  { 
    "plugins": [
      [
        "@babel/plugin-transform-runtime",
        {
          "helpers": true,
          "corejs": false,
          "regenerator": true,
          "useESModules": false,
          "absoluteRuntime": false,
          "version": "7.0.0-beta.0"
        }
      ]
    ]
  }

配置項講解

1.我們先看第一個配置項helpers

該項是用來設定是否要自動引入輔助函式包,這個我們當然要引入了,這是@babel/plugin-transform-runtime的核心用途。該項取值是布林值,我們設定為true,其預設值也是true,所以也可以省略不填。

2.接著來看corejs和regenerator

這兩項是用來設定是否做API轉換以避免汙染全域性環境,regenerator取值是布林值,corejs取值是false、2和3。這個上一節已經講過了,在前端業務專案裡,我們一般對corejs取false,即不對Promise這一類的API進行轉換。而在開發JS庫的時候設定為2或3。regenerator取預設的true就可以

3.useESModules

該項用來設定是否使用ES6的模組化用法,取值是布林值。預設是fasle,在用webpack一類的打包工具的時候,我們可以設定為true,以便做靜態分析。

4.absoluteRuntime

該項用來自定義@babel/plugin-transform-runtime引入@babel/runtime/模組的路徑規則,取值是布林值或字串。沒有特殊需求,我們不需要修改,保持預設false即可。

5.最後一項version

該項主要是和@babel/runtime及其進化版@babel/runtime-corejs2、@babel/runtime-corejs3的版本號有關係,這三個包我們只需要根據需要安裝一個。我們把安裝的npm包的版本號設定給version即可。例如,在上節的babel14例子裡,安裝的@babel/runtime-corejs3版本是7.10.4,那麼配置項version也取'7.10.4'。
其實該項不填取預設值就行,目前填寫版本號主要是可以減少打包體積。

另外,在Babel6版本,該外掛還有兩個配置選項polyfill和useBuiltIns,在v7版本已經移除了,大家不需要再使用。

 

小結:

1.要使用@babel/plugin-transform-runtime外掛,其實只有一個npm包是必須要裝的,那就是它自己@babel/plugin-transform-runtime。
對於@babel/runtime及其進化版@babel/runtime-corejs2、@babel/runtime-corejs3,我們只需要根據自己的需要安裝一個。

如果你不需要對core-js做API轉換,那就安裝@babel/runtime並把corejs配置項設定為false即可。

如果你需要用core-js2做API轉換,那就安裝@babel/runtime-corejs2並把corejs配置項設定為2即可。

如果你需要用core-js3做API轉換,那就安裝@babel/runtime-corejs3並把corejs配置項設定為3即可。

注:

1.那regenerator為何預設值是true?我的理解是,實現Generator與async轉換API程式碼較少,而且也需要一些語法轉換,所以預設值取了true。我們也可以設為false,不過沒必要。
2.在安裝@babel/preset-env的時候,其實已經自動安裝了@babel/runtime,不過在專案開發的時候,我們一般都會再單獨npm install一遍@babel/runtime。