摘要:,標(biāo)題黨了,本文僅介紹相關(guān)生態(tài)和一些配置心得。函數(shù)是在時(shí)候常用的工具函數(shù),對(duì)編譯模塊時(shí),會(huì)將用到的放到模塊頂部。用來(lái)看最終引入了哪些必須配合,貌似加入了此項(xiàng)以后,會(huì)得到類(lèi)似于的效果。
Babel
Sorry,標(biāo)題黨了,本文僅介紹 Babel 相關(guān)生態(tài)和一些配置心得。
Babel 各個(gè) package 的用途babel-core: 核心部分
babel-cli: 允許使用命令行
babel-node: babel-node 直接執(zhí)行 es6/jsx 文件,自動(dòng)加載 polyfill
babel-register: 以文件形式實(shí)現(xiàn) babel-node 功能,多用于實(shí)時(shí)編譯
// 以下相當(dāng)于 babel-node ./test --presets react require("babel-register")({ presets: ["react"] }); require("./test")
babel-plugin-external-helpers: 把 helpers 收集到一個(gè)共享模塊或共享文件。
helper 函數(shù)是 babel 在 transform 時(shí)候常用的工具函數(shù),對(duì)編譯模塊時(shí),會(huì)將用到的 helpers 放到模塊頂部。如果編譯多個(gè)文件,就會(huì)重復(fù)引用,導(dǎo)致每個(gè)模塊都定義一份。
babel-runtime: polyfill (內(nèi)含 core.js 和 regenerator)、helpers 集合
babel-polyfill: 和 babel-runtime 類(lèi)似,但直接整體引入目標(biāo)環(huán)境中
babel-plugin-transform-runtime: 和 babel-polyfill 一樣,但是不是一次性引入全部 polyfill,而是根據(jù)你該文件用到多少,引多少
對(duì)比上述兩種 polyfill 方案,寫(xiě)庫(kù)用 transform-runtime,寫(xiě)應(yīng)用就 babel-polyfill
babel-polyfill 優(yōu)點(diǎn)是全面,反過(guò)來(lái)說(shuō)就是污染原生、增大體積
transform-runtime 優(yōu)點(diǎn)是按需,純凈,不會(huì)污染原生,但會(huì)拖慢編譯速度
stagestage-x 是會(huì)根據(jù) tc39 動(dòng)態(tài)調(diào)整的
stage-0 > stage-1 > stage-2 > stage-3
比如你引入了 stage-1,自動(dòng)包含了 stage-2 和 stage-3
基本都是使用 preset-env + 幾個(gè) stage,一般來(lái)說(shuō)到 stage-2 就可以了。
babel-preset-envdebug: 用來(lái)看最終引入了哪些 polyfill、plugins
useBuiltIns: 必須配合 babel-polyfill,貌似加入了此項(xiàng)以后,會(huì)得到類(lèi)似于 babel-plugin-transform-runtime 的效果。但是根據(jù)實(shí)驗(yàn)得出,還是 transform-runtime 在減肥上的效果更好。而且它不處理 helpers,你還是不能省略 external-helpers 這個(gè)插件
modules: 是否編譯模塊導(dǎo)入導(dǎo)出語(yǔ)句
webpack 和 rollup 都可以對(duì) es 模塊做 Tree Shaking,所以要設(shè)置 modules 為 false
loose: 寬松模式,編譯的結(jié)果在運(yùn)行時(shí),其內(nèi)部并不嚴(yán)格遵循 es6 標(biāo)準(zhǔn)
通過(guò)減少判斷和限制,有效提高效率甚至包體積
exclude/include: 編譯時(shí)排除或使用某插件
env這個(gè) env 和上面那個(gè)不同... 這里的 env 是指,一個(gè) babel 文件針對(duì)不同環(huán)境(讀取 NODE_ENV、BABEL_ENV),做不同配置
{ "env": { "development": { "presets": [ [ "env", ] ] }, "production": { ... } } }好用的 plugins 和 presets
babel-plugin-transform-remove-console
生產(chǎn)時(shí),代碼中應(yīng)該不包含 console.log。
babel-plugin-transform-decorators-legacy
裝飾器
babel-preset-minify
用于生產(chǎn)時(shí)壓縮代碼,包括前述的 remove-console。但是沒(méi)有 uglify 牛逼。
babel-preset-react 已經(jīng)包含了一組 plugins
preset-flow: 編譯 flow
syntax-jsx: 識(shí)別 jsx 語(yǔ)法
transform-react-jsx: 編譯 jsx
transform-react-display-name: 自動(dòng)添加組件的 displayName
但上面這些只是滿(mǎn)足基礎(chǔ)編譯而已,你額外可以添加下面這個(gè) preset 提高 React 應(yīng)用的性能
npm i babel-preset-react-optimize
項(xiàng)目主頁(yè)有詳細(xì)的說(shuō)明,簡(jiǎn)要概括下
transform-react-constant-elements
識(shí)別并轉(zhuǎn)換可以轉(zhuǎn)成常量的組件
transform-react-remove-prop-types
刪除 propTypes
transform-react-pure-class-to-function
盡可能把 class 組件轉(zhuǎn)為 functional 組件
你真的會(huì)用 Babel 嗎?
React Plugins · Babel
thejameskyle/babel-react-optimize: A Babel preset and plugins for optimizing React code.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/90266.html
摘要:兩種格式對(duì)象對(duì)象是一個(gè)無(wú)序的名稱(chēng)值對(duì)集合。數(shù)組數(shù)組是值的有序集合。值之間使用逗號(hào)分隔。這兩個(gè)方法分別用于把對(duì)象序列化為字符串和把字符串解析為原生值方法用于將字符串轉(zhuǎn)化成對(duì)象對(duì)應(yīng)的表示利用將對(duì)象轉(zhuǎn)換成字符串 JSON簡(jiǎn)介 簡(jiǎn)介:JSON(JavaScriptObject Notation)、輕量級(jí)數(shù)據(jù)交換格式、非常適合于服務(wù)器與 JavaScript 的交互。 JSON兩種格式: 1、對(duì)...
摘要:兩種格式對(duì)象對(duì)象是一個(gè)無(wú)序的名稱(chēng)值對(duì)集合。數(shù)組數(shù)組是值的有序集合。值之間使用逗號(hào)分隔。這兩個(gè)方法分別用于把對(duì)象序列化為字符串和把字符串解析為原生值方法用于將字符串轉(zhuǎn)化成對(duì)象對(duì)應(yīng)的表示利用將對(duì)象轉(zhuǎn)換成字符串 JSON簡(jiǎn)介 簡(jiǎn)介:JSON(JavaScriptObject Notation)、輕量級(jí)數(shù)據(jù)交換格式、非常適合于服務(wù)器與 JavaScript 的交互。 JSON兩種格式: 1、對(duì)...
摘要:輸出和字符串大小寫(xiě)轉(zhuǎn)換方法,和是針對(duì)特定地區(qū)的實(shí)現(xiàn)。輸出輸出輸出輸出基于指定的分割符將一個(gè)字符串分割成多個(gè)子串。 1 初始化 //常用初始化方法 var stringVal = hello iFat3; //構(gòu)造函數(shù)創(chuàng)建方法 var stringObj = new String(hello iFag3); 2 length屬性 var stringVal = hello iFat3; ...
摘要:原文地址原文作者翻譯作者是在版本中引入的,它對(duì)于中的異步編程而言是一個(gè)巨大的提升??赡軙?huì)產(chǎn)生誤導(dǎo)一些文章把和進(jìn)行了比較,同時(shí)說(shuō)它是異步編程演變過(guò)程中的下一代解決方案,對(duì)此我不敢茍同。結(jié)論在中引入的關(guān)鍵字無(wú)疑是對(duì)異步編程的一大加強(qiáng)。 原文地址: https://hackernoon.com/javasc...原文作者: Charlee Li 翻譯作者: Xixi20160512 asy...
閱讀 681·2021-11-18 10:02
閱讀 1147·2021-11-02 14:41
閱讀 770·2021-09-03 10:29
閱讀 2052·2021-08-23 09:42
閱讀 2891·2021-08-12 13:31
閱讀 1286·2019-08-30 15:54
閱讀 2036·2019-08-30 13:09
閱讀 1538·2019-08-30 10:55