手把手教你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代码

目录
相关文章
|
2月前
|
JavaScript 前端开发
webpack成长指北第9章---webpack如何对icon字体进行打包
webpack成长指北第9章---webpack如何对icon字体进行打包
40 1
|
2月前
|
前端开发 JavaScript
webpack成长指北第7章---webpack的css\less\scss样式打包
webpack成长指北第7章---webpack的css\less\scss样式打包
44 0
|
2月前
|
前端开发 JavaScript
webpack成长指北第8章---webpack的CSS Modules打包
webpack成长指北第8章---webpack的CSS Modules打包
23 0
|
5月前
webpack 使用打包报错 ERROR in node_modules\@types\node\ts4.8\assert.d.ts
webpack 使用打包报错 ERROR in node_modules\@types\node\ts4.8\assert.d.ts
126 0
|
15天前
|
前端开发 JavaScript 开发者
深入了解Webpack:前端模块打包工具
深入了解Webpack:前端模块打包工具
8 1
|
17天前
|
JavaScript 前端开发
构建工具:配置Webpack打包Vue项目
【4月更文挑战第24天】本文介绍了如何配置Webpack来打包Vue项目。首先,Webpack作为模块打包器处理依赖并打包成可执行文件。接着,通过安装Node.js和npm,创建Vue项目,进入项目目录并配置Webpack的入口、输出、加载器和插件。最后,运行构建命令完成打包。理解Webpack基础并按需配置,能优化前端项目构建和开发体验。
|
5月前
|
JavaScript 数据库
使用 Webpack 打包 node 程序,node_modules 真的被干掉啦
使用 Webpack 打包 node 程序,node_modules 真的被干掉啦
75 0
|
8月前
|
JavaScript
Webpack4 创建项目以及打包一个JS文件
Webpack4 创建项目以及打包一个JS文件
74 0
|
4月前
|
前端开发 JavaScript 开发者
webpack打包机制,构建过程和配置
webpack打包机制,构建过程和配置
20 0
|
4月前
|
JavaScript 前端开发
在项目中引入webpack打包工具
在项目中引入webpack打包工具