资讯专栏INFORMATION COLUMN

babel使用方法总结

沈俭 / 2007人阅读

摘要:在项目根目录下创建一个文件,注意这是个配置文件,以点号开头,没有后缀。提供了一种可以在浏览器中使用的方法,只需两步就能一劳永逸。

1.在命令行中使用 Babel

Babel 官方推荐将 Babel 安装在本地,因为 Babel 的不同版本以及不同转码规则会起到不同的效果,全局安装会带来不必要的麻烦。在命令提示符中转到自己的项目目录下:

npm install --save-dev babel-cli

如果你之前出于某些原因执行了全局安装,可以通过下面的代码卸载全局范围的 Babel。放心,这并不会影响到项目路径下的本地安装。

npm uninstall --global babel-cli

光有一个 babel-cli 什么也做不了,我们还要为 Babel 安装语法插件。官方提供了几套预设的插件集合,分别适用于 ES2015、React 和 ES7 的一些实验性特性。只是为了学习 ES6 的语法的话,选 ES2015 就好了。

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

在项目根目录下创建一个.babelrc文件,注意这是个配置文件,以点号开头,没有后缀。Windows 系统是不允许直接创建这样格式的文件的,需要借助代码编辑器来新建文件。创建好后写入以下内容来启用预设:

{    //需要用到的套件
    "presets": ["es2015","react"],
    //需要用到的插件
    "plugins": []
}

至此,我们就完成了 babel-cli 的安装,可以开始使用了。

2.Mac 和 Linux 的胜利

对于 Mac 和 Linux 用户,直接打开 Terminal 并切换到项目文件所在位置,就可以开始用了。下面的命令会将转码结果输出到 Terminal 的标准输出中:

babel es6.js

当然更多的时候我们是希望把结果放入文件中的:

babel es6.js -o es6-babeled.js

还有更牛的,Babel 支持实时转码,执行下面的命令后,任何对 ES6 代码的修改,保存之后都会自动转码,无需人工再干预。(完成后用 Ctrl+C/Command+C 结束)

babel es6.js --watch -o es6-babeled.js

Babel 还能批量处理整个路径下的 JS 文件,下面的代码把 src 目录下的文件批量转码并放到 lib 目录下:

babel src -d lib

还可以从 Terminal 的标准输入中读取文件进行转码:

babel -o es6-babeled.js < es6.js

官方还有一个更推荐的方法,在package.json文件中的scripts属性中添加一项"build": "babel src -d build",之后只要在项目根目录执行npm run build,Babel 就会自动将src目录下的 js 文件自动转码并放入build目录下。

3.Windows 的悲哀

Windows 用户很快就会会发现babel命令根本用不了,系统不识别这个命令。检查一下环境变量你就会发现,根本没有相关的路径在里面。如果你执行过全局安装的话,会在 Node.js 的安装目录下的 node_global 目录下看到一个 babel.cmd 文件,把这个路径添加到环境变量中,就能用了。如果细看一下文件的内容,你就会发现奥秘所在。

@IF EXIST "%~dp0
ode.exe" (
    "%~dp0
ode.exe"  "%~dp0
ode_modulesabel-cliinabel.js" %*
) ELSE (
    @SETLOCAL
    @SET PATHEXT=%PATHEXT:;.JS;=;%
    node  "%~dp0
ode_modulesabel-cliinabel.js" %*
)

这个文件实际上是先检查 node.exe 是否存在,若存在,则执行node .node_modulesbabel-clibinbabel.js并接受后续的参数。这么一看就明白了,说白了 babel 的命令行工具本质是个 js 文件,需要用node来运行。照这个思路,我们只需要在项目的根目录下自行添加一个babel.cmd文件,并写入以下内容,就能使用项目里的babel命令了。

node .
ode_modulesabel-cliinabel.js %*

当然,用这个方法的前提是你需要配置好 Node.js 的环境,并且用 npm 安装好了 babel-cli,否则会报错说文件不存在。
之后的用法就和 Mac 和 Linux 下的一样了,看前面就好,不赘述了。

4.babel其他常用

babel-node
babel-node 是随 babel-cli 一起安装的另一款命令行工具,是一个模拟 Node.js 环境的 REPL(Read-Evel-Print Loop,一种循环执行“读取-执行-输出”的程序)。执行babel-node会进入一个类似 Node.js 的环境,在这里你可以直接运行 ES6 的代码。你也可以用形如babel-node es6.js的命令来直接运行用 ES6 编写的文件,babel-node 会在运行代码之前先将其编译成 ES5 的等效代码,然后执行。
甚至可以改写package.json文件,用 babel-node 替代 node 命令来直接运行。

{

"scripts": {
    "script.js": "babel-node script.js"    // 需替换成实际文件名
}

}

此时执行npm run script.js就等同于执行babel-node script.js

babel-core
这是 Babel 的核心 API 所在,在项目中加载该模块var babel = require("babel-core");,然后就可以通过babel.transform(code, options)方法来执行转码,code是待转码的 ES6 代码字符串,options提供了一些转码说明,例如指定语法规则、启用一些插件、设定编码等,具体用法可以参考这里。

babel-polyfill
Babel 默认只转码 ES6 的新语法(syntax),而不转换新的API,比如 Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise 等全局对象,以及一些定义在全局对象上的方法(比如 Object.assign、Array.from)都不会转码。如果想让这写方法运行,必须require("babel-polyfill")。

babel-doctor
看名字就知道,这个工具大概是排错用的。没错,如果在命令行中执行babel命令有问题的,可以用babel-doctor命令检查一下环境配置是否正确。主要检查以下几项内容:
o 项目根目录下是否存在.babelrc文件
o 是否有重复的Babel版本,例如同时安装了 Babel 5 和 Babel 6
o 所有已安装的 Babel 工具是否升级到了最新版
o npm 的版本是否大于等于 3.3.0
在 Node.js 中使用 Babel
在 Node.js 环境中,可以直接在 js 文件里调用 Babel 的转码功能。
babel-register
该模块给require()加上一个钩子,加载它之后,每当再 require 其他 js、jsx、es、es6 类型的文件,就会先用 Babel 进行转码。需要注意的是,使用该模块的文件本身并不会被转码,需要从外部执行转码。另外由于是实时转码,从效率上考虑不适用与生产环境,仅供学习研究使用。

5.在浏览器中使用 Babel

在命令行中使用 Babel 虽然在功能性上没得挑,但操作起来多少有点麻烦。Babel 提供了一种可以在浏览器中使用的方法,只需两步就能一劳永逸。这个方法唯一的缺点就是实时转码需要时间,性能上不及预先转换的方案,因此生产环境中不推荐使用,仅供学习研究使用。
首先我们需要下载browser.js,注意,这是 Babel 5 的版本,Babel 6 开始不再直接提供该文件,需要自行构建。
除了从上面的链接下载,你也可以用 npm 下载:

npm install babel-core@5

下载后在node_modules/babel-core子目录中就能找到browser.js文件。
使用方法如下:



有两点需要注意

browser.js 文件必须放在你自己的 js 文件之前

你自己的文件的类型要写成type="text/babel"

6.在线试用 Babel

有时候我们并不需要在项目中操作什么,纯粹就想看看 Babel 到底做了什么。为此 Babel 官方提供了一套在线的REPL (Read-Eval-Print-Loop),可以方便的试用 Babel。

7.配合使用

1.Webpack用法

(1). 安装babel-loader

 npm install babel-loader babel-core --save -dev

(2).

配置loader
     module: {
       loaders: [{
           test: /.js$/,
           exclude: /node_modules/,
           loader: "babel-loader"
       }]

}

(3).配置.babelrc文件


 {
       "presets": [
           // 需要用到的套件
       ],
       "plugins": [
           // 需要用到的插件
       ]
 }

注意:要配置好.babelrc文件

2.Gulp用法

(1).安装gulp-babel

 npm install gulp-babel --save -dev

2.定义task

(1)

var gulp = require("gulp");
     var babel = require("gulp-babel");
    
     gulp.task("default", function () {
       return gulp.src("src/app.js")
         .pipe(babel())
         .pipe(gulp.dest("dist"));
 });

(2)配置.babelrc文件

 

{
       "presets": [
           // 需要用到的套件
       ],
       "plugins": [
       // 需要用到的插件
       ]
 }

(3)Babel套件与插件

3-1:适用于ES6的套件: babel-preset-es2015

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

.babelrc

{
    "presets": ["es2015"]
}

babel-preset-react

3-2:适用于React的套件:babel-preset-react

npm install --save-dev babel-preset-react

.babelrc

{
    "presets": ["react"]
}

3-3:object-assign
适用于Object.assign()
举例

var obj = { a: 1 };
var copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }

安装

npm install babel-plugin-transform-object-assign

.babelrc

{
  "plugins": ["transform-object-assign"]
}

3-4:object-rest-spread
适用于展开运算符
举例

 var arr1 = [0, 1, 2];
    var arr2 = [3, 4, 5];
    arr1.push(...arr2);

安装

npm install babel-plugin-transform-object-rest-spread

.babelrc

{
  "plugins": ["transform-object-rest-spread"]
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81788.html

相关文章

  • 【工具向】我所知道的babel总结

    摘要:这两天研究了一下这个工具,因为平时项目基本都是脚手架生成的配置文件,真正自己想写点东西的时候,亲自去配却是一脸懵逼,写下这篇博客记录一下我的认知范围内的总结。 这两天研究了一下babel这个工具,因为平时项目基本都是脚手架生成的babel配置文件,真正自己想写点东西的时候,亲自去配却是一脸懵逼,写下这篇博客记录一下我的认知范围内的babel总结。首先,先看几个平时常见的babel配置s...

    Leo_chen 评论0 收藏0
  • babel相关总结

    对babel一直没具体总结过,趁周末看了下文档,记录一下 babel作为一个compiler,主要用在转换新的es标准实现来使所有浏览器都支持,这包含两方面 新的es标准语法,箭头函数、扩展运算符、块级作用域等 转化新的es标准方法或正被提议还未纳入标准的方法,,Array.from、Map、Promise、String.includes等 babel编译过程 babel的编译过程分为三个阶段...

    Richard_Gao 评论0 收藏0
  • Babel 7使用总结

    摘要:使用总结本文基于。可以引入纯净版的配置项中的属性可以方便的使用。例如使用时,需要先安装配置文件为得到的结果是可以看到引入时得到了一个别名,可以避免全局变量污染,但是可以发现实例方法并没有得到相应的处理。 Babel 7使用总结 ​ ...

    seasonley 评论0 收藏0
  • Vue+webpack+Element 兼容问题总结

    摘要:项目中用到了和官方文档中给出明确范围不支持及以下版本,因为使用了无法模拟的特性。但它支持所有兼容的浏览器。词法分析阶段把字符串形式的代码转换为令牌流。语法分析阶段会把一个令牌流转换成的形式方便后续操作。利用我们配置好的把生成的转变为新的。 项目中用到了Vue.js和Elenment-UIVue官方文档中给出明确范围:Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法...

    fxp 评论0 收藏0
  • Vue+webpack+Element 兼容问题总结

    摘要:项目中用到了和官方文档中给出明确范围不支持及以下版本,因为使用了无法模拟的特性。但它支持所有兼容的浏览器。词法分析阶段把字符串形式的代码转换为令牌流。语法分析阶段会把一个令牌流转换成的形式方便后续操作。利用我们配置好的把生成的转变为新的。 项目中用到了Vue.js和Elenment-UIVue官方文档中给出明确范围:Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法...

    sumory 评论0 收藏0
  • babel归纳总结

    摘要:归纳总结在前端的发展过程中,的兼容性,一直是前端头痛的问题,在以前的一些有些项目中,为解决浏览器兼容而花费的时间甚至还要多余实际的业务逻辑开发时间,就是其中处理兼容的转译工具或者叫平台。初稿完成初步规范。完成将被添加到下一年度发布。 github: babel归纳总结 在前端的发展过程中,javascript的兼容性,一直是前端头痛的问题,在以前的一些有些项目中,为解决浏览器兼容而花费...

    v1 评论0 收藏0

发表评论

0条评论

沈俭

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<