亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

Babel 配置工程師應(yīng)知應(yīng)會(huì)

caikeal / 1120人閱讀

摘要:,標(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è)模塊都定義一份。

polyfill 相關(guān)

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ì)拖慢編譯速度

stage

stage-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

一般化的 Babel 配置

基本都是使用 preset-env + 幾個(gè) stage,一般來(lái)說(shuō)到 stage-2 就可以了。

babel-preset-env

debug: 用來(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 牛逼。

React 相關(guān)

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 組件

References

你真的會(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

相關(guān)文章

  • JSON應(yīng)知應(yīng)會(huì)

    摘要:兩種格式對(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ì)...

    Flink_China 評(píng)論0 收藏0
  • JSON應(yīng)知應(yīng)會(huì)

    摘要:兩種格式對(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ì)...

    lijy91 評(píng)論0 收藏0
  • 應(yīng)知應(yīng)會(huì)】15個(gè)常用的JavaScript字符串操作方法

    摘要:輸出和字符串大小寫(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; ...

    wwq0327 評(píng)論0 收藏0
  • 【譯】async/await 應(yīng)知應(yīng)會(huì)

    摘要:原文地址原文作者翻譯作者是在版本中引入的,它對(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...

    Ku_Andrew 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<