当前位置:   article > 正文

webpack5 Core-js解决async 函数、promise 对象等兼容问题_js promise 兼容

js promise 兼容

为什么Core-js

过去我们使用 babel 对 js 代码进行了兼容性处理,其中使用@babel/preset-env 智能预设来处理兼容性问题。

它能将 ES6 的一些语法进行编译转换,比如箭头函数、点点点运算符等。但是如果是 async 函数、promise 对象、数组的一些方法(includes)等,它没办法处理。

所以此时我们 js 代码仍然存在兼容性问题,一旦遇到低版本浏览器会直接报错。所以我们想要将 js 兼容性问题彻底解决

是什么Core-js

core-js 是专门用来做 ES6 以及以上 API 的 polyfill

polyfill翻译过来叫做垫片/补丁。就是用社区上提供的一段代码,让我们在不兼容某些新特性的浏览器上,使用该新特性

main.js 

  1. // 添加promise代码
  2. const promise = Promise.resolve();
  3. promise.then(() => {
  4. console.log("hello promise");
  5. });

此时 Eslint 会对 Promise 报错。

npm i @babel/eslint-parser -D
  • .eslintrc.js
    1. module.exports = {
    2. // 继承 Eslint 规则
    3. extends: ["eslint:recommended"],
    4. parser: "@babel/eslint-parser", // 支持最新的最终 ECMAScript 标准
    5. }

    此时观察打包输出的 js 文件,我们发现 Promise 语法并没有编译转换,所以我们需要使用 core-js 来进行 polyfill

安装命令 

npm i core-js

main.js

将所有兼容性代码全部引入

  1. import "core-js";
  2. // 添加promise代码
  3. const promise = Promise.resolve();
  4. promise.then(() => {
  5. console.log("hello promise");
  6. });

 或按需引入

  1. import "core-js/es/promise";
  2. // 添加promise代码
  3. const promise = Promise.resolve();
  4. promise.then(() => {
  5. console.log("hello promise");
  6. });

或自动按需引入

main.js中的core-js注释

  • babel.config.js
  1. module.exports = {
  2. // 智能预设:能够编译ES6语法
  3. presets: [
  4. [
  5. "@babel/preset-env",
  6. // 按需加载core-js的polyfill
  7. { useBuiltIns: "usage", corejs: { version: "3", proposals: true } },
  8. ],
  9. ],
  10. };

 最后会生成一个单独的js文件

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/625025
推荐阅读
相关标签
  

闽ICP备14008679号