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'
        ]
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340