babel來進行js轉換


一.babel 含義:

          通天塔, 取統一人類的行動中的統一的意思. 

         1.將各種我們日常開發中用的順手的語言(比如es6, typescript ...) 編譯成 不同版本瀏覽器能識別的 語言;

         2. babel本身只是分析, 真正的語言轉換交給插件來完成

 

二 安裝 :

  1.安裝命令: npm install @babel/core @babel/cli -D 

    其中@表示命名空間. 第一個是babel的核心庫, 第二個是babel的cli工具,

        核心庫是具體的運行代碼提供api, cli庫是命令行工具, 我們人工來調用核心庫的工具

   2. 兩種編譯命令: npx bebal 源文件 -o 輸出文件 [-w]

                    npx bebal 源目錄 -d 輸出目錄 [-w]

              -o 表示output輸出   

                   如:  npx babel js/index.js -o dist/index.js     npx babel js -d dist

              -w 表示watch;監聽

三 配置

   babel如果不配置, 不會做任何事情, 真正的編譯要依托babel插件和babel預設完成.

   1 配置文件 .babelrc.json 或者 .babel.config.json 或者配置到package.json文件中. 三者選一種即可(文件后綴名.json可以省略)

    

//.babelrc.json文件
{
"presets": [...],//預設配置 "plugins": [...] //插件配置 }
1//package.json文件

{
2   "name": "my-package",
3   "version": "1.0.0",
4   "babel": {
5     "presets": [ ... ],
6     "plugins": [ ... ],
7   }
8 }

 

四. babel預設 (pre 先的意思  evn環境的意思;) 

   常用的babel預設是 @babel/preset-env;  一個普通的vue工程,Babel官方的preset只需要配一個"@babel/preset-env"就可以了。

   1. 先下載 :npm i -D @babel/preset-env 

   2. 再配置到配置文件中:

{
  "presets": ["@babel/preset-env"],
  "plugins": []
}

 配置完后, 編譯時會自動加載預設:npx babel js -d dist

   3. 設置匹配瀏覽器版本

   通過.browserslistrc文件或者package.json里的browserslist選項, 設置瀏覽器對相應版本

//.browserslistrc文件
last 3 version
> 1%
not ie <= 8

 4 設置針對新的api, 如promise, 的兼容, 

      因為babel只針對js的新語法有編譯功能, 對新的api無效, 需要單獨設置

1 //.browserlistsrc文件
2 {
3   "presets": [[
4     "@babel/preset-env",{ //數組中包含數組, 每個子數組都是一個預設, 每個子數組的第一個元素是預設名稱, 第二個元素是該預設的配置對象 5       "useBuiltIns":"usage",
"corejs":"corejs@2"
6 } 7 ]], 8 "plugins": [] 9 }
1 //index.js文件
2 const a = 1;
3 new Promise((res,rej)=>{
4   res();
5 })
 1 //編譯后的文件
 2 "use strict";
 3 
 4 require("core-js/modules/es6.object.to-string.js");
 5 
 6 require("core-js/modules/es6.promise.js");
 7 
 8 var a = 1;
 9 new Promise(function (res, rej) {
10   res();
11 });

因為需要用到core-js, 必須下載這個依賴默認是第2版.

需要運行命令: npm i core-js@2即可;

用新語法=>需要通用的工具babel=> 需要預設preset=> 需要設置: 在.babelrc中設置; 

想要新的api, 需要設置presetenv的useBuiltIns, 並且聲明corejs的版本, 並且下載corejs

五. babel插件:

  運行順序: 源碼 -> plugins 插件 -> preset 預設 -> 編譯后的代碼

 使用方法:(以去除console.log插件為例)

  1, 先npm i -D babel-plugin-transform-remove-console

 2 注冊查插件

 1 //.babelrc.json文件
 2 {
 3   "presets": [[
 4     "@babel/preset-env",{
 5       "useBuiltIns":"usage",
 6       "corejs":"core-js@2"
 7     }
 8   ]],
 9   "plugins": ["babel-plugin-transform-remove-console"]
10 }

3. 會自動應用

常見到的插件@babel/plugin-transform-runtime

作用, 將babel在各文件中生成的各種函數提取出來, 作為公用的代碼,在各文件中引用.

如右側的async 關鍵字會編譯成為左邊的兩個函數, 這樣通過安裝該插件, 這兩個函數會被生成到一個單獨的文件中

 

 

 

 

 

 

 五 .webpack中使用babel;

     1.下載依賴 : npm install --save-dev babel-loader @babel/core

    2. 在webpack配置文件webpack.config.js里配置出檢測js文件的配置

 1 module.exports = {
 2   mode: "development",
 3   devtool: "source-map",
 4   
 5   module: {
 6     rules: [
 7       {
 8         test: /\.js$/,
 9         exclude: /node_modules/,
10         use:  "babel-loader"
11       }
12     ]
13   }
14 }

    3.配置.babelrc或者babel.config.json或者在webpack的配置文件package.json, 通常只需要配置一個preset-env既可以編譯新語法,

但如果想編譯新api, 需要下載core-js, 並配置:

1 {
2   "presets": [[
3     "@babel/preset-env",{    
4       "useBuiltIns":"usage",  //為了能打包新api, 如class, promise async等
5       "corejs":"core-js@2"   //需要下載core-js@2, 也可以用3版.
6     }
7   ]]
8   ,"plugins": ["@babel/plugin-transform-runtime"]
9 }

 

 詳情見: https://www.babeljs.cn/setup#installation

 


免責聲明!

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



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