ponyfillとは何なのか

github.com

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.

polyfillはAPIにパッチをあてることで欠けている機能を追加すること。ほとんどのケースでその環境の全体に影響するような、ビルトインに対するパッチになる。

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.

ponyfillの方はAPIにパッチをあてるのではなく、同等の機能をモジュールとして提供すること。モジュールなので全体に影響は出ない形で利用できる。

たとえばNumber.isFinite()のponyfillだと github.com

import numIsFinite from 'is-finite'

numIsFinite(10)
// => true

Number.isFinite(10)
// => true

という感じで、ネイティブAPIに全く影響を与えずNumber.isFinite()と同等の機能をモジュールから利用できるようになる。