7.12.0 • Published 2 years ago

@head/preset-babel v7.12.0

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

@head/preset-babel

// babel.config.js
module.exports = {
  presets: [
    ['@babel/preset-env', {
      exclude: [
        '@babel/plugin-proposal-class-properties',
        '@babel/plugin-proposal-private-methods',
        '@babel/plugin-proposal-logical-assignment-operators',
        '@babel/plugin-proposal-numeric-separator',
        '@babel/plugin-proposal-unicode-property-regex',
        '@babel/plugin-transform-dotall-regex',
        '@babel/plugin-transform-unicode-regex',
        // '@babel/plugin-syntax-top-level-await',
      ],
    }]
  ],
}

7.12.17 2021-02-18

  1. @babel/core @7.12.17
  2. @babel/plugin-transform-runtime @7.12.17
    1. @babel/runtime @7.12.18
  3. @babel/template @7.12.13
  4. @babel/generator @7.12.17
  5. @babel/preset-env @7.12.17
  6. core-js @3.8.3 2021-10-13
    1. core-js-compat @3.8.3
  7. browserslist 4.17.6 2021-11-03

已通过 finished proposal,但在我们锁版本的当时并没有,所以不建议使用:

  1. @babel/plugin-proposal-class-properties ES2022
    1. @babel/plugin-proposal-private-methods
  2. @babel/plugin-syntax-top-level-await ES2022
  3. @babel/plugin-proposal-logical-assignment-operators ES2021
  4. @babel/plugin-proposal-numeric-separator ES2021

已通过 finished proposal,但不是良好的工程实践,所以不建议使用:

  1. @babel/plugin-proposal-unicode-property-regex
  2. @babel/plugin-transform-dotall-regex
  3. @babel/plugin-transform-unicode-regex

没有通过 finished proposal,不应该使用:

  1. https://babel.dev/docs/en/babel-plugin-proposal-decorators

一些 @babel/plugin-syntax-x 已经升级到 @babel/plugin-transform-x,但依赖并没有改好。

browserslist

  1. 2011-06,ECMAScript 5.1 版发布,并且成为 ISO 国际标准(ISO/IEC 16262:2011)
  2. 2015-06 发布 ES2015,即 ES6.0,2016-06 发布 ES2016,即 ES6.1;标准委员会最终决定每年 6 月正式发布一次,用年份标记版本。
  3. Array.prototype.includesES2016提案,我们把这里作为一个里程碑来考虑和兼容性有关的设置。
  4. 由于我们使用 babel@7core-js@3 来处理兼容性,所以实际需要参考的数据是 core-js-compat,而不是 MDN 或者 CanIUse 等。
  5. 该份数据指出 includes 是在 chrome 53 实现的,因此设置 not chrome < 52 会导致引入 require("core-js/modules/es.array.includes.js"),而 not chrome < 53 则不会引入该行
    1. 实际需要用 chrome > 0, chrome < 52 来测试,否则会被其它浏览器的干扰
    2. MDN 认为 chrome 48 已经实现该特性,但我们应该以 core-js-compat 的数据为准
    3. 由于 FireFox 很长一段版本实现有问题,导致 core-js-compat 认为 firefox 102 才开始真正支持该特性,所以大部分的配置方式都会导致引入
    4. 由于 IE 始终没有实现,所以需要兼容 IE 的配置方式都会导致引入
  6. 我们考虑选择 chrome 52 作为这个里程碑标记,即经过兼容性处理后的代码应该能在 chrome 52 上正常运行;体现在本例中即 应该 引入。
    1. chrome 52 发布于 2016-07-20
    2. 据此选择了 firefox 48 2016-08-02
    3. 据此选择了 edge 38 2016-08-02
    4. 据此选择了 safari 10, ios_saf 10 2016-09-20
  7. Android 于 2014-10 发布了 5.0 Lollipop,此版本起用户可以从商店升级 WebView,即版本号和 Chrome 一致了。考虑到 >99% 用户机型占比,选择了 android 5 来作为一个里程碑。
  8. SamSung 12 发布于 2020-06-19,使用了 Chrome 79,所以暂时不处理它。

2022-10-06,以上配置对用户的覆盖率是 83.8%

cover 100% in CN 的覆盖率也只有 90.3%,所以还需要根据实践调整

遗留问题:

  1. 以上里程碑标记保证的是 ES2016+ 的兼容性,即 Arrays.prototype.includes 及其之后的所有特性,并没有涉及 ES2015,即我们俗称的 ES6,例如 Arrow Function
  2. 看上去 对于 Android >=5 和 iOS >= 10 来说原生支持;并且看上去 ES2016 也是原生支持的;但从 ES2017 开始支持得就不太好了,所以以上将里程碑定在 ES2016 即 Array.prototype.includes 应该有足够的代表性。
  3. 观察构建制品会发现,Babel 对于 ES2015 是有一定处理的,但暂时没有找到文档支持具体处理或不处理了哪些,如果在实践中遇到问题,再考虑补测试用例。

参考

  1. https://babeljs.io/docs/en/features-timeline
  2. https://babeljs.io/docs/en/configuration#print-effective-configs
  3. https://github.com/tc39/proposals/blob/main/finished-proposals.md
  4. https://babeljs.io/blog/2020/03/16/7.9.0#babelpreset-envs-bugfixes-option-11083httpsgithubcombabelbabelpull11083
@babel/code-frame@babel/core@babel/generator@babel/helper-annotate-as-pure@babel/helper-builder-binary-assignment-operator-visitor@babel/helper-compilation-targets@babel/helper-create-class-features-plugin@babel/helper-create-regexp-features-plugin@babel/helper-define-map@babel/helper-explode-assignable-expression@babel/helper-function-name@babel/helper-get-function-arity@babel/helper-hoist-variables@babel/helper-member-expression-to-functions@babel/helper-module-imports@babel/helper-module-transforms@babel/helper-optimise-call-expression@babel/helper-plugin-utils@babel/helper-remap-async-to-generator@babel/helper-replace-supers@babel/helper-simple-access@babel/helper-skip-transparent-expression-wrappers@babel/helper-split-export-declaration@babel/helper-validator-identifier@babel/helper-validator-option@babel/helper-wrap-function@babel/helpers@babel/highlight@babel/plugin-proposal-async-generator-functions@babel/plugin-proposal-class-properties@babel/plugin-proposal-decorators@babel/plugin-proposal-dynamic-import@babel/plugin-proposal-export-namespace-from@babel/plugin-proposal-json-strings@babel/plugin-proposal-logical-assignment-operators@babel/plugin-proposal-nullish-coalescing-operator@babel/plugin-proposal-numeric-separator@babel/plugin-proposal-object-rest-spread@babel/plugin-proposal-optional-catch-binding@babel/plugin-proposal-optional-chaining@babel/plugin-proposal-private-methods@babel/plugin-proposal-unicode-property-regex@babel/plugin-syntax-decorators@babel/plugin-syntax-jsx@babel/plugin-syntax-top-level-await@babel/plugin-transform-arrow-functions@babel/plugin-transform-async-to-generator@babel/plugin-transform-block-scoped-functions@babel/plugin-transform-block-scoping@babel/plugin-transform-classes@babel/plugin-transform-computed-properties@babel/plugin-transform-destructuring@babel/plugin-transform-dotall-regex@babel/plugin-transform-duplicate-keys@babel/plugin-transform-exponentiation-operator@babel/plugin-transform-for-of@babel/plugin-transform-function-name@babel/plugin-transform-literals@babel/plugin-transform-member-expression-literals@babel/plugin-transform-modules-amd@babel/plugin-transform-modules-commonjs@babel/plugin-transform-modules-systemjs@babel/plugin-transform-modules-umd@babel/plugin-transform-named-capturing-groups-regex@babel/plugin-transform-new-target@babel/plugin-transform-object-super@babel/plugin-transform-parameters@babel/plugin-transform-property-literals@babel/plugin-transform-regenerator@babel/plugin-transform-reserved-words@babel/plugin-transform-runtime@babel/plugin-transform-shorthand-properties@babel/plugin-transform-spread@babel/plugin-transform-sticky-regex@babel/plugin-transform-template-literals@babel/plugin-transform-typeof-symbol@babel/plugin-transform-unicode-escapes@babel/plugin-transform-unicode-regex@babel/preset-env@babel/runtime@babel/template@babel/traverse@babel/typesbrowserslistcore-jscore-js-compat
7.12.0

2 years ago

7.11.3

2 years ago

7.11.2

2 years ago

7.11.1

2 years ago

7.11.0

2 years ago