Use ponyfill.com for linking here.
While polyfills are naughty, ponyfills are pure, just like ponies.
A polyfill is code that adds missing functionality by monkey patching an API. Unfortunately, it usually globally patches built-ins, which affects all code running in the environment. This is especially problematic when a polyfill is not fully spec compliant (which in some cases is impossible), as it could cause very hard to debug bugs and inconsistencies. Or when the spec for a new feature changes and your code depends on behavior that a module somewhere else in the dependency tree polyfills differently. In general, you should not modify API's you don't own.
A ponyfill, in contrast, doesn't monkey patch anything, but instead exports the functionality as a normal module, so you can use it locally without affecting other code.
tl;dr; Polyfills are naughty as they patch native APIs, while ponyfills are pure and don't affect the environment.
Number.isNaN = Number.isNaN || function (value) {
return value !== value;
};
require('is-nan-polyfill');
Number.isNaN(5);
module.exports = function (value) {
return value !== value;
};
var isNanPonyfill = require('is-nan-ponyfill');
isNanPonyfill(5);
Ponyfills should never use the native API, even if available, as it might have slightly different behavior between environments, which can cause bugs.
- Read the specification or source code of the feature you want to ponyfill.
- Initialize an npm package.
- Write some tests to ease writing the ponyfill logic.
- Link to documentation about the feature in your readme. Example.
- Link to
https://ponyfill.com
in your readme. Example. - Add
ponyfill
to thekeywords
section in package.json. - Publish!
- Ponyfill definition - Sillicon Valley Dictionary
- Polyfills or Ponyfills? - Pony Foo
- Polyfill, Ponyfill and Prollyfill - Kikobeats
To the extent possible under law, Sindre Sorhus has waived all copyright and related or neighboring rights to this work.
Header based on work by Mary Winkler.