webpack4学习之 babel
webpack之前一知半解,这次有空就把最新的webpack4好好学习一下(2019-05-29 因为webpack的很多东西版本都在升级,网上博客很多都是老版本的,所以加个时间方便大家决定是否有必要阅读)
presets预设
预设是一组插件的集合,插件才是让babel解析之后转换的关键,插件是从前到后,而预设是从后到前执行,插件在 Presets 前运行。
常见的预设有以下几个:
- @babel/preset-env
@babel/preset-env是babel v7新版的,旧版的叫babel-preset-env,按照es年代分有什么babel-preset-es2015(就是转换es6版本的),@babel/preset-es2016之类的,如果一个一个导入到你的项目会很麻烦,新的es出来了你还得加,现在@babel/preset-env就是所有的es集合,有了它,babel-preset-es2015,@babel/preset-es2016都不需要加了(除非你就有什么特定配置)。
"presets": [
[
"@babel/preset-env",
{
"targets": {
"browsers": ["last 2 versions"]
},
"modules": false,
"useBuiltIns": "usage",
"corejs": 3
}
]
]
targets是指转换哪些浏览器,如果没有什么特别的需求,选择默认的就好了
modules 有这些选择"amd" | "umd" | "systemjs" | "commonjs" | "cjs" | "auto" | false, defaults to "auto" 是用来将将es6的模块化语法转换为哪种语法,现在有webpack来做了,这个可以选择false了
useBuiltIns 现在是重点了,选择如下 "usage" | "entry" | false, defaults to false
false就不用解释了,就是不使用这个功能呗。
介绍另外2个我们先看看@babel/polyfill这个东东,它基本包含了所有的babel的功能,使用的方法也很简单,直接在主js上面import "@babel/polyfill";就可以了,缺点也很明显
1 它把所有的功能都导入你的项目里去了,自然会导致你的项目打包过大,如果你不在意自然直接使用最简单,用最少的配置。(usage" | "entry就是用来优化这个的)
2 它会在全局加入一些方法如promise,会导致全局污染
entry选项是这样子的,根据你选择的浏览器环境来决定@babel/polyfill有哪些是需要加入你项目的,如果你的指定的浏览器支持一些语法,就没必要再导入一遍了
usage则是根据你的代码中用到了哪些(直接通过名字来决定)新方法,就从@babel/polyfill加入到你的项目,该方法目前还是实验性的。
corejs 官网的文档配置里目前没有这个,但是“useBuiltIns": "usage"后会提示安装core-js,版本如果为3就要指定版本,并且在主文件以前是import "babel-polyfill";,改为import "core-js/stable"; import "regenerator-runtime/runtime";
- @babel/preset-stage-0 @babel/preset-stage-1 ...
这些其实已经被废弃了,不过挺经典的值得了解一下,stage-0是指标准,目前还没有纳入es的一些功能,装饰器就是其中之一
stage0 (https://babeljs.io/docs/en/babel-preset-stage-0) 只是一个美好激进的想法,一些 Babel 插件实现了对这些特性的支持 ,但是不确定是否会被定为标准.
stage1 (https://babeljs.io/docs/en/babel-preset-stage-1) 值得被纳入标准的特性.
stage2 (https://babeljs.io/docs/en/babel-preset-stage-2) 该特性规范己经被起草,将会被纳入标准里.
stage3 (https://babeljs.io/docs/en/babel-preset-stage-3) 该特性规范已经定稿,大浏览器厂商和 Node.js 社区己开始着手实现.
stage0包含了它下面的,stage1也包含了它下面的的,依次包含。
但是官网说他们被废弃了,具体原因大概是因为太好用了,以至于大家都是stage0就开始用了,但是却不知道stage0到底包括什么,如果规范有了变化,你都不知道到底发生了什么,于是乎babel决定
你想用一些es还没有出来的功能,你要用插件的方式安装具体你需要的而不是一个stage0了事,文档如下
https://github.com/babel/babel/blob/master/packages/babel-preset-stage-0/README.md
@babel/plugin-transform-runtime 和 @babel/runtime
这2个就是用来解决@babel/polyfill的第二个问题,污染环境变量的问题,其实官网上说了,污染的问题只有可能是你的项目作为库使用才会存在,普通的应用程序,直接使用polyfill是没有问题
@babel/runtime是运行时,而@babel/plugin-transform-runtime是插件安在dev上的,
"plugins": [
["@babel/transform-runtime", {
"corejs": 3,
"helpers": true,
"regenerator": true,
"useESModules": false
}]
]
这2个只能用来解决全局变量问题,原型的实例方法没办法加,还是要用到polifill
webpack4学习之 babel的更多相关文章
- webpack4学习笔记(二)
webpack打包各种javascript文件 (本文只是提供一个学习记录,大部分内容来自网络) 一,打包js文件和es6代码 1,webpack命令打包js文件 Tip: 在webpack4.x之前 ...
- webpack4 学习 --- webpack和webpack-dev-server
以前了解过webpack2, 所以对webpack 不是很陌生,就直接入主题吧.新建一个文件夹,就叫它webpack-tut吧.然后在文件中新建一个src 文件夹,存放我们的源文件,再在src 文件夹 ...
- ES6学习之Babel的正确安装姿势
开始学习ES6,写点东西放上博客^_^ 本文介绍Babel6.x的安装过程~ 首先呢,可以使用Babel在线转换 https://babeljs.io/repl/ 然后进入主题:安装Babel(命令行 ...
- Webpack4 学习笔记三 ES6+语法降级为ES5
前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 Webpack 将es6.es7语法降级为es5 需要通过 babel JavaScript编译器. 安装: npm i babel ...
- webpack4.x下babel的安装、配置及使用
前言 目前,ES6(ES2015)这样的语法已经得到很大规模的应用,它具有更加简洁.功能更加强大的特点,实际项目中很可能会使用采用了ES6语法的模块,但浏览器对于ES6语法的支持并不完善.为了实现兼容 ...
- webpack 3.X学习之Babel配置
Babel是什么 Babel是一个编译JavaScript的平台,它的强大之处表现在可以通过编译帮你达到: 使用下一代的javascript(ES6,ES7,--)代码,即使当前浏览器没有完成支持: ...
- webpack4 学习 --- 处理静态资源
webpack 是利用loader 来处理各种资源的,wepback的配置基本上就是为各种资源文件,指定不同类型的loader. 1,处理css 最基本的css 处理loader 是css-loade ...
- webpack4学习笔记(一)
webpack4 1,安装webpack npm insatll webpack --save-dev //安装最新版本 npm insatll webpack@<version> --s ...
- Webpack4 学习笔记八 开发环境和生产环境配置
webpack resolve属性 webpack 区分开发环境和生产环境 webpack resolve属性 该选项的作用是设置模块如何被解析. resolve.alias: 设置别名, 在vue中 ...
随机推荐
- Redis主从复制那点事
我们在 Redis持久化机制你学会了吗?学习了AOF和RDB,如果Redis宕机,他们分别通过回放日志和重新读入RDB文件的方式恢复数据,从而提高可靠性.我们今天来想这么一个问题,假如我们 ...
- Mysql的登录
一.mysql申请连接的四种方式 1 . TCP/IP TCP/IP套接字连接方式是MySQL在任何平台都提供的一种连接方式,也是网络中使用最多的一种方式.这种方式在TCP/IP连接上建立一个基于网络 ...
- Hadoop 3.1.1 - Yarn 服务 - 总览
YARN 服务 总览 Yarn 服务框架为在 Yarn 原生环境里长时间运行的服务,提供了一流的支持和接口.简言之,它扮演了容器编排系统的角色,统一管理 Yarn 上运行的容器化服务.它同时支持 Do ...
- QT 如何在调试时能进入源码方式(MacOS)
最近在学习QT, 遇到一些crash, 也没看过QT源码啊, 就想类似Java一样, 在出错时进入源码跟踪一下, 但是QT和Java太不一样了, 死活进不去. 研究了几天, 发现本来是很简单的事情, ...
- 使用 Assimp 库加载 3D 模型
前言 要想让自己的 3D 之旅多一点乐趣,肯定得想办法找一些有意思一点的 3D 模型.3D 模型有各种各样的格式,obj的,stl的,fbx的等等不一而足.特别是 obj 格式的 3D 模型,完全是纯 ...
- 8.8考试总结(NOIP模拟33)[Hunter·Defence·Connect]
无法逃避的是自我,而无法挽回的是过去. 前言 还算可以,不过 T1 少 \(\bmod\) 了一下挂了 25pts,T2 没看清题面挂了 27pts. 下回注意吧.. T1 Hunter 解题思路 感 ...
- 04.委托Delegation
1. 基本了解 1.1 委托简述 官方文档 委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用,用于将方法作为参数传递给其他方法,可将任何可访问类或结构中与委托类型匹配的任何方法分配给委 ...
- (数据科学学习手札126)Python中JSON结构数据的高效增删改操作
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一期文章中我们一起学习了在Python ...
- jmeter永久调为中文
将jmeter调为中文有两种方法,一是在软件设置中切换,二是修改配置文件. 第一种方式是临时的,下次重新打开会变回为英文 第二种方式是永久的,每次打开都会显示自己配置好的语言 第一种方式: 第二种方式 ...
- 音视频开发之H.264 入门知识
大家如果有做过音视频相关的项目,那么肯定对 H.264 相关的概念了解的比较通透,这里我为什么还要写这样一篇文章呢?一来是为了对知识的总结,二来是为了给刚入门音视频的同学一个参考. 基础概念 H.26 ...