ES6之Babel的各种坑总结【转载】

时间: 2018-04-09阅读: 1975标签: babel

自从 Babel 由版本5升级到版本6后,在安装和使用方式上与之前大相径庭,于是写了这篇入坑须知,以免被新版本所坑。


坑一:本地安装和全局安装 

全局安装只需:

$ npm install –global babel-cli 
这时候我们可以使用 Babel 命令编译文件:

$ babel index.js --out-file compiled.js
#或
$ babel index.js -o compiled.js

编译目录:

$ babel src -out-dir lib
#或
babel src -d lib

但是,官方推荐本地安装,是这么说的:

While you can install Babel CLI globally on your machine, it’s much better to install it locally project by project.

There are two primary reasons for this.

Different projects on the same machine can depend on different versions of Babel allowing you to update one at a time.

It means you do not have an implicit dependency on the environment you are working in. Making your project far more portable and easier to setup. 
大致的意思就是:可移植性较好并且没有依赖。

本地安装,记在项目的根目录下:

$ npm install --save-dev babel-cli

但是在本地就不能用 babel 命令了,我们可以在 package.json 文件中添加点东西:

{
    "script": {
        "build": "babel src -d lib"
    }
}

然后,运行 npm run build 即可把 src 目录编译输出到 lib


坑二: 编译插件 

上述编译其实并没有进行,而是原样输出。这是因为我们没有安装相应的插件,官方提示我们需要安装 babel-reset-es2015 插件:

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

然后,在根目录创建一个名为 .babelrc 的文件,里面配置如下内容:

{
    "presets": [
        "es2015"
    ]
}

同理,可以设置 react 的编译插件:

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

.babelrc 文件里即:

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


坑三: babel-polyfill插件 

Babel 默认只转换新的 JavaScript 句法(syntax),而不转换新的 API ,比如 Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise 等全局对象,以及一些定义在全局对象上的方法(比如 Object.assign)都不会转码。Babel 默认不转码的 API 非常多,详细清单可以查看 definitions.js 文件

为了完整使用 ES6 的 API ,我们只能安装这个插件:

$ npm install -save-dev babel-polyfill

然后,在需要使用的文件的顶部引入

import "babel-polyfill"

node.js 中:

require('babel-polyfill');

webpack.config.js 中:

module.exports = {
    entry: ['babel-polyfill', './app/js']
}


作者: Chansi_lEE 
链接:https://www.imooc.com/article/11157 
来源:慕课网


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/606

使用@babel/preset-typescript取代awesome-typescript-loader和ts-loader

谈@babel/preset-typescript的优越性之前,还是先说下awesome-typescript-loader方案是如何对TypeScript进行处理的。首先我们需要知道TypeScript是一个将TypeScript转换为指定版本JS代码的编译器

babel是怎样工作的

第一步可以说是是编译器的基本功能,通过解析器将原始代码转换成抽象语法树(AST),顾名思义就是描述语法的数据结构,一般在这一步编译器都会做两件事:语法分析与语义分析。语法分析是去定义原始代码中的内容是否应该被认为一个单位,然后是语义分析

Babel-loader,babel-core和babel-preset之间是什么关系

`babel-loader` 是一个 npm 包,它使得 webpack 可以通过 babel 转译 JavaScript 代码。babel 的功能在于「代码转译」,具体一点,即将目标代码转译为能够符合期望语法规范的代码。在转译的过程中

babel-polyfill使用与性能优化

本文主要内容包括:什么是babel-polyfill,如何使用,如何通过按需加载进行性能优化。babel只负责语法转换,比如将ES6的语法转换成ES5。但如果有些对象、方法,浏览器本身不支持,此时需要引入babel-polyfill来模拟实现这些对象、方法。

入门babel,我们需要了解些什么

说实话,我从工作开始就一直在接触babel,然而对于babel并没有一个清晰的认识,只知道babel是用于编译javascript,让开发者能使用超前的ES6+语法进行开发。自己配置babel的时候,总是遇到很多困惑,下面我就以babel@7为例

babel环境安装与编译

babel:将浏览器不支持的ES6语法转为javascript,初始化package.json文件:描述当前项目信息,包括依赖等,创建配置文件,告诉babel用什么规则来编译文件.babelrc

babel-preset-env:一个帮你配置babel的preset

babel-preset-env 一个帮你配置babel的preset,根据配置的目标环境自动采用需要的babel插件。babel-preset-env 功能类似 babel-preset-latest,优点是它会根据目标环境选择不支持的新特性来转译

webpack中配置babel

因为在webpack中,默认只能处理一部分es6的语法,一些更高级的es6和es7语法webpack不能处理,这时就需要第三方的loader即babel来帮助webpack来处理这些高级的语法

不容错过的 Babel7 知识

对 Babel 的配置项的作用不那么了解,是否会影响日常开发呢?老实说,大多情况下没有什么影响。不过呢,还是想更进一步了解下,于是最近认真阅读了 Babel 的文档,外加不断编译验证

使用 Webpack 与 Babel 配置 ES6 开发环境

在项目根目录下新建一个配置文件—— webpack.config.js 文件:执行编译打包命令,完成后打开 bundle.js 文件发现 isNull 和 unique 两个函数没有被编译,和 webpack 官方说法一致:webpack 默认支持 ES6 模块语法,要编译 ES6 代码依然需要 babel 编译器。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!