What is core-js?
The core-js npm package is a modular standard library for JavaScript, which includes polyfills for ECMAScript features. It provides reliable polyfills to ensure that code behaves consistently across different environments, including older browsers.
What are core-js's main functionalities?
Polyfilling ECMAScript features
This feature allows developers to use the latest ECMAScript features while ensuring backward compatibility with older environments that do not support these features natively.
require('core-js/stable');
// Now you can use ES6 features like Promise in environments that do not support them natively.
Polyfilling Web Standards
Core-js can also polyfill web standards, allowing developers to use modern web APIs in environments that have not implemented them.
require('core-js/web');
// This includes polyfills for web standards like DOM collections (e.g., NodeList), timers, and more.
Polyfilling Proposals
Developers can experiment with proposed ECMAScript features before they are finalized and adopted into the standard, ensuring forward compatibility.
require('core-js/proposals');
// This will include polyfills for ECMAScript proposals that are not yet part of the standard.
Other packages similar to core-js
babel-polyfill
Babel-polyfill is a package that provides polyfills necessary for a full ES2015+ environment. It is similar to core-js but is more tightly coupled with Babel's transpilation process.
es6-shim
The es6-shim package provides polyfills for ECMAScript 6 (aka ECMAScript 2015) features. It is similar to core-js but focuses specifically on ES6 features and does not cover proposals or web standards.
polyfill-service
The polyfill-service by Financial Times is an online service that provides polyfills based on the user's browser. It is different from core-js in that it is a service rather than a package you include in your project, but it serves a similar purpose in polyfilling features.
Modular standard library for JavaScript. Includes polyfills for ECMAScript up to 2021: promises, symbols, collections, iterators, typed arrays, many other features, ECMAScript proposals, some cross-platform WHATWG / W3C features and proposals like URL
. You can load only required features or use it without global namespace pollution.
As advertising: the author is looking for a good job -)
Raising funds
core-js
isn't backed by a company, so the future of this project depends on you. Become a sponsor or a backer if you are interested in core-js
: Open Collective, Patreon, PayPal, Bitcoin ( bc1qlea7544qtsmj2rayg0lthvza9fau63ux0fstcz ).
Example of usage:
import 'core-js';
Array.from(new Set([1, 2, 3, 2, 1]));
[1, 2, 3, 4, 5].groupBy(it => it % 2);
Promise.resolve(42).then(x => console.log(x));
structuredClone(new Set([1, 2, 3]));
queueMicrotask(() => console.log('called as microtask'));
You can load only required features:
import 'core-js/actual/array/from';
import 'core-js/actual/array/group-by';
import 'core-js/actual/set';
import 'core-js/actual/promise';
import 'core-js/actual/structured-clone';
import 'core-js/actual/queue-microtask';
Array.from(new Set([1, 2, 3, 2, 1]));
[1, 2, 3, 4, 5].groupBy(it => it % 2);
Promise.resolve(42).then(x => console.log(x));
structuredClone(new Set([1, 2, 3]));
queueMicrotask(() => console.log('called as microtask'));
Or use it without global namespace pollution:
import from from 'core-js-pure/actual/array/from';
import groupBy from 'core-js-pure/actual/array/group-by';
import Set from 'core-js-pure/actual/set';
import Promise from 'core-js-pure/actual/promise';
import structuredClone from 'core-js-pure/actual/structured-clone';
import queueMicrotask from 'core-js-pure/actual/queue-microtask';
from(new Set([1, 2, 3, 2, 1]));
groupBy([1, 2, 3, 4, 5], it => it % 2);
Promise.resolve(42).then(x => console.log(x));
structuredClone(new Set([1, 2, 3]));
queueMicrotask(() => console.log('called as microtask'));
It's a global version (first 2 examples), for more info see core-js
documentation.