天天看點

babel 和 babel-loaderbabel 概述babel-loader概述

babel 概述

Babel 是一個 JavaScript 編譯器,它是一個工具鍊,主要的用途就是在舊的浏覽器或環境中将ECMAScript 2015+ 代碼轉換為向後相容的 js 代碼。

案例分析

//demo  a.js
[1,2,3].map(item => item+20)
           

官方給的是@babel/cli,其内部包含調用了@babel/node

@babel/core 提供的是基礎 api

我們采用工具 @babel/cli 将包含es6文法的 a.js 檔案轉成 es5 代碼的b.js。

  • 首先 npm init 建立 package.json 檔案
  • 然後下載下傳@babel/cli @babel/core npm install -D @babel/cli @babel/core
  • npx babel a.js -o b.js

執行後的 b.js 中的代碼除了有一些格式化之外和原本代碼并沒有什麼變化,主要是沒有任何的預設(presets)和插件(plugins)轉換。

所有我們在項目根目錄下建一個 .babelrc 檔案:

{
	"presets":["@flowio/babel-preset-flowio"],
	"plugins":[]
}
//ps 單獨下載下傳 npm i -D @flowio/babel-preset-flowio

           

目前 babel 版本現在更新到了7 ,舊的 babel-preset-es2015 已經淘汰。

執行 npx babel a.js -o b.js,轉換後的代碼如下:

//b.js
"use strict";
[1, 2, 3].map(function (item) {
  return item + 10;
});
           

babel-loader概述

在 webpack 中babel-loader的配置項:

module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /(node_modules|bower_components)/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['@babel/preset-env']
        }
      }
    }
  ]
}
           

babel-loader 的作用是相對于一個交通指揮, 隻是在webpack打包時遇到js檔案,交給babel處理,至于怎麼處理,跟webpack就沒有關系了,跟 babel 的配置有關。