当前位置: 首页 > news >正文

[转] 梦里Babel知多少(一)

平时开发中,经常需要用到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

相关文章:

  • 性能测试 tps持续走低,响应时间持续增加,瓶颈分析
  • BZOJ1497 最大获利
  • 探秘varian:优雅的发布部署程序
  • 论“小猪佩奇如何从营销到吸金一路开挂前行”!
  • 使用mysqldump 备份 恢复从库报错解决方案(ERROR 1872)
  • Jquery mobiscroll 移动设备(手机)wap日期时间选择插件以及滑动、滚动插件
  • 动画小记——点击头像逐渐放大
  • Tuxera NTFS for Mac 拼团仅需¥99!再见原价¥298!
  • 什么样的项目适合自动化测试
  • leetcode-27. Remove Element
  • Spark进阶之路-Spark提交Jar包执行
  • 算法与数据结构1800题 数组和广义表(一)
  • JavaScript 函数式编程(二)
  • volatile 可见性的模拟分析示例
  • 管理微服务中的数据
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Git初体验
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Mysql5.6主从复制
  • MySQL用户中的%到底包不包括localhost?
  • Python 基础起步 (十) 什么叫函数?
  • vue 个人积累(使用工具,组件)
  • 爱情 北京女病人
  • 如何设计一个微型分布式架构?
  • 微信小程序开发问题汇总
  • 系统认识JavaScript正则表达式
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​业务双活的数据切换思路设计(下)
  • "无招胜有招"nbsp;史上最全的互…
  • #Linux(Source Insight安装及工程建立)
  • #考研#计算机文化知识1(局域网及网络互联)
  • $(function(){})与(function($){....})(jQuery)的区别
  • (02)Hive SQL编译成MapReduce任务的过程
  • (3)选择元素——(17)练习(Exercises)
  • (39)STM32——FLASH闪存
  • (poj1.3.2)1791(构造法模拟)
  • (备忘)Java Map 遍历
  • (初研) Sentence-embedding fine-tune notebook
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (理论篇)httpmoudle和httphandler一览
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (转)大型网站架构演变和知识体系
  • .bat批处理出现中文乱码的情况
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .Net FrameWork总结
  • .Net Remoting常用部署结构
  • []使用 Tortoise SVN 创建 Externals 外部引用目录