解析基于 core-js 与 ESLint 的 Web 兼容方案
· 阅读需 9 分钟
最后更新于 2021-12-08 21:12:00
Web 网页为了保证在多个平台和低中高端设备上的体验稳定性和一致性,通常会做 Polyfill 以保证兼容性。
然而,兼容性问题本身是个难题,Polyfill 也并非很好处理,所以在技术演变的过程 中,社区达成了一致,有一个主流的方案,大家共同来使用和维护。当下社区的主流方案则是基于 core-js
,另一方面, 利用 ESLint 插件则可以做到自动检测代码中需要添加 Polyfill 的 API。
core-js
只是解决了 JavaScript 的兼容性问题,Web 网页还有 CSS / HTML / Web API 的兼容性问题,处理这些问题的过程中,必然会存在大量相似的逻辑,比如目标设备的检测、目标设备的 API 支持情况统计。当然,社区也给出了非常好的方案,下面就来了解一下。
基于 core-js
的兼容方案
首先,来看看这两者如何进行配合以非常优雅的方式完成 Polyfill 任务的。
core-js
是实现了遵循 ECMAScript 标准的模块化标准库,也就是说,主要是实现 JavaScript 的 API,这并不包括浏览器平台的 Web API(例如一些 DOM API、fetch
等)。用起来也很简单,直接在项目中引入即可:
// polyfill all `core-js` features:
import 'core-js';
// polyfill only stable `core-js` features - ES and web standards:
import 'core-js/stable';
// polyfill only stable ES features:
import 'core-js/es';
上面是将所有 API 的 polyfills 引入项目,为了构建包尺寸更小,可以选择性的对特定 API 做兼容:
import 'core-js/modules/es.array.unscopables.flat';
import 'core-js/modules/es.array.unscopables.flat-map';
import 'core-js/modules/es.object.from-entries';
import 'core-js/modules/web.immediate';