手把手教你webpack3(5)babel-loader详细使用说明

前注:

文档全文请查看 根目录的文档说明

如果可以,请给本项目加【Star】和【Fork】持续关注。

有疑义请点击这里,发【Issues】。

5.1、babel-loader

这个用于将使用ES6规范的js代码,转为ES5。

首先安装一大堆东西,参照下面的命令,一共是4个(包括webpack)

npm install --save babel-loader babel-core babel-preset-env webpack

创建babel规则文件.babelrc,内容设置为:

{
  "presets": [
    [
      "env",
      {
        "modules": false,
        "targets": {
          "browsers": [
            "> 1%",
            "last 2 versions",
            "not ie <= 8"
          ]
        }
      }
    ]
  ]
}

然后app.js里添加文件内容(这显然是es6语法):

let foo = () => {
    console.log('1')
}
foo()

运行 npm run test 执行脚本,等脚本执行完毕后,查看dist文件夹下的 dist.js 文件。

会发现代码已经被成功转为非es6语法了(截取如下):

var foo = function foo() {
  console.log('1');
};
foo();


但是,这个只能转一些普通的es6语法,像例如PromiseSet之类的,他是无法转换的。

如果想要转换这些,我们需要做一些额外的工作。

首先安装插件

npm install babel-runtime --save
npm install babel-plugin-transform-runtime --save-dev

然后修改.babelrc文件的内容为:

{
  "presets": [
    "babel-preset-env"
  ],
  "plugins": [
    "transform-runtime"
  ]
}

【注】:

babel-runtime(也就是上面plugins数组中的transform-runtime),解决了辅助代码(即让我们可以使用新特性的代码)被默认添加到每一个需要他的文件的问题(这会导致文件过大)。

具体解决方法是禁用了babel对每个文件的runtime注入,引入 babel-plugin-transform-runtime 并且使所有辅助代码从这里引用。

表现效果:假如A模块异步加载B模块,A、B模块里都使用了Set,那么为了使A模块正常运行,引入了某些代码。然后因为B模块又是被A模块引入的,那么B模块在被加载的时候,A模块里已经引入的代码,就没必要再次引入了,所以B模块里是不存在A模块引入的那些兼容代码的。

【注(完)】

修改webpack设置文件的loader内容为:

{
    test: /\.js$/,
    exclude: /node_modules/,
    loader: 'babel-loader'
}

最后修改app.js这个文件的内容,给里面加一些特殊的es6语法:

let foo = () => {
    console.log('1')
}
foo()
let bar = new Promise((resolve, reject) => {
    resolve(1)
})
bar.then(msg => console.log(msg))

let baz = new Set([1, 2, 3])
console.log(baz)

let another = async function () {
    console.time('timeout')
    let result = await new Promise((resolve, reject) => {
        console.log('in Promise')
        setTimeout(() => {
            resolve('Promise resolve')
        }, 1000)
    })
    console.log(result)
    console.timeEnd('timeEnd')
}

another()

以上代码包含es6的PromiseSet,以及es7中的async/await

此时我们运行一下npm run test试试,然后查看dist/dist.js文件,会发现我们的代码出现在大约1040行的位置,并且原本使用es6、es7语法的代码,都被一段很长很复杂的代码所替换(因为太长,所以这里略过)。

这说明我们转义成功了!

更多请参照【实战3】解决有es6、es7语法的js代码

时间: 2024-10-02 08:51:45

手把手教你webpack3(5)babel-loader详细使用说明的相关文章

手把手教你webpack3(7)style-loader详细使用说明

STYLE-LOADER详细使用说明 前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. DEMO地址 1.概述 简单来说,style-loader是将css-loader打包好的css代码以<style>标签的形式插入到html文件中. 对于简单项目,打包然后插入也就足够了,但是遇见复杂情况,例如: 需要使用webpack的服务器热加载服务进行特殊配置: 对css文件二次处理(更改类名,添加额外css

手把手教你webpack3(6)css-loader详细使用说明

CSS-LOADER配置详解 前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. 1.概述 对于一般的css文件,我们需要动用三个loader(是不是觉得好麻烦): 1.css-loader: 先附上官网文档(中文)的链接:css-loader文档. 不过说实话,这个官方文档讲的很糟糕,看的人一脸懵逼. css-loader主要用于处理图片路径(其实也包括例如导入css文件的路径),并且会将css样式打包

手把手教你webpack3(11)PostCSS-Loader配置简述

POSTCSS-LOADER配置简述 前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. DEMO地址 1.概述 postcss-loader 用于处理css代码,具有下列特点: 通常由 options 和 plugins 两部分组成,plugins 虽然嵌套在 options 里,但实际上是通过其他插件生效的: 配置是可以独立的(每个配置的插件也是独立的).详细介绍阅读[2.1]: 还有一些自定义配置,

手把手教你webpack3(8)url-Loader配置简述

URL-LOADER配置简述 前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. DEMO地址 1.概述 简单来说,url-loader的效果类似file-loader. 优点: 可以将css文件中的图片链接,转为base64字符串,或移动到打包后文件夹: 缺点: 可配置性比file-loader弱一些,但其实file-loader的那些配置,一般也用不到. 2.配置 2.1.limit 名称 类型 默认

手把手教你webpack3(10)Less-Loader配置简述

LESS-LOADER配置简述 前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. DEMO地址 1.概述 less-loader 用于处理编译 .less 文件,将其转为 css文件代码. 使用 less-loader 的话,必须安装 less,单独一个 less-loader 是没办法正常使用的. 安装 npm install --save less-loader less 2.配置 2.1.无任何配

手把手教你webpack3(1)最简单的webpack实例

0.前注 本文内容源于webpack中文文档,以及我自己实践中写的若干DEMO. 每个DEMO以文件夹为单位,从入门到进阶,根据文件夹编号为准,逐步递进. 成文时,webpack版本是[3.8.1] 0.1.安装webpack 首先你需要安装Node.js,点击打开Node.js下载页面.安装完Node.js后,会自带npm包管理器. npm install webpack -g 这个命令将安装最新版本的webpack(全局,学习教程中推荐,避免多次安装.但实践中还是有必要一个项目一个webpa

手把手教你webpack3(4)出口(详解)

前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. 4.出口 示例目录 4.1.标准的出口写法 // 出口文件 output: { filename: './dist/dist.js' } 意思是,将打包好的文件,打包到dist文件夹下的dist.js. 注: 大家一般将打包好的文件会放在dist文件夹下,方便管理. 4.2.出口文件名根据入口文件名所决定: 上面讲了多入口,以及对应的多出口的配置写法,可

手把手教你webpack3(3)入口(多入口)entry

前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. 3.入口(多入口) 示例目录 在上面的webpack.config.js中,有如下代码: // 入口文件,指向app.js entry: './app.js', 以上代码相当于: entry: { main: './app.js' } 如果是普通的项目(单入口),那么按照上面的方式写(entry: './app.js')就可以了. 至于下面的方式是什么呢

手把手教你webpack3(2)简单指令(npm脚本)

前注: 文档全文请查看 根目录的文档说明. 如果可以,请给本项目加[Star]和[Fork]持续关注. 有疑义请点击这里,发[Issues]. 2.简单指令(npm脚本) 示例目录 我们实际开发中,一般都是使用npm run build或者npm run dev之类的指令,这是怎么实现的呢? 答案是利用package.json里面的scripts属性. 其他文件如[1]中的四个文件,新增一个package.json,内容如下: // package.json 注:name只能是以下这种格式,不能