国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Babel 快速入門

NoraXie / 1182人閱讀

摘要:快速體驗安裝依賴新建文件夾,在命令行里進入該文件夾,并執(zhí)行如下命令生成文件是內(nèi)置的一個,可通過命令行操作來編譯文件。入門為了確保轉(zhuǎn)換后的代碼能正常的運行,最好在代碼之前引入這是一個實現(xiàn)了部分特性的包。參考中文網(wǎng)入門

簡介

Babel 是一個 JavaScript 編譯器,可將我們代碼中的 ES6 語法轉(zhuǎn)換為 ES5 的語法,使我們的代碼能在不支持 ES6 語法的環(huán)境中正常運行。配合一些插件,我們甚至能直接使用 ES6 標準的一些新特性,而無需等待各大瀏覽器的實現(xiàn),也無需擔憂兼容性。

快速體驗 1. 安裝依賴

新建 babel_test 文件夾,在命令行里進入該文件夾,并執(zhí)行如下命令:

npm init -y # 生成 package.json 文件
npm i -D babel-cli babel-preset-env
npm i -S babel-polyfill

babel-cli 是 Babel 內(nèi)置的一個 CLI,可通過命令行操作來編譯文件。這是一個可選的開發(fā)依賴包,在實際開發(fā)中可根據(jù)需求決定是否安裝。

babel-preset-env 會根據(jù)我們配置的環(huán)境自動將該環(huán)境不支持的語法轉(zhuǎn)換 ES5 的語法。

babel-polyfill 是一個相對完整的 ES6 環(huán)境,可以為代碼的運行環(huán)境補充缺少的 API。這是一個可選的依賴包,但個人建議最好安裝并引入到代碼中,詳解見下文。

在編寫本文章時,上面依賴包的最新版本分別為 babel-cli 6.26.0、babel-preset-env 1.6.1、babel-polyfill 6.26.0,如果安裝的版本不一致,可能會得到不一樣的結(jié)果。
2. 配置 Babel

新建 .bablerc 文件,內(nèi)容如下:

{
    "presets": ["env"]
}

.bablerc 是 Babel 的默認配置文件,運行 Babel 時會自動讀取該文件的配置。上面 .bablerc 文件配置的意思是對代碼進行完全的轉(zhuǎn)換。

3. 編寫代碼

新建 source.js 文件,內(nèi)容如下:

// 這里的代碼無任何意義,只用作示例
const sayHi = () => {
    const str = "Hello World!";
    const arr = [...str];

    alert(arr.join(""));
};
... 是 ES6 語法,詳情可參考 http://es6.ruanyifeng.com/#docs/array
4. 編譯

執(zhí)行以下命令就可以把 source.js 的代碼轉(zhuǎn)換為 ES5 的語法,并把結(jié)果輸出到 target.js

./node_modules/babel-cli/bin/babel.js source.js -o target.js
babel-cli 的詳細命令可參考 https://babeljs.cn/docs/usage/cli/

target.js 的內(nèi)容最終如下:

"use strict";

function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }

var sayHi = function sayHi() {
    var str = "Hello World!";
    var arr = [].concat(_toConsumableArray(str));

    alert(arr.join(""));
};

可以看到 Babel 在 target.js 添加了 _toConsumableArray 函數(shù),并將 [...str] 替換成了 [].concat(_toConsumableArray(str)) 。到這里我們已經(jīng)成功的將代碼中的 ES6 語法轉(zhuǎn)換為 ES5 語法,Babel 的使用就是這么簡單。

babel-polyfill

如果我們仔細查看上文中的 target.js ,會發(fā)現(xiàn) Babel 添加的 _toConsumableArray 函數(shù)竟然使用了 ES6 的特性 Array.from ,也就是說我們使用 Babel 轉(zhuǎn)換后代碼里可能還會存在 ES6 的東西!這個問題可以參考 https://www.zhihu.com/question/49382420。

這里我們需要重點注意的是:

Babel 默認只轉(zhuǎn)換新的 JavaScript 句法(syntax),而不轉(zhuǎn)換新的 API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局對象,以及一些定義在全局對象上的方法(比如Object.assign)都不會轉(zhuǎn)碼。—— 《ECMAScript 6入門》

為了確保轉(zhuǎn)換后的代碼能正常的運行,最好在代碼之前引入 babel-polyfill(這是一個實現(xiàn)了部分 ES6 特性的包)。




至此,我們可以放心的隨意使用 ES6 的特性了。

優(yōu)化

其實現(xiàn)代瀏覽器或多或少都實現(xiàn)了部分 ES6 標準,如 Chrome v64 甚至已實現(xiàn)了 97% 的功能。如果我們確定我們的代碼只運行在 Chrome v64 ,那么像 source.js 中的箭頭函數(shù)則無需轉(zhuǎn)換,因為 Chrome v64 已經(jīng)支持這樣的語法了。同理我們也無需引入整個 babel-polyfill ,只需引入其中 Chrome v64 不支持的部分即可。

Babel 的強大之處在這里更能得到體現(xiàn)。當我們配置了代碼的運行環(huán)境之后,Babel 會自動判斷該環(huán)境對 ES6 的實現(xiàn)程度,然后只把源代碼中該環(huán)境不支持的語法進行轉(zhuǎn)換。如果我們在源代碼中利用模塊化的方式引入 babel-polyfill ,Babel 也會對其進行優(yōu)化,只引入該環(huán)境尚未實現(xiàn)的模塊。下面就讓我們來體現(xiàn)一下這強大的功能。

修改配置文件 .babelrc ,內(nèi)容如下:

{
    "presets": [
        [
            "env",
            {
                "targets": { // 配置代碼的運行環(huán)境
                    "chrome": 64
                },
                "useBuiltIns": true // 開啟對 babel-polyfill 的優(yōu)化
            }
        ]
    ]
}

修改source.js,內(nèi)容如下:

// 使用 ES6 的模塊化標準引入 babel-polyfill
import "babel-polyfill";

const sayHi = () => {
    const str = "Hello World!";
    const arr = [...str];

    alert(arr.join(""));
};

運行命令編譯成功后,target.js 的內(nèi)容如下:

"use strict";

require("core-js/modules/web.timers");

require("core-js/modules/web.immediate");

require("core-js/modules/web.dom.iterable");

const sayHi = () => {
    const str = "Hello World!";
    const arr = [...str];

    alert(arr.join(""));
};

可以看到,箭頭函數(shù)和 ...str 都沒有變化,因為 Chrome v64 已經(jīng)支持這樣的語法。import "babel-polyfill" 則變成了用 CommonJS 的方式引入了三個小模塊,這是 Babel 通過查詢 compat-table 得知 Chrome v64 尚未實現(xiàn)的特性后添加的模塊。

以上便是 Babel 的一些基本使用了。

最后說明一下:

模塊化并不是 Babel 的工作,Babel 僅負責轉(zhuǎn)換語法。Babel 輸出的 target.js 使用了 CommonJS 的模塊化規(guī)范,這還需要一些構(gòu)建工具對其進一步編譯才能在 Chrome v64 上運行。

core-js 是真正實現(xiàn)了 ES6 特性的包,是 babel-polyfill 的依賴,babel-polyfill 對其進行了一些包裝。

參考

Babel中文網(wǎng)

ECMAScript 6 入門

compat-table

browserslist

core-js

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/93027.html

相關(guān)文章

  • Babel快速入門

    摘要:首先,作為入門的話,的用戶手冊是個很不錯的選擇,里面基本覆蓋了使用的各方面。所以下面主要是我學(xué)習(xí)的一些筆記,姑且當作是一篇入門吧。下面我們正式進入正題。這也是最常用的一個用法之一。有兩個方式進行配置。 首先,作為入門的話,Babel的用戶手冊是個很不錯的選擇,里面基本覆蓋了Babel使用的各方面。所以下面主要是我學(xué)習(xí)Babel的一些筆記,姑且當作是一篇入門吧。 Babel是什么 按照B...

    notebin 評論0 收藏0
  • es6快速入門

    摘要:快速入門簡介以下簡稱是語言的下一代標準,已經(jīng)在年月正式發(fā)布了。而且聲明后必須立即初始化賦值,不能后面賦值。方法默認返回實例對象即,可以指定返回另外一個對象。參數(shù)搭配的變量是一個數(shù)組,該變量將多余的參數(shù)放入數(shù)組中。 es6快速入門 showImg(https://segmentfault.com/img/remote/1460000008519223?w=560&h=314); ES6簡...

    liujs 評論0 收藏0
  • 項目中配置Babel轉(zhuǎn)碼器的詳細教程

    先簡單說一下Babel吧 Babel是一個ES6轉(zhuǎn)碼器,可以將ES6代碼轉(zhuǎn)為ES5代碼 此篇教程是在學(xué)習(xí)阮老師的《ES6標準入門》時,不會npm的學(xué)習(xí)總結(jié) 在阮老師的教程上具體補充,通過以下幾個步驟,即可在項目中直接安裝Babel轉(zhuǎn)碼器,一行命令即可進行ES6轉(zhuǎn)碼 第一步:創(chuàng)建package.json package.json 文件是一個描述文件,主要有以下3個作用: 1.描述項目依賴了哪些包 2...

    zzbo 評論0 收藏0
  • 庫,組件,框架 - 收藏集 - 掘金

    摘要:哈哈,我理解,架構(gòu)就是骨架,如下圖所示譯年月個有趣的和庫前端掘金我們創(chuàng)辦的使命是讓你及時的了解開發(fā)中最新最酷的趨勢。 翻譯 | 上手 Webpack ? 這篇就夠了! - 掘金譯者:小 boy (滬江前端開發(fā)工程師) 本文原創(chuàng),轉(zhuǎn)載請注明作者及出處。 原文地址:https://www.smashingmagazine.... JavaSrip... 讀 Zepto 源碼之代碼結(jié)構(gòu) - ...

    tommego 評論0 收藏0
  • 零React基礎(chǔ)入門Amaze UI Touch!

    摘要:全文的目的是達成使用進行項目開發(fā),并且以我這個前端菜鳥所見所學(xué)來歸納整理。環(huán)境安裝與前期準備我的基礎(chǔ)環(huán)境出的開源的編輯器命令行工具,下一個炒雞好用的神器。只提供組件,對配套技術(shù)不做限定,方便用戶與現(xiàn)有技術(shù)棧快速整合,降低使用成本。 全文的目的是達成使用amazeui-touch進行項目開發(fā),并且以我這個前端菜鳥所見所學(xué)來歸納整理。文章不對詳細內(nèi)容做講解。 環(huán)境安裝與前期準備 我的基礎(chǔ)環(huán)...

    王晗 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<