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

資訊專欄INFORMATION COLUMN

Babel快速入門

notebin / 805人閱讀

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

首先,作為入門的話,Babel的用戶手冊是個很不錯的選擇,里面基本覆蓋了Babel使用的各方面。所以下面主要是我學(xué)習(xí)Babel的一些筆記,姑且當作是一篇入門吧。

Babel是什么

按照Babel官網(wǎng)的說法,Babel是一個Javascript編譯器。它可以把用最新標準編寫的Javascript代碼編譯成現(xiàn)在的瀏覽器或者node環(huán)境下能運行的代碼,這個過程叫做“源碼到源碼”編譯,又稱轉(zhuǎn)譯(transpiling)。通過這個方式,我們就可以提前使用下一代的標準和特性進行編碼,然后在現(xiàn)在的環(huán)境下運行。

安裝Babel

通常我們使用Babel的babel-cli工具在命令行下進行文件的編譯。我們可以對babel-cli進行全局安裝,也可以把它安裝到項目里。這里我選擇了把它安裝到項目里。這樣做的好處是:

不同的項目可能會使用不同版本的Babel,使用全局的話只能使用一致的版本

方便項目的部署,使用全局安裝的話意味著對環(huán)境有個隱式的依賴。

除了babel-cli,還有其他使用Babel的方式,具體可以看用戶手冊。

下面我們開始安裝babel-cli。首先新建一個工作目錄,并創(chuàng)建package.json文件:

$ npm init -y

安裝babel-cli

$ npm install --save-dev babel-cli

安裝完我們可以這樣運行:

$ ./node_modules/babel-cli/bin/babel.js -V
6.11.4 (babel-core 6.11.4)

但是這樣運行很不方便,我們可以通過npm scripts來運行Babel。在package.json文件里,我們增加scripts字段,并添加一個腳本:

{
  "scripts": {
    "build": "babel src -d lib"
  },
  "devDependencies": {
    "babel-cli": "^6.11.4"
  }
}

這里增加了一條名字為build的腳本,命令的內(nèi)容是把src里的文件通過Babel轉(zhuǎn)譯到lib目錄里。然后我們可以通過以下命令運行腳本:

$ npm run build

當然,現(xiàn)在運行這個命令會報錯,因為我們并沒有src文件夾。下面我們正式進入正題。

Babel的基礎(chǔ)使用 轉(zhuǎn)譯初探

首先我們創(chuàng)建src目錄,然后創(chuàng)建一個js文件index.js

[1,2,3].map(n => n + 1);

然后運行npm run build命令,就會看到lib文件夾里多了一個轉(zhuǎn)譯后的文件index.js。但是打開來看會發(fā)現(xiàn)這個轉(zhuǎn)譯后的文件跟源文件并沒有區(qū)別。因為Babel需要你通過插件(Plugin)或者預(yù)設(shè)(presets)告訴它做什么。例如我們可以通過babel-preset-es2015告訴Babel把ES2015的文件轉(zhuǎn)譯成ES5。這也是Babel最常用的一個用法之一。

配置文件

要使用插件或者預(yù)設(shè)(相當于一組插件),我們需要在Bable的配置文件里面進行配置。有兩個方式進行配置。

第一個方式是通過.babelrc文件:

{
  "presets": [],
  "plugins": []
}

第二個方式是使用package.json文件:

{
  "name": "my-package",
  "version": "1.0.0",
  "babel": {
    "presets": [],
    "plugins": []
  }
}
使用預(yù)設(shè)

上面說過,預(yù)設(shè)就是一組插件的集合,例如預(yù)設(shè)babel-preset-es2015就是把一堆跟ES2015有關(guān)的插件組合起來提供編譯ES2015代碼為ES5代碼的功能。下面我們開始使用babel-preset-es2015預(yù)設(shè)來把ES2015轉(zhuǎn)譯成ES5。

首先我們安裝這個預(yù)設(shè):

$ npm install --save-dev babel-preset-es2015

然后在配置文件里添加這個預(yù)設(shè):

{
  "presets": [
    "es2015"
  ],
  "plugins": []
}

最后我們再次運行一次npm run build命令,再次打開lib/index.js文件,我們會看到代碼已經(jīng)被編譯成ES5的語法:

"use strict";

[1, 2, 3].map(function (n) {
  return n + 1;
});
Babel的執(zhí)行 Polyfill

像上面那段轉(zhuǎn)譯后的代碼我們可以直接使用在當前的環(huán)境下,但是并不是所有轉(zhuǎn)譯后的文件我們都只能直接使用,因為雖然Babel可以編譯目前幾乎所有的ES2015語法,但是一些新的API可能在當前的Javascript環(huán)境下無法支持。例如下面的代碼(假設(shè)文件為lib/index.js):

function addAll() {
  return Array.from(arguments).reduce((a, b) => a + b);
}

轉(zhuǎn)譯后會變成:

function addAll() {
  return Array.from(arguments).reduce(function(a, b) {
    return a + b;
  });
}

可以看到語法上已經(jīng)轉(zhuǎn)譯成ES5了,但是并不是所有的Javascript環(huán)境都支持Array.from,例如我們在IE上運行如下頁面:



    
        
    
    
        
        
    

可能會報以下的錯誤:

對象不支持“from”屬性或方法

Babel的解決方法就是使用Polyfill技術(shù)(使用了core-js和regenerator),通過在當前的運行環(huán)境模擬不存在的API來達到使用新API的目的。

首先我們安裝babel-polyfill

$ npm install --save babel-polyfill

注意這里使用的是--save而不是--save-dev,因為我們需要在代碼里引入babel-polyfill。我們需要在文件頂部導(dǎo)入它:

import "babel-polyfill";

在添加這句代碼后,上面的代碼在轉(zhuǎn)譯后會變成下面這個樣子:

"use strict";

require("babel-polyfill");

function addAll() {
  return Array.from(arguments).reduce(function (a, b) {
    return a + b;
  });
}

因為Babel編譯時默認使用的是CommonJS的模塊規(guī)范,所以會看到轉(zhuǎn)譯后的代碼使用了require方法來加載babel-polyfill。這個在node環(huán)境下運行沒有問題,但是在瀏覽器環(huán)境下運行就會報錯,因為瀏覽器目前還不原生的支持模塊的加載。那在瀏覽器下怎么使用babel-polyfill呢?

我們可以把babel-polyfill通過外部js的方式加載進來,而不是在js代碼里進行引入:


但是如果你打算在項目里使用模塊,上面明顯不是很好的解決方案。下面我們看看如果解決在瀏覽器環(huán)境下模塊的加載問題。

使用模塊

要在瀏覽器環(huán)境下加載依賴模塊,有很多方式,例如使用webpack或者browserify之類的打包工具(建議的方式,但是這里我們先不涉及)。或者我們可以使用瀏覽器端的模塊加載器進行加載,例如我們使用AMD模塊規(guī)范進行編譯,然后用RequireJS進行加載。下面我使用SystemJS來做例子。

首先我們安裝es2015-modules-systemjs插件:

$ npm install babel-plugin-transform-es2015-modules-systemjs

然后修改配置文件,在plugins里添加插件:

{
  "plugins": ["transform-es2015-modules-systemjs"]
}

我們修改下lib/index.js,把addAll方法導(dǎo)出為模塊的方法:

import "babel-polyfill";

export function addAll() {
  return Array.from(arguments).reduce((a, b) => a + b);
}

再次對文件進行編譯,編譯后的lib/index.js變成這樣:

"use strict";

System.register(["babel-polyfill"], function (_export, _context) {
  "use strict";

  return {
    setters: [function (_babelPolyfill) {}],
    execute: function () {
      function addAll() {
        return Array.from(arguments).reduce(function (a, b) {
          return a + b;
        });
      }

      _export("addAll", addAll);
    }
  };
});

然后我們需要在HTML里引入system.js。由于SystemJS依賴于Promise,它會加載目錄下system-polyfills.js文件,所以我們需要確保這個文件的存在。在加載system.js后,我們就可以使用SystemJS進行模塊的加載了:


    
        
    
    
        
        
    

出于性能的考慮,也可以用像Bluebird和es6-promise這樣的polyfill做替代,在system.js之前加載。

后記

自此,我們學(xué)習(xí)到了Babel的一些基礎(chǔ)用法,包括安裝和運行,以及配置和預(yù)設(shè)的用法,同時也初探了一些編譯后的文件的運行問題。但是要用好Babel,還有很多問題需要繼續(xù)探討,期待我的下一篇筆記。

參考

https://babeljs.io/
https://github.com/thejamesky...
https://github.com/systemjs/s...

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

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

相關(guān)文章

  • Babel 快速入門

    摘要:快速體驗安裝依賴新建文件夾,在命令行里進入該文件夾,并執(zhí)行如下命令生成文件是內(nèi)置的一個,可通過命令行操作來編譯文件。入門為了確保轉(zhuǎn)換后的代碼能正常的運行,最好在代碼之前引入這是一個實現(xiàn)了部分特性的包。參考中文網(wǎng)入門 簡介 Babel 是一個 JavaScript 編譯器,可將我們代碼中的 ES6 語法轉(zhuǎn)換為 ES5 的語法,使我們的代碼能在不支持 ES6 語法的環(huán)境中正常運行。配合一些...

    NoraXie 評論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元查看
<