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-jsimport "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},],},
