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的更多相关文章

  1. webpack4学习笔记(二)

    webpack打包各种javascript文件 (本文只是提供一个学习记录,大部分内容来自网络) 一,打包js文件和es6代码 1,webpack命令打包js文件 Tip: 在webpack4.x之前 ...

  2. webpack4 学习 --- webpack和webpack-dev-server

    以前了解过webpack2, 所以对webpack 不是很陌生,就直接入主题吧.新建一个文件夹,就叫它webpack-tut吧.然后在文件中新建一个src 文件夹,存放我们的源文件,再在src 文件夹 ...

  3. ES6学习之Babel的正确安装姿势

    开始学习ES6,写点东西放上博客^_^ 本文介绍Babel6.x的安装过程~ 首先呢,可以使用Babel在线转换 https://babeljs.io/repl/ 然后进入主题:安装Babel(命令行 ...

  4. Webpack4 学习笔记三 ES6+语法降级为ES5

    前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 Webpack 将es6.es7语法降级为es5 需要通过 babel JavaScript编译器. 安装: npm i babel ...

  5. webpack4.x下babel的安装、配置及使用

    前言 目前,ES6(ES2015)这样的语法已经得到很大规模的应用,它具有更加简洁.功能更加强大的特点,实际项目中很可能会使用采用了ES6语法的模块,但浏览器对于ES6语法的支持并不完善.为了实现兼容 ...

  6. webpack 3.X学习之Babel配置

    Babel是什么 Babel是一个编译JavaScript的平台,它的强大之处表现在可以通过编译帮你达到: 使用下一代的javascript(ES6,ES7,--)代码,即使当前浏览器没有完成支持: ...

  7. webpack4 学习 --- 处理静态资源

    webpack 是利用loader 来处理各种资源的,wepback的配置基本上就是为各种资源文件,指定不同类型的loader. 1,处理css 最基本的css 处理loader 是css-loade ...

  8. webpack4学习笔记(一)

    webpack4 1,安装webpack npm insatll webpack --save-dev //安装最新版本 npm insatll webpack@<version> --s ...

  9. Webpack4 学习笔记八 开发环境和生产环境配置

    webpack resolve属性 webpack 区分开发环境和生产环境 webpack resolve属性 该选项的作用是设置模块如何被解析. resolve.alias: 设置别名, 在vue中 ...

随机推荐

  1. c#链接MySql数据库方法

    方法一: 打开visual studio,在项目->管理NuGet程序包->搜索"MySql.Data"并安装: 在程序部分,引入 using MySql.Data.M ...

  2. VUP虚拟直播与光学动作捕捉技术

    虚拟直播将虚拟场景.虚拟形象实时显示在观众面前,虚拟场景与人物替代了原有的耗费较大搭建成本的实景场景与真人出镜,为观众带来全新的视觉体验,同时新技术降低了原有场景搭建成本,是近些年继AI.VR.动作捕 ...

  3. [NOI 2021] 轻重边 题解

    提供一种和不太一样的树剖解法(一下考场就会做了qwq),尽量详细讲解. 思路 设重边为黑色,轻边为白色. 首先,先将边的染色转化为点的染色(即将 \(u\) 节点连向父节点的边的颜色转化为 \(u\) ...

  4. jvm源码解读--08 创建oop对象,将static静态变量放置在oop的96 offset处

    之前分析的已经加载的.Class文件中都没有Static 静态变量,所以也就没这部分的解析,自己也是不懂hotspot 将静态变量放哪里去了,追踪源码之后,看清楚了整个套路,总体上来说,可以举例来说对 ...

  5. 构建后端第1篇之---springcloud项目依赖分析

    张艳涛写于2021-2-2日 springcloud是springboot工程+cloud依赖,从这个角度来分析,使用springcloud实际上就是添加springcloud的某个以来比如eurek ...

  6. vue、gulp、webpack踩过的坑和笔记

    1.监听流错误 stream-combiner2 2.热更新Browsersync与element冲突,换成gulp-connect 3.gulp-uglify压缩js不能压缩es6 4.使用vue- ...

  7. appium的安装和环境配置教程

    模拟器安装 夜神模拟器下载地址:https://www.yeshen.com/ 无脑安装 jdk环境 安装jdk 安装教程:https://www.cnblogs.com/yhoil/p/148086 ...

  8. JS的FileSaver在Chrome上保存失败

    在使用JavaSript的FileSaver保存文件时,IE11上好的,chrome上反没响应,不能保存文件.寻找了半天,最好发现是因为在FileSaver之外还有一个自定义的全局URL变量,把这个U ...

  9. 阿里、腾讯、百度、网易、美团Android面试经验分享,拿到了百度、腾讯offer

    基本情况 2021届普通本科,Android开发岗. 此文主要是2020年秋招面试经验汇总,最终拿到了百度.腾讯的offer. 主要包括阿里三面,腾讯四面,百度三面,网易三面,美团一场面完. 阿里(由 ...

  10. UNIX环境高级编程APUE练习4.6-实现类似cp(1)的程序,保留文件中的空洞

    1 题面 编写类似cp(1)的程序,它复制包含空洞的文件,但是不将字节0写到输出文件中去. 2 基本思路 首先要搞清楚空洞的性质以判断一个文件是否有空洞,以及空洞的位置 知道了空洞的位置之后,读到源文 ...