webpack4.29.x成神之路(十一) babel编译es6

栏目: JavaScript · 发布时间: 6年前

内容简介:上节:webpack-dev-server下上节目录如下:

目录

上节:webpack-dev-server下

上节目录如下:

webpack4.29.x成神之路(十一) babel编译es6

基本用法

es6语法因为浏览器兼容性问题较多,本不能直接使用,但因为babel这种能降级es6+语法的工具,使得es6+已提前普及。先来写点es6语法。

src/index.js:

const promise = new Promise(function(resolve) {
  console.log('Promise');
  resolve();
});

promise.then(function() {
  console.log('resolved.');
});

然后npm run build, 打开ie浏览器(谷歌实在太先进鸟....):

webpack4.29.x成神之路(十一) babel编译es6

明显IE不能完全失败es6语法,所以我们就需要将es6代码降级成es5甚至更低。

修改配置webpack.config.js:

// 省略依赖
module.exports = {
  mode: 'production',
  entry: './src/index.js',
  output: {
    filename: '[name].js',
    path: resolve(__dirname, 'bundles')
  },

  // 开启devServer
  devServer: {},

  module: {
    rules: [{
      test: /\.(gif|jpg|jpeg|png|svg)$/,
      use: ['url-loader']
    }, {
      test: /\.less$/,
      use: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
    }, {
      test: /\.js$/,

      // node_modules里的代码基本都是经过了编译的,所以忽略
      exclude: /node_modules/,
      loader: 'babel-loader'
    }]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './index.html'
    }),
    new CleanWebpackPlugin()
  ]
};

根目录下新建babel.config.js:

const presets = [
  ["@babel/env"]
];

module.exports = { presets };

然后安装依赖:

npm i @babel/core @babel/preset-env babel-loader -D

重新npm run dev,刷新ie:

webpack4.29.x成神之路(十一) babel编译es6

还是不行,这是因为:

  • babel-loader只识别.js文件,
  • @babel/preset-env才是编译语法
  • preset-env只会转换语法,并不会转换API。 对于ES6的内建功能(如 Promise / Set / Map),原型链的扩展(Array / Object等)需要用垫片库(polyfill)来支持。

所以再安装:npm i @babel/polyfill -D

scr/index.js引入:

import "@babel/polyfill";
// 省略

再次npm run dev刷新ie:

webpack4.29.x成神之路(十一) babel编译es6

这样就有效果了。

babel还有非常多的配置和插件,比如:

babel.config.js:

const presets = [
  ["@babel/env", {
    // 设置打包后的代码将在哪些浏览器运行?只针它们做转化
    targets: {
      edge: "17",
      firefox: "60",
      chrome: "67",
      safari: "11.1",
    },

    // 目前@babel/polyfill依赖的core-js@2,需要指定此选项并安装
    corejs: 2,

    /*
     * @babel/polyfill会将所有高阶语法转化,配置useBuiltIns只转化项目中用到的语法
     *797k => 291k
     * 当useBuiltIns: "usage"时,入口文件就不需要import "@babel/polyfill"了
     * 当useBuiltIns: "entry"时,需要在入口文件里import "@babel/polyfill"
     * */
    useBuiltIns: "usage"
  }
  ]
];

module.exports = { presets };

本教程就不过多涉及了,最好的学习方式还是撸 官网文档

下节:source-map(待更新)


以上所述就是小编给大家介绍的《webpack4.29.x成神之路(十一) babel编译es6》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

腾讯产品法

腾讯产品法

李立 / 浙江大学出版社 / 2018-1 / 49元

从QQ到微信,从《英雄联盟》到《王者荣耀》,腾讯公司凭借强大的产品力成为世界互联网企业中的佼佼者,其“小步快跑,试错迭代”的产品开发机制,“别让我思考”的极简主义理念,“变成白痴级用户”的用户驱动战略,都成为整个中国互联网行业竞相学习的典范。 本书向读者完整地呈现了腾讯产品设计的底层思路,阐述了设计者如何发现问题、定义问题、拆解问题的全过程,从“产品思维”出发,以需求、战略、产品设计开发与运......一起来看看 《腾讯产品法》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具