core-js 3.50 全解析JavaScript 模块化标准库的 Polyfill 实战指南【免费下载链接】core-jsStandard Library项目地址: https://gitcode.com/GitHub_Trending/co/core-js本指南以 README.md 为主线系统讲解core-js这一 JavaScript 模块化标准库的安装、按需加载、无污染用法、Babel/swc 集成、激进程度配置与自定义构建并梳理其覆盖的 ECMAScript 标准特性、各阶段提案与 Web 标准能力。读完本文你将掌握从全量引入到逐方法按需引入的完整实践路径并能依据兼容性数据为指定目标环境生成最小化 polyfill 方案。项目定位模块化标准库而非单一脚本core-js是一个模块化的 JavaScript 标准库当前仓库版本为3.50.0见 packages/core-js/package.json其 description 即 Standard library。它提供的 polyfill 覆盖ECMAScript 标准特性ES3 起至 2025promise、symbol、collectionsMap/Set/WeakMap/WeakSet、迭代器、typed arrays 及大量其他特性ECMAScript 提案从已完成的 stage 4 提案到 pre-stage 0 的实验性提案跨平台的 WHATWG / W3C 特性与提案如URL/URLSearchParams、structuredClone、queueMicrotask等。它区别于普通 polyfill 库的关键能力有三点可以只加载需要的特性、可以做到不污染全局命名空间、每个特性都以独立入口提供。快速上手安装与三种使用姿势安装// 全局版本会扩展原生构造器原型 npm install --save core-js3.50.0 // 不污染全局命名空间的版本 npm install --save core-js-pure3.50.0 // 打包好的全局版本 npm install --save core-js-bundle3.50.0postinstall 提示信息core-js在安装后会显示项目资助提示。若该信息造成困扰可通过以下任一方式禁用ADBLOCKtrue npm install // 或 DISABLE_OPENCOLLECTIVEtrue npm install // 或 npm install --loglevel silent方式一一次性全量引入import core-js/actual; Promise.try(() 42).then(it console.log(it)); // 42 Array.from(new Set([1, 2, 3]).union(new Set([3, 4, 5]))); // [1, 2, 3, 4, 5] [1, 2].flatMap(it [it, it]); // [1, 1, 2, 2] Iterator.concat([1, 2], function * (i) { while (true) yield i; }(3)) .drop(1).take(5) .filter(it it % 2) .map(it it ** 2) .toArray(); // [9, 25] structuredClone(new Set([1, 2, 3])); // new Set([1, 2, 3])方式二只加载需要的特性import core-js/actual/promise; import core-js/actual/set; import core-js/actual/iterator; import core-js/actual/array/from; import core-js/actual/array/flat-map; import core-js/actual/structured-clone; Promise.try(() 42).then(it console.log(it)); // 42 Array.from(new Set([1, 2, 3]).union(new Set([3, 4, 5]))); // [1, 2, 3, 4, 5] [1, 2].flatMap(it [it, it]); // [1, 1, 2, 2] structuredClone(new Set([1, 2, 3])); // new Set([1, 2, 3])方式三不污染全局命名空间pure 版本core-js-pure把所有原型方法转成静态方法、以命名导出返回避免修改任何原生构造器import Promise from core-js-pure/actual/promise; import Set from core-js-pure/actual/set; import Iterator from core-js-pure/actual/iterator; import from from core-js-pure/actual/array/from; import flatMap from core-js-pure/actual/array/flat-map; import structuredClone from core-js-pure/actual/structured-clone; Promise.try(() 42).then(it console.log(it)); // 42 from(new Set([1, 2, 3]).union(new Set([3, 4, 5]))); // [1, 2, 3, 4, 5] flatMap([1, 2], it [it, it]); // [1, 1, 2, 2] Iterator.concat([1, 2], function * (i) { while (true) yield i; }(3)) .drop(1).take(5) .filter(it it % 2) .map(it it ** 2) .toArray(); // [9, 25] structuredClone(new Set([1, 2, 3])); // new Set([1, 2, 3])CommonJS 入口体系es / stable / actual / fullcore-js为每个被 polyfill 的方法 / 构造器 / 命名空间都提供了 CommonJS 入口。命名空间从保守到激进共四档// polyfill 所有 core-js 特性包括早期阶段提案 import core-js; // 或 import core-js/full; // polyfill 所有实际特性——稳定 ES、Web 标准与 stage 3 ES 提案 import core-js/actual; // 只 polyfill 稳定特性——ES 与 Web 标准 import core-js/stable; // 只 polyfill 稳定 ES 特性 import core-js/es;以Set为例四档命名空间的粒度差异一目了然// 所有与 Set 相关的特性包含早期阶段 ES 提案 import core-js/full/set; // Set 所需的稳定 ES 特性 Web 标准特性 stage 3 ES 提案 import core-js/actual/set; // Set 所需的稳定 ES 特性 Web 标准特性此处为 DOM collections 迭代器 import core-js/stable/set; // 仅 Set 所需的稳定 ES 特性 import core-js/es/set; // 对应的无污染版本 import Set from core-js-pure/full/set; import Set from core-js-pure/actual/set; import Set from core-js-pure/stable/set; import Set from core-js-pure/es/set;甚至可以精确到单个方法import core-js/full/set/intersection; import core-js/actual/array/find-last; import core-js/stable/queue-microtask; import core-js/es/array/from;提案按阶段批量引入// 引入 iterator helpers 提案 import core-js/proposals/iterator-helpers; // 引入所有 stage 2 提案 import core-js/stage/2;建议优先使用/actual/命名空间。它覆盖所有已落地的 JavaScript 特性同时不包含主要供实验用的不稳定早期提案。警告modules路径是内部 API不会自动注入全部依赖且可能在 minor/patch 版本中变动。仅用于自定义构建或当你明确知道自己在做什么时。若使用core-js扩展原生对象建议在应用入口最顶部加载所有core-js模块否则可能与其他库产生冲突例如 Google Maps 使用自己的Symbol.iterator与Array.from、URLSearchParams冲突。core-js极度模块化、由大量微小模块组成浏览器中应整体打包core-js而不是按文件逐个加载否则会产生成百上千个请求。无污染版本的原型方法virtual 入口与 bind 操作符在 pure 版本中无法污染原生构造器原型原型方法被转成静态方法。借助 bind 操作符提案::可还原接近原生的调用体验import fill from core-js-pure/actual/array/virtual/fill; import findIndex from core-js-pure/actual/array/virtual/find-index; Array(10)::fill(0).map((a, b) b * b)::findIndex(it it !(it % 8)); // 4警告bind 操作符是早期阶段的 ECMAScript 提案使用该语法存在风险。与 Babel 的集成core-js深度集成babel是 babel 中所有 polyfill 相关功能的基础。babel/polyfill 已被替代babel/polyfill本质上就是core-js稳定特性 regenerator-runtime的导入。它现已废弃向后兼容仍基于core-js2官方推荐等价替代方案import core-js/stable; import regenerator-runtime/runtime;babel/preset-envuseBuiltInsbabel/preset-env的useBuiltIns选项用于优化全局版core-js的引入同时必须用corejs选项声明版本如corejs: 3.50。重要建议写清 minor 版本如corejs: 3.50而不是corejs: 3。因为corejs: 3不会注入在后续 minor 版本中新增的模块。useBuiltIns: entry把core-js导入替换为仅目标环境所需的模块。例如import core-js/stable;对chrome 71目标会被替换为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;它对全局版本的所有入口及其组合都生效例如import core-js/es; import core-js/proposals/set-methods; import core-js/full/set/map;对chrome 71目标会得到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/esnext.set.difference; import core-js/modules/esnext.set.intersection; import core-js/modules/esnext.set.is-disjoint-from; import core-js/modules/esnext.set.is-subset-of; import core-js/modules/esnext.set.is-superset-of; import core-js/modules/esnext.set.map; import core-js/modules/esnext.set.symmetric-difference; import core-js/modules/esnext.set.union;useBuiltIns: usage在每个文件顶部仅注入该文件用到的、且目标环境不支持的 polyfill。例如第一个文件写了let set new Set([1, 2, 3]);第二个文件写了let array Array.of(1, 2, 3);若目标是 IE 11 这类旧环境会分别生成// 第一个文件 import core-js/modules/es.array.iterator; import core-js/modules/es.object.to-string; import core-js/modules/es.set; var set new Set([1, 2, 3]);// 第二个文件 import core-js/modules/es.array.of; var array Array.of(1, 2, 3);默认useBuiltIns: usage只 polyfill 稳定特性可通过corejs: { version: 3.50, proposals: true }开启提案 polyfill。重要使用useBuiltIns: usage时不要手动添加core-js导入它们会被自动注入。babel/runtime无污染版本的自动化babel/runtime配合corejs: 3选项可自动把 JS 标准库的新特性用法替换为对core-js-pure的导入。原本你需要手写import from from core-js-pure/stable/array/from; import flat from core-js-pure/stable/array/flat; import Set from core-js-pure/stable/set; import Promise from core-js-pure/stable/promise; from(new Set([1, 2, 3, 2, 1])); flat([1, [2, 3], [4, [5]]], 2); Promise.resolve(32).then(x console.log(x));现在只需Array.from(new Set([1, 2, 3, 2, 1])); [1, [2, 3], [4, [5]]].flat(2); Promise.resolve(32).then(x console.log(x));默认同样只 polyfill 稳定特性可用corejs: { version: 3, proposals: true }开启提案。警告同时使用babel/preset-env与babel/runtime时corejs选项只能配置在一处否则功能重复且引发冲突。与 swc 的集成快速 JS 转译器swc内置了对全局版core-js的优化集成同样提供usage与entry两种模式usage模式目前效果不如 babel。.swcrc配置示例{ env: { targets: 0.25%, not dead, mode: entry, coreJs: 3.50 } }可配置的激进程度configurator默认情况下core-js只在特性确实缺失时才注入 polyfill它会检测特性是否存在且工作正常没问题就使用原生实现。但有时检测过于严格如Promise构造器要求支持 unhandled rejection 跟踪与species有时环境又存在检测覆盖不到的已知问题。此时可针对特定 polyfill 重定义行为const configurator require(core-js/configurator); configurator({ useNative: [Promise], // 仅当原生实现完全不可用时才使用 polyfill usePolyfill: [Array.from, String.prototype.padEnd], // 无论如何都使用 polyfill useFeatureDetection: [Map, Set], // 默认行为 }); require(core-js/actual);从 packages/core-js/configurator.js 的源码可以看到它的实现机制useNative将对应特性标记为isForced.NATIVE、usePolyfill标记为isForced.POLYFILL、useFeatureDetection则清空强制标记恢复默认检测由internals/is-forced模块承载的data存储驱动。此外它还支持两个特殊开关USE_FUNCTION_CONSTRUCTOR布尔值用于在 CSP 受限环境下通过Function构造器访问真实的%AsyncIteratorPrototype%与AsyncIteratorPrototype直接指定被视为%AsyncIteratorPrototype%的对象。注意该配置对部分特性无效并且一旦改变默认行为连core-js内部也可能无法正常工作。自定义构建core-js-builder如需排除某些特性、或为目标引擎生成专属 polyfill可使用core-js-builder包packages/core-js-builder。它配合core-js-compat提供的兼容性数据可产出针对目标环境的最小化 bundle。支持的引擎与兼容性数据core-js力求支持所有具备 ES3 能力的 JS 引擎与环境。部分特性有更高的最低要求——例如某些访问器只在 ES5 起才能正常工作promise 需要微任务或任务调度机制。作者无法在所有环境实测IE7- 等远古环境的测试已停止完整支持列表见兼容性表。兼容性数据由core-js-compat包提供包含哪些core-js模块对哪些环境是必需的、入口点信息及相关工具这正是 babel、swc 集成所依赖的数据源。如需协助维护该数据可参考 CONTRIBUTING.md。功能全景ECMAScript 标准库所有 ES 特性均可通过core-js(-pure)/es系列入口访问es|stable|actual|full四档命名空间一致下面按类别给出核心 API 与代表性示例。具体实现模块位于 packages/core-js/modules如 es.object.assign.js、es.promise.js 等命名规则为es.前缀 特性点路径。Object静态方法覆盖assign、create、defineProperty(s)、entries、fromEntries、groupBy、hasOwn、is、keys、values、setPrototypeOf等并修复toString对toStringTag的支持。示例Object.assign({ q: 1, w: 2 }, { e: 3, r: 4 }, { t: 5, y: 6 }); // { q: 1, w: 2, e: 3, r: 4, t: 5, y: 6 } Object.is(NaN, NaN); // true Object.is(0, -0); // false Object.fromEntries(new Map([[a, 1], [b, 2]])); // { a: 1, b: 2 } Object.hasOwn({ foo: 42 }, foo); // true Object.groupBy([1, 2, 3, 4, 5], it it % 2); // { 1: [1, 3, 5], 0: [2, 4] }Function / ErrorFunction#name、#bind与hasInstance入口 es.function.name.js、es.function.bind.js。Error家族支持cause、AggregateError、SuppressedError与Error.isErrorconst error new TypeError(Here explained whats wrong, { cause }); error.cause cause; // true const aggregate new AggregateError([error1, error2], Collected errors); aggregate.errors[0] error1; // true Error.isError(new Error(error)); // true Error.isError(Object.create(Error.prototype)); // false警告Error.isError没有万无一失的 polyfill 方案实现较为朴素README 已明确说明。Array覆盖从 ES5 到 Change Array by copy 的完整方法集并支持isConcatSpreadable、species现代sort稳定排序等。示例Array.from(new Set([1, 2, 3, 2, 1])); // [1, 2, 3] Array.from(123, it it ** 2); // [1, 4, 9] Array.of(1, 2, 3); // [1, 2, 3] [1, 2, 3, 4].findLast(isOdd); // 3 [1, 2, 3].includes(2); // true [NaN].includes(NaN); // trueindexOf 为 -1 [1, [2, [3, [4]]], 5].flat(3); // [1, 2, 3, 4, 5] const sequence [1, 2, 3]; sequence.toReversed(); // [3, 2, 1] sequence; // [1, 2, 3]原数组不变 await Array.fromAsync((async function * () { yield * [1, 2, 3]; })(), i i ** 2); // [1, 4, 9]Iterator迭代器助手已完成的 Iterator helpers 提案提供了链式处理能力对应 es.iterator.constructor.js、es.iterator.concat.js 等模块[1, 2, 3, 4, 5, 6, 7].values() .drop(1) .take(5) .filter(it it % 2) .map(it it ** 2) .toArray(); // [9, 25] Iterator.concat([0, 1].values(), [2, 3], function * () { yield 4; yield 5; }()).toArray(); // [0, 1, 2, 3, 4, 5] Iterator.zip([ [0, 1, 2], [3, 4, 5], ]).toArray(); // [[0, 3], [1, 4], [2, 5]]Iterator.zipKeyed支持mode: shortest | longest | strict与padding选项控制合并策略。警告为防止原型污染pure 版本中新的%IteratorPrototype%方法不挂到真实原型上只在包装器上可用——用Iterator.from([]).map(fn)而不是[].values().map(fn)。String 与 RegExp覆盖 Unicode 相关修复、match/replace/search/split符号支持、Annex B HTML 包装方法以及RegExp的s/y标志、命名捕获组、RegExp.escape等。示例hello.padStart(10, 1234); // 12341hello foobarbaz.includes(bar); // true .codePointAt(0); // 134071 String.fromCodePoint(97, 134071, 98); // ab RegExp(., s).test(\n); // true RegExp(foo:(?foo\\w),bar:(?bar\\w)).exec(foo:abc,bar:def).groups; // { foo: abc, bar: def } Test abc test test abc test..replaceAll(abc, foo); // Test foo test test foo test. ab.isWellFormed(); // true a\uD83Db.toWellFormed(); // abNumber / Math / DateNumber构造器支持二进制、八进制字面量解析Number(0b1010101) // 85并提供isFinite、isInteger、isSafeInteger、EPSILON、MAX_SAFE_INTEGER等。Math提供acosh、imul、f16round、sign、trunc等以及高精度求和1e20 0.1 -1e20; // 0 Math.sumPrecise([1e20, 0.1, -1e20]); // 0.1Date提供 ES5 方法修复与 Annex B 方法getYear、setYear、toGMTString。Promise覆盖all、allSettled、any、race、finally、try、withResolvers对应 es.promise.js 等模块Promise.try(() 42).then(it console.log(it)); // 42 Promise.try(() { throw new Error(42); }).catch(error console.log(error)); Promise.allSettled([ Promise.resolve(1), Promise.reject(2), ]).then(console.log); // [{ value: 1, status: fulfilled }, { reason: 2, status: rejected }] const d Promise.withResolvers(); d.resolve(42); d.promise.then(console.log); // 42Unhandled rejection 跟踪在 Node.js 中与原生实现一样支持unhandledRejection与rejectionHandled事件浏览器中默认在控制台提示也可自定义监听unhandledrejection/rejectionhandled事件或onunhandledrejection/onrejectionhandled处理器。Symbol提供完整 well-known symbols 与Symbol.for/Symbol.keyFor、Symbol#description。需要注意 polyfill 的已知限制README 明确列出无法新增原始类型Symbol返回对象、Symbol.for/keyFor无法跨 realm polyfill、默认通过Object.prototype上的 setter 隐藏键可能导致内存泄漏并使in运算符异常。可用Symbol.useSimple()与Symbol.useSetter()切换隐藏策略。CollectionsMap / Set / WeakMap / WeakSetcore-js多数情况下使用原生集合仅在需要时修复方法/构造器在旧环境中提供 O(1) 查找的快速 polyfill。示例getOrInsert与 Set 新方法均已落地const map new Map([[a, 1]]); map.getOrInsert(a, 2); // 1 map.getOrInsertComputed(c, key key); // c new Set([1, 2, 3]).union(new Set([3, 4, 5])); // Set {1, 2, 3, 4, 5} new Set([1, 2, 3]).intersection(new Set([3, 4, 5])); // Set {3} new Set([1, 2, 3]).isSubsetOf(new Set([5, 4, 3, 2, 1])); // true警告弱集合 polyfill 把值存为键的隐藏属性多数情况下不泄漏原生 symbol 作为WeakMap键无法在不泄漏的情况下正确 polyfill。Explicit Resource Management提供DisposableStack、AsyncDisposableStack、SuppressedError等内置对象注意using语法本身需要转译器支持如 babel 的syntax-explicit-resource-management插件。Typed Arrays实现对ArrayBuffer、DataView、各 Typed Array 构造器、静态与原型方法的实现与修复。Typed arrays 只在支持描述符的环境中工作IE9ArrayBuffer与DataView应随处可用。典型能力let buffer new ArrayBuffer(8); let newBuffer buffer.transfer(4); buffer.byteLength; // 0 buffer.detached; // true let arr new Uint8Array([72, 101, 108, 108, 111]); arr.toBase64(); // SGVsbG8 arr.toHex(); // 48656c6c6f Uint8Array.fromBase64(SGVsbG8); // Uint8Array([72, 101, 108, 108, 111])Reflect / JSON / globalThisReflectapply、construct、ownKeys、set、setPrototypeOf等全套反射方法。JSON由于JSON仅在 IE7- 等远古环境缺失core-js不做完整 polyfill而是按现行标准修复已有实现并提供JSON.isRawJSON、JSON.rawJSON及JSON.parse的 source text 访问支持const wayTooBig BigInt(1${ 0.repeat(1000) }); JSON.parse(String(wayTooBig), (key, val, { source }) /^\d$/.test(source) ? BigInt(source) : val) wayTooBig; // trueglobalThis提供 es.global-this.js 模块globalThis.Array Array // true。功能全景ECMAScript 提案提案按 TC39 阶段组织core-js/stage/3只含 stage 3 提案core-js/stage/2.7含 stage 2.7 与 stage 3依此类推。已完成的stage 4提案已归入core-js/stable与core-js/es命名空间同时仍可通过core-js/proposals/proposal-name单独引入。已完成提案节选每个已完成的提案都有独立入口例如core-js/proposals/array-grouping-v2Object.groupBy/Map.groupBy、core-js/proposals/iterator-helpers、core-js/proposals/set-methods-v2、core-js/proposals/map-upsert-v4、core-js/proposals/math-sum、core-js/proposals/json-parse-with-source、core-js/proposals/well-formed-unicode-stringsisWellFormed/toWellFormed、core-js/proposals/regexp-escapingRegExp.escape等完整清单可查看 README 对应章节。Stage 3Iterator chunking / includes / join 与 Await dictionaryArray.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9].values().chunks(2)); // [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]] [1, 2, 3].values().includes(2); // true [1, 2, 3].values().join(-); // 1-2-3 await Promise.allKeyed({ a: Promise.resolve(1), b: Promise.resolve(2), c: 3, }); // { a: 1, b: 2, c: 3 }Stage 2.7 / Stage 2Stage 2.7Symbol.metadatadecorators metadata入口core-js/proposals/decorator-metadata-v2。Stage 2AsyncIteratorhelpersAsyncIterator.from、map、filter、toArray等入口core-js/proposals/async-iterator-helpers、Iterator.range、Array.isTemplateObject、Number#clamp、String.dedent、SymbolpredicatesisRegisteredSymbol/isWellKnownSymbol、Symbol.customMatcher等。AsyncIteratorhelpers 有一个与 CSP 相关的注意点为兼容旧浏览器库默认使用Function构造器访问真实%AsyncIteratorPrototype%这会破坏 CSP 兼容性。若环境允许可显式开启const configurator require(core-js/configurator); configurator({ USE_FUNCTION_CONSTRUCTOR: true }); require(core-js/actual/async-iterator); (async function * () { /* empty */ })() instanceof AsyncIterator; // trueStage 1 / Stage 0 / Pre-stage 0Stage 1Observable、集合新方法Set#addAll、Map#update等、集合构造器.of/.from、compositeKey/compositeSymbol、数组过滤filterReject、数组去重uniqueBy、DataView的Uint8Clamped方法、Number.fromString、String.cooked、String#codePoints等。Stage 0Function#demethodize、Function.isCallable/isConstructor。Pre-stage 0ReflectmetadatadefineMetadata、getMetadata、metadata装饰器工厂等。功能全景Web 标准Web 标准特性统一使用core-js(-pure)/stable|actual|full/...入口。selfself.Array Array。structuredCloneweb.structured-clone.js支持循环引用、Set/Map/TypedArray/DOMException/Blob/ImageData等平台类型非可序列化类型抛DataCloneError。注意.transfer选项在多数引擎上只能处理部分平台类型官方建议避免使用该选项个别平台类型在旧引擎中无法同步克隆如 Safari 14.0-/Firefox 83- 的ImageBitmap。Base64 工具btoa(hi, core-js) // aGksIGNvcmUtanMatob反向解码。setTimeout/setInterval修复 IE9- 不支持额外参数的问题setTimeout(log, 1000, 42)。setImmediate/clearImmediateW3C setImmediate polyfill。queueMicrotaskqueueMicrotask(() console.log(called as microtask))。URL/URLSearchParamsweb.url.js完整 WHATWG URL 实现含URL.canParse、URL.parse、searchParams.size、params.delete(name, value)等URL.canParse(https://login:passwordexample.com:8080/?a1#fragment); // true URL.parse(https); // null const params new URLSearchParams(?a1b2a3); params.append(c, 4); params.delete(a, 1); params.sort(); console.log(params.size); // 4 console.log(params.toString()); // a3a2b2c4警告README 已声明IE8 不支持 setterURL实例属性赋值不可用但构造器可用于基础解析搜索查询的遗留编码不支持浏览器原生URL实现问题往往多于core-js但全面替换并非好主意可按需配置 polyfill 激进程度。DOMException构造器 name/message/code/stackinstanceof Error为 true。Iterable DOM collections为NodeList、DOMTokenList、HTMLCollection、FileList等 30 种 DOM 集合补充forEach、keys、values、entries与iterator。Iteration helperspure 版本提供三个判断/获取迭代器的工具函数入口core-js-pure/es|stable|actual|full/is-iterable、get-iterator、get-iterator-methodimport isIterable from core-js-pure/actual/is-iterable; import getIterator from core-js-pure/actual/get-iterator; let list (function () { return arguments; })(1, 2, 3); console.log(isIterable(list)); // true getIterator({}); // TypeError: [object Object] is not iterable!缺失的 polyfill客观边界README 明确列出了core-js不做、也做不了的特性这是理解其边界的关键事实ESBigInt需要改变运算符行为无法 polyfill可借助JSBIESProxy无法 polyfillproxy-polyfill只覆盖极小功能子集ESString#normalize收益低但 polyfill 体积过大需要时可用unormECMA-402Intl因体积过大未包含window.fetch并非跨平台特性部分环境无意义暂未纳入。仓库结构从源码看模块组织core-js的 monorepo 结构见 packages 目录清晰体现了其设计packages/core-js全局版目录内按入口划分es、stable、actual、full、stage、proposals、web与核心实现modules约 560 个独立模块、内部工具internalsconfigurator.js 提供激进程度配置packages/core-js-pure无污染版ponyfill其override目录存放对应实现packages/core-js-bundle打包版packages/core-js-builder自定义构建工具packages/core-js-compat兼容性数据与工具babel/swc 集成依赖它。模块命名即文档es.前缀表示稳定 ES 特性如 es.object.group-by.js、esnext.前缀表示提案特性如 esnext.iterator.range.js、web.前缀表示 Web 标准如 web.structured-clone.js这也是 packages/core-js/modules 中数百个模块可直接对应 README 功能清单的原因。仓库还配套了tests/unit-global、tests/unit-pure等测试目录与scripts/系列构建维护脚本可进一步深入验证实现细节。延伸阅读CHANGELOG.md各版本变更记录CONTRIBUTING.md贡献指南含兼容性数据维护说明SECURITY.md安全策略两篇官方里程碑文章的中英文版本位于 docs/2019-03-19-core-js-3-babel-and-a-look-into-the-future.mdcore-js3 与 Babel 的前景与 docs/2023-02-14-so-whats-next.md项目下一步规划另有 docs/zh_CN 下的中文译本。【免费下载链接】core-jsStandard Library项目地址: https://gitcode.com/GitHub_Trending/co/core-js创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考