javascript主要处理兼容性问题,js的兼容性还是靠babel
babel
安装基本配置
只能转换基本语法,如Promise就不能再转换了
npm i babel-loader @babel/core @babel/preset-env -D
配置文件
- .babelrc
- babel.config.json
// .babelrc
// 早期使用较多的配置方式,但是配置Monorepos项目比较麻烦
// babel.config.json
// 可以直接作用于Monorepos项目的子包,更推荐使用
相关插件
@babel/core
// 编译核心插件
// 包括了@babel/parser @bable/traverse @babel/generator
@babel/preset-env
// 废除了babel-preset-stage0、babel-preset-stage1 等
// preset-env 默认会支持所有 es 标准的特性
// 如果没进入标准的,不再封装成 preset,需要手动指定 plugin-proposal-xxx
polyfill 兼容性处理
1. 全部js的处理,引入即可
问题是我只要解决部分兼容性问题,但是被全部引入
@babel/polyfill
在babel7.4版本之后就不建议如此应用
import @babel/polyfill
// 等同于
import 'core-js/stable';
import 'regenerator-runtime/runtime';
2.按实际使用加载
新建 .babelrc文件,配置如下所示
npm i core-js@3 @babel/preset-env @babel/core @babel/plugin-transform-runtime @babel/runtime -D
presets:[
[
'@babel/preset-env',
{
// 按需加载
useBuiltIns:'usage',
corejs:{
version:3
}
}
],
"plugins": [
[
"@babel/plugin-transform-runtime",
{
"corejs": false // 默认值,即使如此依然需要 yarn add @babel/runtime
}
]
]
]
描述一下useBuiltIns 三种不同
//useBuiltIns:'usage',
{
"presets": [
[
"@babel/preset-env",
{
"useBuiltIns": "entry",
"corejs": {
"version": 3,
"proposals": false
}
}
]
],
"plugins": [
]
}
// useBuiltIns:'entry',
{
"presets": [
[
"@babel/preset-env",
{
"useBuiltIns": "entry",
"corejs": {
"version": 3,
"proposals": false
}
}
]
],
"plugins": []
}
// 需要入口文件导入这两个包
import "core-js/stable"; // core-js
import "regenerator-runtime/runtime"; //regenerator-runtime会在安装@babel/preset-env的时候自动安装
useBuiltIns:'false',
目前,babel
处理兼容性问题有两种方案:
runtime方案。
需要下载
babel-loader @babel/core @babel/preset-env @babel/runtime-corejs3 @babel/plugin-transform-runtime
{
"presets": [["@babel/preset-env"]],
"plugins": [
[
"@babel/plugin-transform-runtime",
{
"corejs": {
"version": 3,
"proposals": true
},
"useESModules": true
}
]
]
}
polyfill
方案
babel-loader @babel/core @babel/preset-env core-js@3 @babel/runtime @babel/plugin-transform-runtime
module.exports = {
presets: [
[
"@babel/preset-env",
{
useBuiltIns: "usage",
corejs: {
version: 3,
proposals: false,
},
},
],
],
plugins: [
[
"@babel/plugin-transform-runtime",
{
corejs: false, // 默认值,即使如此依然需要 yarn add @babel/runtime
},
],
],
};
webpack.config.js
module: {
rules: [
{
test: /\.js$/,
use: [{ loader: "babel-loader" }],
exclude: "/node_modules/",
cacheDirectory:true
},
],
},