博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转] 梦里Babel知多少(一)
阅读量:7079 次
发布时间:2019-06-28

本文共 2160 字,大约阅读时间需要 7 分钟。

平时开发中,经常需要用到ES6/ES7的语法。那么就需要用到Babel来对代码进行转码处理。 

之前用Vue比较多,所以以Vue-cli作为参考来分析。 
这里写图片描述

这里写图片描述

第一张图是几个月前的Vue-cli生成的 

第二个图是今天使用Vue-cli生成的

Babel-core

顾名思义,这是 babel 的核心代码,但是在我们构建的时候不会直接调用 babel-core 。它是一个标准库,通常服务于各种 polyfill 等库,比如 babel-runtimebabel-plugin-transform-runtimebabel-polyfill 等。

Babel-loader

通常在我们使用webpack的时候,我们会先安装 babel-loader来作为加载器。

babel-preset-env 稍后介绍

cnpm i babel-loader babel-core babel-preset-env -D

 

这样在webpack中,可以这样

module exprots = {    entry: __dirname + '/main.js',    output: {        path: __dirname + '/public', filename: 'bundle.js' }, module: { rules: [ { test: /(\.jsx|\.js)$/, use: { loader: 'babel-loader', options: { presets: ['env'] } }, exclude: /node_module/ } ] } }

Babel-preset-es2015

之前的都是介绍的 babel-core babel-loader 并不能转码,而当我们想使用ES6语法时候就需要用到 babel-preset-es2015 

这个包可以对 es2015 代码进行转码为ES5语法。当然如果使用了ES7语法,即async await 等语法,还是不能够支持的。 
安装:

cnpm i babel-preset-es2015 -D

 

在使用webpack构建工具时,我们通常不会在webpack.config.js里直接对 babel 进行配置。而是在根目录下创建一个 .babelrc.js 的文件。

/* webpack.config.js */module exprots = {    entry: __dirname + '/main.js',    output: { path: __dirname + '/public', filename: 'bundle.js' }, module: { rules: [ { test: /(\.jsx|\.js)$/, use: { loader: 'babel-loader' }, exclude: /node_module/ } ] } }

 

/* .babelrc.js */{    "presets": ["es2015"]}

 

需要特别注意的是, babel-preset-es2015 虽然可以对ES6转码,但是它只会对ES6的语法进行转码,并不会对API进行转码。也就是说它可以对箭头函数,promise转码,但不会对Array.from,Array.find等转码。 

所以为了能够使用ES6的API,我们还需要进行更深入的配置。

Babel-plugin-transform-runtime

安装:

cnpm i babel-plugin-transform-runtime -D

 

使用:

/* .babelrc */{    "presets": ["es2015"],    "plugins": ["transform-runtime"] }

 

这样就可以自由使用promise了。 

但是这个方案有一些特点

特点:官方建议在 lib 上使用,因为该方案没有全局变量和 prototype 污染。 

1,因为相当于是在沙箱操作,没有在全局对象中声明变量。 
2,正是因为没有 prototype 污染,所以对于一些内置类型扩展的方法是没办法 polyfill 的。比如: Array.prototype.find Array.prototype.filter 等。但是可以对静态方法进行 polyfill。 
优点: 可以按需引用。

Babel-polyfill

正是因为 babel-polyfill 的特点,让开发者通常使用 babel-polyfill 进行开发。

安装:

cnpm i babel-polyfill -D

 

使用:

/* main.js(入口文件) */import 'babel-polyfill'

 

这样就OK啦,在使用 babel-polyfill 后,就不需要引入 babel-plugin-transform-runtime 了,并且它在浏览器支持Promise时使用 原生的promise,如果不支持才会使用polyfill

但是最大的缺点就是不能按需引用,文件比较大。

转载于:https://www.cnblogs.com/chris-oil/p/9419528.html

你可能感兴趣的文章
SCVMM 2012 R2之为云分配虚拟机
查看>>
中国企业的等级制度
查看>>
pfSense安装和配置pfBlockerNg
查看>>
Ubuntu 14.04 X64 下安装Appcelerator Titanium Studio。
查看>>
R.java was modified manually! Reverting to generated version!(R文件丢失异常原因汇总)
查看>>
ASP.NET MVC Model验证(一)
查看>>
opensuse12.1安装VirtualBox
查看>>
获取系统特殊文件
查看>>
C语言中的for命令
查看>>
Hash算法
查看>>
urlWithString、fileURLWithPath的区别
查看>>
Elasticsearch
查看>>
【ASM内部原理】_asm_kill_unresponsive_clients & _asm_healthcheck_timeout
查看>>
基于业务单元的开发与部署模式
查看>>
WCF 无法激活服务,因为它不支持 ASP.NET 兼容性
查看>>
爱阅读,经典编程图书分享
查看>>
oracle checkpoint
查看>>
流程图与代码的重构
查看>>
Shell 编程基础(三)
查看>>
phpRedisAdmin安装与配置
查看>>