>[success] # babel -- 初步上手之各種配置(babel-polyfills )(未來)
~~~
1.需要讓babel 配合插件幫助進行語法 轉換這里選擇的是'@babel/env'
2.對'api' 轉換需要配合'core-js' 和 'regenerator-runtime/runtime',但是利用'@babel/preset-env '中提供
'useBuiltins' 可以不用手動的去在全局文件引入'core-js' 和 'regenerator-runtime/runtime'
3.在'語法轉換'的時候'@babel/helpers' 會提供一些用來幫助轉換的'helper'函數 ,但是希望進一步優化
這時候需要使用'@babel/plugin-transform-runtime'配合'@babel/runtime',可以幫助解決
'移除語法轉換后內聯的輔助函數'使用'runtime-corejs3' 解決全局污染墊片污染問題
4.但二者都存在彼此優缺點,'@babel/env' 可以用target 但是不能幫助函數和全局污染,'@babel/plugin-transform-runtime'
不能用target 但是能幫助函數和全局污染,但是可以通過同時配置兩者讓他們互相解決自己短板
可以參考總結篇章
~~~
>[danger] ##### 要解決的問題
~~~
1.如果使用 @babel/preset-env 走 useBuiltIns: usage 搭配 browserlist 的這種 polyfill 的方式的話,polyfill 是會污染全
局的(entry 模式也是污染全局)。不過這種配置的方式會依據目標打包平臺來一定程度上減少不需要被加入到編譯打包
流程的 polyfill 的數量,因此這種方式也對應的能較少 bundle 最終的體積大小。
2.如果是走 @babel/plugin-transform-runtime 插件的 polyfill 的話不會污染全局。但是這個插件沒法利用 browserlist 的
目標平臺配置的策略。因此在你代碼當中只要是使用了 ES6+ 的新 api,一律都會引入對應的 polyfill 文件(而不考慮
這個新的 api 是否被目標瀏覽器已經實現了),這樣也會造成 bundle 體積增大。針對這個問題
~~~
>[danger] ##### 使用babel-polyfills
~~~
1.下面兩個參考鏈接的內容都是對'@babel/preset-env 與 @babel/plugin-transform-runtime 互斥問題' 情況說明
2.官方提供了新的解決方案 'babel-polyfills',注意這里有's' 和上面說的'babel-polyfill'不同,它可以解決
'@babel/plugin-transform-runtime ' 無法利用'browserlist ' 問題,'https://github.com/babel/babel-polyfills'這是
他的項目地址
2.1.使用的時候需要'npm i babel-plugin-polyfill-corejs3' 對它的就像你看到安裝包和項目地址名字看起來不是
那么一樣,這里可以看到他的更多版本'https://github.com/babel/babel-polyfills/tags'
2.2.使用的時候也是要在babel 文件配置,新的配置如下:
{
"targets": { "firefox": 42 },
"presets": ["@babel/preset-env"],
"plugins": [
["polyfill-corejs3", {
"method": "usage-global"
}]
]
}
這里要對'method'做說明
2.2.1.'entry-global: 這個和之前的 useBuiltIns: entry 對標,就是全局引入 polyfill'
2.2.2.'usage-entry: 這個和 useBuiltIns: usage 對標,就是具體模塊引入用到的 polyfill。'
2.2.3.'usage-pure:這個就是之前需要 transform-runtime 插件做的事情,使用不污染全局變量的 pure 的方式引入具體模塊用到的 polyfill.'
注意:請在targets 這個字段配置你的'browserlist ',一點過注意文檔中的這句話
'“舊”配置不支持 polyfills 的目標,但您可能希望通過將targets選項移動到頂級來啟用它們。' 否則你的配置將不生效
請一定要將targets 移動到配置項頂級
'https://github.com/babel/babel-polyfills/blob/%40babel/helper-define-polyfill-provider%400.2.3/docs/migration.md'
這里有具體的使用方案一定要看
~~~
>[danger] ##### 參考
[# Babel7 相關](https://github.com/CommanderXL/Biu-blog/issues/52)
[# @babel/preset-env 與 @babel/plugin-transform-runtime 互斥問題](https://github.com/babel/babel/issues/10271#issuecomment-528379505)
[回顧 babel 6和7,來預測下 babel 8
](https://juejin.cn/post/6956224866312060942#heading-3)
- 工程化 -- Node
- vscode -- 插件
- vscode -- 代碼片段
- 前端學會調試
- 谷歌瀏覽器調試技巧
- 權限驗證
- 包管理工具 -- npm
- 常見的 npm ci 指令
- npm -- npm install安裝包
- npm -- package.json
- npm -- 查看包版本信息
- npm - package-lock.json
- npm -- node_modules 層級
- npm -- 依賴包規則
- npm -- install 安裝流程
- npx
- npm -- 發布自己的包
- 包管理工具 -- pnpm
- 模擬數據 -- Mock
- 頁面渲染
- 渲染分析
- core.js && babel
- core.js -- 到底是什么
- 編譯器那些術語
- 詞法解析 -- tokenize
- 語法解析 -- ast
- 遍歷節點 -- traverser
- 轉換階段、生成階段略
- babel
- babel -- 初步上手之了解
- babel -- 初步上手之各種配置(preset-env)
- babel -- 初步上手之各種配置@babel/helpers
- babel -- 初步上手之各種配置@babel/runtime
- babel -- 初步上手之各種配置@babel/plugin-transform-runtime
- babel -- 初步上手之各種配置(babel-polyfills )(未來)
- babel -- 初步上手之各種配置 polyfill-service
- babel -- 初步上手之各種配置(@babel/polyfill )(過去式)
- babel -- 總結
- 各種工具
- 前端 -- 工程化
- 了解 -- Yeoman
- 使用 -- Yeoman
- 了解 -- Plop
- node cli -- 開發自己的腳手架工具
- 自動化構建工具
- Gulp
- 模塊化打包工具為什么出現
- 模塊化打包工具(新) -- webpack
- 簡單使用 -- webpack
- 了解配置 -- webpack.config.js
- webpack -- loader 淺解
- loader -- 配置css模塊解析
- loader -- 圖片和字體(4.x)
- loader -- 圖片和字體(5.x)
- loader -- 圖片優化loader
- loader -- 配置解析js/ts
- webpack -- plugins 淺解
- eslit
- plugins -- CleanWebpackPlugin(4.x)
- plugins -- CleanWebpackPlugin(5.x)
- plugin -- HtmlWebpackPlugin
- plugin -- DefinePlugin 注入全局成員
- webapck -- 模塊解析配置
- webpack -- 文件指紋了解
- webpack -- 開發環境運行構建
- webpack -- 項目環境劃分
- 模塊化打包工具 -- webpack
- webpack -- 打包文件是個啥
- webpack -- 基礎配置項用法
- webpack4.x系列學習
- webpack -- 常見loader加載器
- webpack -- 移動端px轉rem處理
- 開發一個自己loader
- webpack -- plugin插件
- webpack -- 文件指紋
- webpack -- 壓縮css和html構建
- webpack -- 清里構建包
- webpack -- 復制靜態文件
- webpack -- 自定義插件
- wepack -- 關于靜態資源內聯
- webpack -- source map 對照包
- webpack -- 環境劃分構建
- webpack -- 項目構建控制臺輸出
- webpack -- 項目分析
- webpack -- 編譯提速優護體積
- 提速 -- 編譯階段
- webpack -- 項目優化
- webpack -- DefinePlugin 注入全局成員
- webpack -- 代碼分割
- webpack -- 頁面資源提取
- webpack -- import按需引入
- webpack -- 搖樹
- webpack -- 多頁面打包
- webpack -- eslint
- webpack -- srr打包后續看
- webpack -- 構建一個自己的配置后續看
- webpack -- 打包組件和基礎庫
- webpack -- 源碼
- webpack -- 啟動都做了什么
- webpack -- cli做了什么
- webpack - 5
- 模塊化打包工具 -- Rollup
- 工程化搭建代碼規范
- 規范化標準--Eslint
- eslint -- 擴展配置
- eslint -- 指令
- eslint -- vscode
- eslint -- 原理
- Prettier -- 格式化代碼工具
- EditorConfig -- 編輯器編碼風格
- 檢查提交代碼是否符合檢查配置
- 整體流程總結
- 微前端
- single-spa
- 簡單上手 -- single-spa
- 快速理解systemjs
- single-sap 不使用systemjs
- monorepo -- 工程
- Vue -- 響應式了解
- Vue2.x -- 源碼分析
- 發布訂閱和觀察者模式
- 簡單 -- 了解響應式模型(一)
- 簡單 -- 了解響應式模型(二)
- 簡單 --了解虛擬DOM(一)
- 簡單 --了解虛擬DOM(二)
- 簡單 --了解diff算法
- 簡單 --了解nextick
- Snabbdom -- 理解虛擬dom和diff算法
- Snabbdom -- h函數
- Snabbdom - Vnode 函數
- Snabbdom -- init 函數
- Snabbdom -- patch 函數
- 手寫 -- 虛擬dom渲染
- Vue -- minVue
- vue3.x -- 源碼分析
- 分析 -- reactivity
- 好文
- grpc -- 瀏覽器使用gRPC
- grcp-web -- 案例
- 待續