webpack學(xué)習(xí)筆記(8) ---- 使用babel打包es6語法

進入babel官網(wǎng),找到webpack相關(guān)的配置

  • 需要的依賴進行安裝:npm install --save-dev babel-loader @babel/core
  • 同時安裝preset-env:npm install @babel/preset-env --save-dev
    babel-preset env,內(nèi)置了es6的語法,語法轉(zhuǎn)換

對webpack配置進行補充,自動將es6代碼轉(zhuǎn)換成es5。
雖然可以識別,但是打包出來的main.js仍然會有promise,map等信譽發(fā),這樣在一些瀏覽器上是不能識別并運行的。

所以需要安裝一個語法補充包,也就是polly-fill
安裝:npm install --save @babel/polyfill
在入口文件引用:import "@babel/polyfill"
引用了pollyfill之后,它會自動對promise,map等語法進行實現(xiàn),并將實現(xiàn)后的結(jié)果放置在main.js之中。這樣main.js體積就會變地很大。對配置進行更改來減小main.js的體積。

babel官網(wǎng),找到preset --> preset-env

image.png

  • 對preset-env增加一個新的參數(shù)
{
        test: /\.js$/,
        exclude: /node_modules/,
        loader: "babel-loader",
        options: {
          "presets": [
       +++     ["@babel/preset-env", { 
       +++      "useBuiltIns": "usage" //只會補充添加用到的es6語法
       +++    }]
          ]
        }
      },

以上這種方案適合普通的業(yè)務(wù)代碼。
如果要開發(fā)第三方組件庫,不推薦使用polly fill。因為它會生成全局變量注入,導(dǎo)致變量污染。

  • 使用plugin-transform-runtime
    plugin-transform-runtime是以閉包的方式運作,可以避免全局污染

在babel官網(wǎng)中找到plugin-transform-runtime的相關(guān)內(nèi)容:

image.png

更改打包規(guī)則:

{
        test: /\.js$/,
        exclude: /node_modules/,
        loader: "babel-loader",
        options: {
          // "presets": [
          //   ["@babel/preset-env", {
          //     "targets": {
          //       chrome: "67"
          //     },
          //     "useBuiltIns": "usage"
          //   }]
          // ]
          plugins: [
            [
              "@babel/plugin-transform-runtime",
              {
                "absoluteRuntime": false,
                "corejs": 2, //推薦使用2,只開起promise這種全局變量
                "helpers": true,
                "regenerator": true,
                "useESModules": false,
                "version": "7.0.0-beta.0"
              }
            ]
          ]
        }
      }

如果對corejs改為非false的值,需要重新全裝依賴。


image.png

這樣依賴babel的那種方案就非常清晰了,此時webpack.config.js中的內(nèi)容過于臃腫,可以將babel的配置轉(zhuǎn)移到babel.rc文件之中。
直接將options對應(yīng)的內(nèi)容復(fù)制即可。

image.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容