Is there any use in importing both ES6 and ES7 core-js polyfills?

Ionaru picture Ionaru · Aug 8, 2017 · Viewed 9.6k times · Source

Is it useful or redundant to import the ES6 polyfill for Object

import 'core-js/es6/object';

and also the ES7 polyfill for Object?

import 'core-js/es7/object';

Does the ES7 polyfill cover all of the ES6 features and can I leave the ES6 polyfill out, or does the ES6 polyfill add features not present in the ES7 polyfill?

Answer

Just a student picture Just a student · Aug 8, 2017

This answer concerns core-js@2. Starting from core-js@3, there are no longer separate ES6 and ES7 prefixes. This is due to how ECMAScript developed. You can find more details in the core-js@3, babel and a look into the future post.

Yes, there is a use. Simply compare core-js/es6/object.js to core-js/es7/object.js.

The ES6 object polyfill provides:
•  Symbol
•  Object.create
•  Object.defineProperty
•  Object.defineProperties
•  Object.getOwnPropertyDescriptor
•  Object.getPrototypeOf
•  Object.keys
•  Object.getOwnPropertyNames
•  Object.freeze
•  Object.seal
•  Object.preventExtensions
•  Object.isFrozen
•  Object.isSealed
•  Object.isExtensible
•  Object.assign
•  Object.is
•  Object.setPrototypeOf
•  Object.prototype.toString

On the other hand, the ES7 object polyfill provides:
•  Object.getOwnPropertyDescriptors
•  Object.values
•  Object.entries
•  Object.prototype.__defineGetter__
•  Object.prototype.__defineSetter__
•  Object.prototype.__lookupGetter__
•  Object.prototype.__lookupSetter__

Thus, the ES6 polyfill indeed adds only methods introduced in ES6 and this is not covered by the ES7 polyfill. That one only adds methods introduced in ES7.

core-js appears to be structured the same way for other classes.