摘要:主要功能點(diǎn)語(yǔ)法轉(zhuǎn)換墊片兼容處理,通過(guò)方式在目標(biāo)環(huán)境中添加缺失的特性源碼轉(zhuǎn)換其他使用理念主要通過(guò)插件的形式達(dá)到轉(zhuǎn)換代碼的目的。就是解決這個(gè)問(wèn)題的。
測(cè)試環(huán)境
node 10.14.1
Babel 7.4.3
Babel 是一個(gè)工具鏈,主要用于將 ECMAScript2015+版本的代碼轉(zhuǎn)換為向后兼容的 Javascript 代碼,以便能夠運(yùn)行在當(dāng)前和舊版本的瀏覽器或其他環(huán)境中。
Babel 主要功能點(diǎn):語(yǔ)法轉(zhuǎn)換
墊片兼容處理,通過(guò) Polyfill 方式在目標(biāo)環(huán)境中添加缺失的特性
源碼轉(zhuǎn)換
其他...
使用理念Babel 主要通過(guò) 插件 plugins 的形式 達(dá)到轉(zhuǎn)換代碼的目的。
Babel 本身內(nèi)置了部分環(huán)境預(yù)設(shè) preset-env,當(dāng)然項(xiàng)目中 需要根據(jù)實(shí)際 進(jìn)行配置。
為了方便書寫參數(shù),一般通過(guò) 配置文件的方式 babel.config.js 或者.babelrc.js(以編程的方式創(chuàng)建配置)或者.bablerc
Babel 編譯兩大核心- 語(yǔ)法轉(zhuǎn)換 - 墊片支持Bable 核心模塊 @babel/core
Babel 語(yǔ)法轉(zhuǎn)換核心功能,內(nèi)置 helpers 插件模塊,是語(yǔ)法轉(zhuǎn)換的主要輔助工具
@babel/preset-env這是一個(gè)非常智能的環(huán)境預(yù)設(shè)模塊,根據(jù) env 配置自動(dòng) 分析查找對(duì)應(yīng)的 helper 和 plugins 進(jìn)行代碼編譯轉(zhuǎn)換
基本使用:
presets: [ [ "@babel/preset-env", { targets: { chrome: "77", android: "2", }, debug: true, useBuiltIns: false, }, ], ],
其他參數(shù)參考文檔配置就好了,這里重點(diǎn)分析一下 useBuiltIns 屬性.
targets 可根據(jù)文檔自行配置,這個(gè)比較簡(jiǎn)單。
debug 調(diào)試模式,建議開(kāi)啟,開(kāi)啟之后可以看到 那些 target 使用了那些 plugins 和 polyfill
// 開(kāi)啟debug 模式的構(gòu)建信息 Using targets: { "android": "2", "chrome": "77" } Using modules transform: auto Using plugins: transform-template-literals { "android":"2" } transform-literals { "android":"2" } transform-function-name { "android":"2" } transform-arrow-functions { "android":"2" } ...... ...... Using polyfills with `usage` option: [/Users/weng/Documents/dongsheng/projects/bable/src/app.js] Added following core-js polyfills: es6.object.set-prototype-of { "android":"2" } es6.object.create { "android":"2" } es6.symbol { "android":"2" } es7.symbol.async-iterator { "android":"2" } [/Users/weng/Documents/dongsheng/projects/bable/src/app.js] Added following core-js polyfills: es6.string.includes { "android":"2" } es7.array.includes { "android":"2" } es6.array.of { "android":"2" }
useBuiltIns 屬性使用:
false 不開(kāi)啟 polyfill 處理,只做語(yǔ)法代碼轉(zhuǎn)換。
usage 開(kāi)啟 polyfill 處理(依賴@babel/polyfill 模塊)
entry 開(kāi)啟 polyfill 處理(依賴@babel/polyfill 模塊)
useBuiltIns 的值只要不為 false,就不啟動(dòng) polyfill 兼容,其他值都會(huì)引入 polyfill,存在全量變量污染的特性。
正常情況下,每個(gè)文件都有局部引入自身的 helpers 函數(shù)實(shí)現(xiàn),打包后放置在文件的最頂部。
所以存在一個(gè)情況,多個(gè)文件使用了同樣的語(yǔ)法,那么同樣的 helpers 會(huì)多次引入。
transform-runtime 就是解決這個(gè)問(wèn)題的。
transform-runtime 為了減少代碼量,引入的 helpers 只保留一份
看個(gè)栗子:
源代碼:
//app.js import { add } from "./add"; function app() { add(1, 2); console.log(Object.assign({}, { ...{ name: "d" } })); const _a = Array.of(3, 11, 8); } app();
export function add(a, b) { console.log("加法:"); console.log(Object.assign({}, { ...a })); }
// 不啟動(dòng) transform-runtime 構(gòu)建后: // 包含了多個(gè)同樣的 helpers
plugins: ["@babel/plugin-transform-runtime"]; // 同樣的helpers只加載一次,但是沒(méi)有 方法api的實(shí)現(xiàn)
// corejs設(shè)置版本號(hào):2或者3,都會(huì)引入非實(shí)例方法api的兼容實(shí)現(xiàn) plugins: [ [ "@babel/plugin-transform-runtime", { corejs: 2, }, ], ];
transform-runtime 也是做兼容的:
@babel/runtime 只做 語(yǔ)法轉(zhuǎn)換的(helpers 和 regenerator),只做語(yǔ)法轉(zhuǎn)換, 沒(méi)有新 api 的實(shí)現(xiàn)
@balel/runtime-corejs2 除了 helpers 和 regenarator ,還有 core-js 墊片兼容實(shí)現(xiàn),替換 非實(shí)例方法
prest-env 影響 語(yǔ)法轉(zhuǎn)換 和 墊片兼容
而且自身還兼容了 默認(rèn)的 代碼轉(zhuǎn)換功能,根據(jù)具體 env 分析要使用的 plugins
語(yǔ)法轉(zhuǎn)換 和 墊片兼容 是兩個(gè) 獨(dú)立功能,只不過(guò)都是 根據(jù) env 來(lái) 實(shí)現(xiàn)目標(biāo)轉(zhuǎn)換.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/104360.html
摘要:項(xiàng)目配置不多說(shuō),先上配置總結(jié)的包都是以開(kāi)頭的,所有的模塊插件啥的都是在目錄下中真正干活的是插件,插件的作用是預(yù)置,就是一個(gè)插件包的集合,你也可以自己寫插件包插件包不夠用,再配置唄配置了肯定要用新版本的老版本的會(huì)找而不是會(huì) babel7 React項(xiàng)目配置 不多說(shuō),先上babelrc配置 { presets: [ [ @babel/env, { ...
摘要:更新前言由于最近在重寫個(gè)人的原生插件項(xiàng)目遇到了集成單測(cè)的需求單純地使用會(huì)出現(xiàn)難以估計(jì)的錯(cuò)誤所以決定使用完美摒棄了傳統(tǒng)的方案對(duì)于主要流程記錄下項(xiàng)目地址同時(shí)也歡迎新手和想提升的你參與到項(xiàng)目中來(lái)詳情可閱讀一基本配置先通過(guò)簡(jiǎn)單的配置讓 更新 [2019-5-9] Added Initial release 0、前言 由于最近在重寫個(gè)人的原生ts插件項(xiàng)目, 遇到了集成jest單測(cè)的需求, 單純地...
摘要:搭建一個(gè)項(xiàng)目環(huán)境首先生成文件至此我們就可以安裝的相關(guān)依賴了。下的依賴核心部分,把轉(zhuǎn)化成外部引用輔助函數(shù)和內(nèi)置函數(shù),自動(dòng)填充代碼而不會(huì)污染全局變量。入口文件我在中配的,所以在下新建文件,添加我們的第一個(gè)組件。 搭建一個(gè)React項(xiàng)目環(huán)境 首先npm init生成package.json文件.至此我們就可以安裝react的相關(guān)依賴了。 npm install react --save np...
摘要:開(kāi)箱即用的多頁(yè)面腳手架基于模塊化開(kāi)發(fā)可復(fù)用的現(xiàn)代化網(wǎng)站感興趣的朋友,請(qǐng)點(diǎn)個(gè)及時(shí)關(guān)注項(xiàng)目更新請(qǐng)點(diǎn)個(gè)項(xiàng)目請(qǐng)?zhí)崽匦灾С智昂蠖朔蛛x開(kāi)發(fā)配置完整的打包方案支持本地開(kāi)發(fā)熱更新集成代碼風(fēng)格校驗(yàn)支持編寫源碼,編譯生成生產(chǎn)代碼內(nèi)置開(kāi)發(fā)環(huán)境,自動(dòng)加樣式前綴自 Webpack-seed 開(kāi)箱即用的多頁(yè)面腳手架, 基于webpack4.2x babel7.1x模塊化開(kāi)發(fā)可復(fù)用的現(xiàn)代化網(wǎng)站(Without Vu...
閱讀 3494·2023-04-25 18:14
閱讀 1602·2021-11-24 09:38
閱讀 3317·2021-09-22 14:59
閱讀 3123·2021-08-09 13:43
閱讀 2642·2019-08-30 15:54
閱讀 619·2019-08-30 13:06
閱讀 1625·2019-08-30 12:52
閱讀 2775·2019-08-30 11:13