使用es6+新语法编写代码,可是不能运行于低版本浏览器,需要将语法转换成es5的。那就借助babel7转换,再加上webpack打包,实现代码的转换。

转换包括两部分:语法和API

let、const这些是新语法。

new promise()等这些是新API。

简单代码

类库 utils.js

const name = 'weiqinl'

let year = new Date().getFullYear()

export {  name,  year }

index.js

import _ from 'lodash'

import {  name,  year } from './utils'

Promise.resolve(year).then(value => {

  console.log(`${name} - ${value} - ${_.add(1, 2)}`)

})

babel转换

安装babel编译器和对应的运行时环境

npm install -D @babel/core @babel/preset-env @babel/plugin-transform-runtime @babel/polyfill babel-loader

并新建.babelrc文件,里面可以配置很多东西,内容为:

{

  "presets": [

    ["@babel/preset-env", {

      "useBuiltIns": "usage",

      "modules": false

    }]

  ],

  "plugins": [

    [

      "@babel/plugin-transform-runtime", {

        "corejs": false,

        "helpers": false,

        "regenerator": false,

        "useESModules": false

      }

    ]

  ],

  "comments": false

}

webpack构建

webpack4,可以零配置构建项目,那是因为它的很多配置值都默认了。在这里,我们需要自己配置。

首先安装webpack

npm i webpack webpack-cli -D

然后创建一个webpack.config.js文件

const path = require('path');

module.exports = {

  mode: "production",

  entry: ['@babel/polyfill', './src/index.js'],

  output: {

    path: path.resolve(__dirname, 'dist'),

    filename: '[name].bundle.js'

  },

  module: {

    rules: [{

      test: /\.js$/,

      include: [

        path.resolve(__dirname, 'src')

      ],

      exclude: /(node_modules|bower_components)/,

      loader: "babel-loader",

    }]

  }

}

使用

webpack构建打包好的js文件,我们将其引入到html文件。

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <meta http-equiv="X-UA-Compatible" content="ie=edge">

  <title>webpack-babel-es6</title>

</head>

<body>

  webpack构建由babel转码的es6语法,支持es6语法和API<br />

  请查看浏览器控制台

  <script src="./dist/main.bundle.js"></script>

</body>

</html>

运行该html,可以看到控制台有内容输出weiqinl - 2018 - 3

最后的目录结构:

可以git查看源码https://github.com/weiqinl/demo/tree/master/webpack-bable-es6

[完]

最新文章

  1. webform简单、复合控件
  2. 为Office365增加密码过期自动提醒功能
  3. 简介 jCanvas:当 jQuery遇上HTML5 Canvas
  4. Spring MVC上传文件
  5. Mediator(中介者)-对象行为型模式
  6. Cuckoo for Hashing_双哈希表
  7. linux创建git远程仓库
  8. POJ-3580-SuperMemo(splay的各种操作)
  9. 使用2to3转换python代码
  10. hdu 1111 Secret Code
  11. 去确认CP210x UART Bridge的USB的VID和PID
  12. IOS中的数据存储 简单总结
  13. IOS引导页的编写
  14. 解读 IoC 框架 InversifyJS
  15. java 11 标准Java异步HTTP客户端
  16. 快速干掉Windows Defender
  17. int,int32_t,int64_t
  18. DataGridView中进行增删改查
  19. bzoj 2202 [HNOI2010] Bounce 弹飞绵羊(分块)
  20. 基金 、 社保和QFII等机构的重仓股排名评测

热门文章

  1. 洛谷P5155 [USACO18DEC]Balance Beam(期望,凸包)
  2. django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
  3. php中的md5()的安全问题
  4. 【CH2401】送礼物
  5. 退役之战- SDOI
  6. Windows7系统基础操作
  7. MySql分页查询慢|这里告诉你答案
  8. DirectX11 With Windows SDK--24 Render-To-Texture(RTT)技术的应用
  9. python之路(5)文件操作(open)
  10. H5_0003:JS禁用调试,禁用右键,监听F12事件的方法