小言_互联网的博客

Webpack-4【babel编译ES6、编译插件、全局-局部垫片】

300人阅读  评论(0)

一.babel编译ES6

babel-core:封装了babel编译时需要使用的API

babel-loader:负责es6语法转化,webpack打包时使用babel-loader处理javascript文件


  
  1. npm install babel-loader @babel/core -D
  2. npm install babel-loader @ 7.1 .5 babel-core -D
  3. babel-loader 8.x对应 babel-core7.x
  4. babel-loader 7.x对应 babel-core6.x

配置转译规则


  
  1. module:{
  2. rules:[{
  3. test: /\.js$/,
  4. use: 'babel-loader',
  5. exclude: /(node_modules)/ 排除配置
  6. }]
  7. }

二.编译插件

1.babel-preset-env:用于编译es6语法,是一个新的preset,可以根据配置的目标运行环境自动启用需要的babel插件

2.babel-prest-es2015:用于编译es6语法

3.babel-prest-es2017:用于编译es7语法

4.babel-preset-latest:一个特殊的presets,包括了es2015,es2016,es2017的插件(目前位置,以后会加入es2018)

5.babel-preset-react:用于编译jsx和flow语法加入

(1).babel-preset-env

现如今不同的浏览器和平台chrome、opera、firefox、safari、ie、ios、android、node这些es运行环境对es6\7\8支持不一,需要特定转码


  
  1. npm i babel-preset-env -D
  2. 在babel(.babelrc)配置文件中
  3. {
  4. "presets":[ "env"]
  5. }

(2).targets

targets 指定运行环境

targets.node 指定node版本

targets.browsers指定浏览器版本

modules指定何种形式的模块,设置为false表示不转码模块


  
  1. .babelrc{
  2. "presets":[
  3. [ "env",
  4. {
  5. "targets":{
  6. "browsers":[
  7. "last 2versions"
  8. ]
  9. }
  10. }
  11. ]
  12. ]
  13. }

三.全局-局部垫片

(1).babel-polyfill

Babel默认只转换新的JavaScript,而不转换新的API,比如Generator、Set、Maps、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(Object.assign)都不会转码

Es6在Array对象上新增了Array.from方法。Babel就不会转码这个方法。如果想让这个方法运行、必需使用babel-polyfill,为当前环境提供一个垫片

npm install babel-polyfill -S


  
  1. index.js
  2. import 'babel-ployfill';
  3. function* func(){} 这样则无报错

引入方式

1.(浏览器环境)单独在html的<head>标签中引入babel-ployfill.js

2.在package.json中添加babel-polyfill依赖,在webpack配置文件增加入口如


  
  1. entry:[
  2. "babel-polyfill",
  3. "./src/app.js"
  4. ]ployfill将会打包进这个入口文件中,而且是放在文件最开始的地方

3.在package.json中添加babel-polyfill依赖,在webpack入口文件顶部使用import引入

(2).babel-plugin-transform-runtime/.babel-runtime

在webpack中,.babel-plugin-transform-runtime实际上是依赖babel-runtime因为babel编译es6到es5的过程中,babel-plugin-transform-runtime这个插件会自动polyfill es5不支持的特性

这些poliyfill包就是在babel-runtime这个包里

例如:core-js,regenerator等polyfill

babel-runtime和babel-plugin-transform-runtime的区别是,相当前者是手动挡而后者是自动挡,每当要转译一个api时都要手动加上require('babel-runtime'),

而babel-plugin-transform-runtime会由工具自动添加,主要的功能是为api提供沙箱的垫片方案,不会污染全局的api,因此适合用在第三方开发产品中

使用

npm i babel-runtime babel-plugin-transform-runtime -D

package.json中添加依赖

.babelrc中配置插件:"plugins":["transform-runtime"]

代码中可以直接使用ES6的新特性,无需import额外东西,webpack也不需要做配置


转载:https://blog.csdn.net/Yesterday_Tomorrow/article/details/114290631
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场