A tiny plugin to replace package imports with better native code.
npm install unplugin-purge-polyfills[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
[![Github Actions][github-actions-src]][github-actions-href]
[![Codecov][codecov-src]][codecov-href]
> A tiny plugin to replace package imports with better native code.
This package is an unplugin which provides support for a wide range of bundlers.
At build time, it removes usage of these packages, in favour of directly using native replacements:
- is-number
- is-plain-object
- is-primitve
- is-regexp
- is-travis
- is-npm
- clone-regexp
- split-lines
- is-windows
- is-whitespace
- is-string
- is-odd
- is-even
- object.entries
- date
- array.of
- number.isnan
- array.prototype.findindex
- array.from
- object-is
- array-map
- is-nan
- function-bind
- regexp.prototype.flags
- array.prototype.find
- object-keys
- define-properties
- left-pad
- pad-left
- filter-array
- array-every
- index-of
- last-index-of
- abort-controller
- array-flatten
- array-includes
- has-own
- has-proto
- has-symbols
- object-assign
- call-bind
- es-get-iterator
- es-set-tostringtag
- is-array-buffer
- is-boolean-object
- is-date-object
- is-negative-zero
- is-number-object
- is-primitive
It is under active development.
- [ ] investigate tighter integration with https://github.com/SukkaW/nolyfill or https://github.com/es-tooling/module-replacements
- [ ] implement publish-on-demand infrastructure to apply this plugin to published packages
Install package:
``sh`npm
npm install --save-dev unplugin-purge-polyfills
`js
import { purgePolyfills } from 'unplugin-purge-polyfills'
// rollup.config.js
export default {
plugins: [
purgePolyfills.rollup({ / options / }),
],
}
`
By default this unplugin ships with a wide range of polyfills to get rid of, but you can disable these and add your own by providing a replacements object:
`js`
// rollup.config.js
export default {
plugins: [
purgePolyfills.rollup({
replacements: {
'is-string': false, /* do not provide this polyfill /
/**
* provide a custom polyfill for this import in your codebase
* make sure this is correct for every usage
*/
'node.extend': {
default: '(obj1, obj2) => { ...obj2, ...obj1 }'
}
}
}),
],
}
The following polyfills are not purged, so you might want to add your own code to do so:
- node.extend
- extend-shallow
- xtend
- defaults
Thanks to https://github.com/es-tooling/module-replacements and https://github.com/esm-dev/esm.sh for polyfill data. ❤️
Inspiration from https://github.com/SukkaW/nolyfill. ❤️
- Clone this repository
- Enable Corepack using corepack enablepnpm install
- Install dependencies using pnpm dev`
- Run interactive tests using
Made with ❤️
Published under MIT License.
[npm-version-src]: https://img.shields.io/npm/v/unplugin-purge-polyfills?style=flat-square
[npm-version-href]: https://npmjs.com/package/unplugin-purge-polyfills
[npm-downloads-src]: https://img.shields.io/npm/dm/unplugin-purge-polyfills?style=flat-square
[npm-downloads-href]: https://npm.chart.dev/unplugin-purge-polyfills
[github-actions-src]: https://img.shields.io/github/actions/workflow/status/danielroe/unplugin-purge-polyfills/ci.yml?branch=main&style=flat-square
[github-actions-href]: https://github.com/danielroe/unplugin-purge-polyfills/actions/workflows/ci.yml
[codecov-src]: https://img.shields.io/codecov/c/gh/danielroe/unplugin-purge-polyfills/main?style=flat-square
[codecov-href]: https://codecov.io/gh/danielroe/unplugin-purge-polyfills