ES2015入门系列9-Babel和Rollup

经由过程前面章节的解说,人人对ES2015的一些新语法有了开端的明白,之前我们的测试代码都能够直接放入 Chrome Console 中直接运转,为了更好的进修背面的面向对象和模块开辟,我先用一章引见一下 Babel 和 Rollup。

ES2015虽然够好用,怎样没有阅读器对其能够完整支撑,本文誊写时刻,Chrome开辟版号称已支撑99%的ES2015特征。

所以,我们须要借助一个能够协助我们将ES6代码翻译为阅读器都100%支撑的ES5代码的东西,这就是本文的主角之一:Babel

翻开Babel官网, 能够看到大大的引见:

Babel is a JavaScript complier. Use next generation JavaScript today.

Babel是Javascript编译器,能够让我们如今就能够运用新的语法写JavaScript,而不必忧郁阅读器兼容的题目。

最先装置:

本系列假定读者都有NodeJS运用履历,假如还没有,赶忙去这里相识并装置吧。

我们能够运用

npm install --global babel-cli

如许全局装置Babel, 然则这并非很好的做法,因为:

  • 差别的项目能够须要依靠差别版本的Babel

  • 不能相对依靠某个版本的Babel,不够天真

所以,最好的做法是为每个项目装置Babel

建立项目目次并装置:

mkdir -p es2015-learning
cd es2015-learning

建立文件package.json, 内里放入以下内容:

{
  "name": "es2015-learning",
  "version": "1.0.0"
}

装置Babel:

npm install --save-dev babel-cli

装置完成后,我们的package.json文件会变成相似下面的:

{
  "name": "es2015-learning",
  "version": "1.0.0",
  "devDependencies": {
    "babel-cli": "^6.9.0"
  }
}

因为我们的babel装置在项目中,所以我们没法直接在敕令行中实行 babel 敕令,虽然能够用

./node_modules/.bin/babel

挪用, 然则为了轻易,我们须要在 package.json 中定义敕令运用,修正 package.json 以下:

{
  "name": "es2015-learning",
  "version": "1.0.0",
  "scripts": {
      "build": "babel src -d dist"
  },
  "devDependencies": {
    "babel-cli": "^6.9.0"
  }
}

如许,我们就能够运用

npm run build

直接挪用Babel为我们在src中的js代码举行编译到dist文件夹中,而不必每次都

./node_modules/.bin/babel src -d dist

很简单,对吧?那赶忙碰运气:

建立文件夹

mkdir src
mkdir dist

在 src 中建立文件 main.js, 编辑代码:

const PI = 3.1415926;
alert(PI);

实行敕令:

$ npm run build
//输出
src/main.js -> dist/main.js

检察dist文件夹中的main.js文件,不出不测,babel 并没有为我们做任何的改变,因为:Babel 在 6.0今后不在默许启用代码转换,实际上Babel默许没有自带任何转换插件,这须要我们手动装置一下,这里须要装置ES2015 Preset插件

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

装置完成后,还须要通知Babel启用该插件,建立.babelrc文件,并在个中到场以下内容,

{
  "presets": ["es2015"]
}

准备就绪,再次实行:

npm run build

完成后,能够看到如今的dist/main.js已被转换为:

"use strict";

var PI = 3.1415926;
alert(PI);

这时刻援用dist/main.js 到阅读器中,会统统运转一般。

到此,我们的Babel已准备就绪^_^。

然则,让我们再看看下面的代码:

// src/Human.js
export default class Human{

}
// src/main.js
import  Human from './Human.js';

class Man extends Human{

}

let man = new Man();

实行

npm run build

检察 dist/main.js代码(部份):

'use strict';

var _Human2 = require('./Human.js');
...
...

这个时刻假如我们在阅读器中援用main.js, 很遗憾是没法运转的,因而,我们还须要一个模块加载器 (module bundler), 模块加载器有许多,如:

然则本日我要引见是别的一个: Rollup

the next-generation JavaScript module bundler

下一代JavaScript模块加载器,赶忙来熟悉熟悉吧!

装置:

npm install --save-dev rollup

建立 rollup.config.js 文件,内容到场:

module.exports = {
  entry: 'src/main.js',
  dest: 'dist/main.js'
}

尝试一下:

./node_modules/.bin/rollup -c

编译出来的dist/main.js代码以下:

'use strict';

class Human {

}

class Man extends Human {

}

let man = new Man();

很圆满对不对? 然则,不支撑ES2015的阅读器怎么办?不必怕,我们将 Babel 和 Rollup 结合起来。

装置rollup的babel插件:

npm install --save rollup-plugin-babel
npm install --save babel-preset-es2015-rollup

修正rollup.config.js为:

let babel = require('rollup-plugin-babel');

module.exports = {
  entry: 'src/main.js',
  plugins: [babel()],
  dest: 'dist/main.js'
}

修正.babelrc为:

{
  "presets": ["es2015-rollup"]
}

再次运转:

./node_modules/.bin/rollup -c

此时的dist/main.js代码就能够被支撑ES5的阅读器运用了!

末了我们修正我们的packages.json的build敕令为:

"build": "rollup -c"

背面只需运转:

npm run build

就能够享用Babel和Rollup带来的方便, 轻松运用ES2015语法编写JS代码啦!

    原文作者:chekun
    原文地址: https://segmentfault.com/a/1190000009992687
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞