webpack5基础应用(5)

2023-11-14 319 0

一. 使用babel-loader

1. 为什么需要babel-loader

前面我们使用less-loader编译过less文件,应用xml-loader编译过xml文件,那js文件需要编译吗?

调整hello-world.js文件:

function getString() { 
    return new Promise((resolve, reject) => {
        setTimeout(() => { 
            resolve("Hello World!!!");
        }, 2000)
    })
}
async function helloWorld() {
    let string = await getString()
    console.log(string);
}

export default helloWorld;

执行npx webpack命令编译正常;启动服务在浏览器查看,两秒后打印了 Hello World!!!,说明代码能够正常运行。但是查看打包后的js,发现这个js中的代码并没有帮我们做转化,里面的一些ES6的代码会原封不动的帮我们打包到里面:

那么为什么浏览器能够运行呢?因为当前的浏览器是支持ES6代码的,那么如果浏览器不支持ES6的代码该怎么做?我们得将ES6转换为ES5。

2. 使用babel-loader

babel-loader能帮助我们将ES6转换为低版本的浏览器能识别的ES代码。

1)安装相关包

  • babel-loader:在webpack里应用babel解析ES6的桥梁
  • @babel/core:babel核心模块
  • @babel/preset-env:babel预设,一组babel插件集合
$ npm install babel-loader @babel/core @babel/preset-env -D

2)在webpack.config.js里面配置

module.exports = {
    ... ...
    //资源模块配置
    module: {
        // 规则配置,数组里面配置多个对象去加载不同类型的资源文件
        rules: [
            ... ...
            {
                test: /\.js$/,
                exclude: /node_modules/, //排除node_modules下的js
                use: {
                    loader: 'babel-loader',
                    options: { //参数配置
                        presets: ['@babel/preset-env'] //预设
                    }
                }
            }
        ],
    },
    ... ...
};

3)执行npx webpack命令,编译成功;启动服务在浏览器查看:点击app.html,若页面正常显示,说明配置成功;若报regeneratorRuntime is not defined则说babel的配有问题。

3. regeneratorRuntime插件

regeneratorRuntime是webpack打包生成的全局辅助函数,由babel生成,用于兼容async/await语法。

1)安装相关包

  • @babel/runtime 这个包中包含了regeneratorRuntime运行时需要的
  • @babel/plugin-transform-runtime 这个插件会在需要regeneratorRuntime的地方自动require导包
$ npm install @babel/runtime -D
$ npm install @babel/plugin-transform-runtime

2)在webpack.config.js中配置插件

module.exports = {
    ... ...
    //资源模块配置
    module: {
        // 规则配置,数组里面配置多个对象去加载不同类型的资源文件
        rules: [
            ... ...
            {
                test: /\.js$/,
                exclude: /node_modules/, //排除node_modules下的js
                use: {
                    loader: 'babel-loader',
                    options: { //参数配置
                        presets: ['@babel/preset-env'], //预设
                        plugins: [
                            [
                                '@babel/plugin-transform-runtime'
                            ]
                        ]
                    }
                }
            }
        ],
    },
    ... ...
};

再次运行查看,结果正常显示。

相关文章

webpack基础应用(6)
webpack5基础应用(4)
webpack5基础应用(3)
webpack5基础应用(2)
webpack5 基础应用(1)

发布评论