webpack5浏览器兼容详解:babel-loader, core-js,plugin-transform-runtime

1,core-js:将我们的代码编译后成为浏览器可执行的代码,其中主要处理 ES 的API,他是运行的一个API 补丁包集合, 也可以理解为:它是JavaScript标准库的 polyfill。
 

官方库对他介绍的形容:
1.1它支持最新的 ECMAScript 标准
1.2它支持ECMAScript 标准库提案
1.3它支持一些 WHATWG / W3C 标准(跨平台或者 ECMAScript 相关)
1.4它最大限度的模块化:你能仅仅加载你想要使用的功能
1.5它能够不污染全局命名空间
1.6它和babel紧密集成:这能够优化core-js的导入
1.7它是最普遍、最流行 的给 JavaScript 标准库打补丁的方式
 

2,plugin-transform-runtime

大致有3大作用:
2.1 自动移除语法转换后内联的辅助函数(inline Babel helpers),使用@babel/runtime/helpers里的辅助函数来替代;
2.2 当代码里使用了core-js的API,自动引入@babel/runtime-corejs3/core-js-stable/,以此来替代全局引入的core-js/stable;
2.3 当代码里使用了Generator/async函数,自动引入@babel/runtime/regenerator,以此来替代全局引入的regenerator-runtime/runtime;
 

3. @babel/plugin-proposal-class-properties 和 @babel/plugin-proposal-object-rest-spread

plugin-proposal-class-properties 和 plugin-proposal-object-rest-spread 帮助生成符合规范的代码

4. 如下代码是使用core-js 处理浏览器兼容性问题的配置:

需要先 安装依赖:
npm i babel-loader @babel/preset-env core-js @babel/plugin-proposal-class-properties
@babel/plugin-proposal-object-rest-spread @babel/plugin-transform-runtime -D
npm i @babel/runtime

const {resolve} = require('path')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ESLintWebpackPlugin = require('eslint-webpack-plugin')

// npx webpack-dev-server
module.exports = {
    entry: './src/js/main.js', // 文件入口
    output: {
        filename: 'js/bundle.js', // 生成文件
        path: resolve(__dirname, 'dist'), // 生成路径
        clean: true
    },
    module: {
        rules: [{
            test: /\.((c|le)ss)$/,
            use: [
                MiniCssExtractPlugin.loader,
                'css-loader',
                {
                    loader: 'postcss-loader',
                    options: {
                        postcssOptions: {
                            plugin: [
                                // postcss 插件
                                ['postcss-preset-env'],
                                {
                                    // 其他选贼
                                }
                            ]
                        }
                    }
                },
                'less-loader'
            ]
        }, {
            test: /\.(png|jpg|avg|gif)$/,
            parser: {
                dataUrlCondition: {
                    maxSize: 8 * 1024
                }
            },
            generator: {
                filename: 'imgs/[hash:10][ext][query]'
            }
        }, {
            test: /\.html$/,
            loader: 'html-loader'
        }, {
            test: /\.(mp4|ttf|waff2?)$/,
            type: 'asset/resource',
            generator: {
                filename: 'media/[hash:8].[ext][query]'
            }
        }, {
            test: /\.m?js$/,
            exclude: /(node_modules|bower_components)/,
            use: {
                loader: 'babel-loader',
                options: {
                    presets: [
                        [
                            '@babel/preset-env',
                            {
                                useBuiltIns: 'usage',
                                corejs: 3,
                                targets: {
                                    chrome: '58',
                                    firefox: '60',
                                    ie: '8',
                                    safari: '10',
                                    edge: '15'
                                }
                            }
                        ]
                    ],
                    plugins: [
                        '@babel/plugin-transform-runtime',
                        // plugin-proposal-class-properties 和 plugin-proposal-object-rest-spread 帮助生成符合规范的代码
                        '@babel/plugin-proposal-class-properties',
                        '@babel/plugin-proposal-object-rest-spread'
                    ]
                }
            }
        }]
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/index.html'
        }),
        new MiniCssExtractPlugin({
            filename: 'css/[name].css',
            chunkFilename: '[id].css'
        }),
        new ESLintWebpackPlugin({
            context: resolve(__dirname, 'src'),
            fix: true
        })
    ],
    mode: 'development',
    devServer: {
        port: 3000,
        compress: true,
        open: true,
        watchFiles: [
            './src/index.html'
        ]
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值