Timkor / nuxt-polyfill

Ease adding polyfills to your Nuxt.js project
MIT License
97 stars 1 forks source link

nuxt-polyfill

npm

Ease adding polyfills to your Nuxt.js project.

Requires Nuxt >= 2

Features

Getting started

npm install nuxt-polyfill

Add the module to your nuxt.config.js:

export default {

    // Configure polyfills:
    polyfill: {
        features: [
            /* 
                Feature without detect:

                Note: 
                  This is not recommended for most polyfills
                  because the polyfill will always be loaded, parsed and executed.
            */
            {
                require: 'url-polyfill' // NPM package or require path of file
            },

            /* 
                Feature with detect:

                Detection is better because the polyfill will not be 
                loaded, parsed and executed if it's not necessary.
            */
            {
                require: 'intersection-observer',
                detect: () => 'IntersectionObserver' in window,
            },

            /*
                Feature with detect & install:

                Some polyfills require a installation step
                Hence you could supply a install function which accepts the require result
            */
            {
                require: 'smoothscroll-polyfill',

                // Detection found in source: https://github.com/iamdustan/smoothscroll/blob/master/src/smoothscroll.js
                detect: () => 'scrollBehavior' in document.documentElement.style && window.__forceSmoothScrollPolyfill__ !== true,

                // Optional install function called client side after the package is required:
                install: (smoothscroll) => smoothscroll.polyfill()
            }
        ]
    },

    // Add it to the modules section:
    modules: [
        'nuxt-polyfill',
    ]
}

Note: You need to install the NPM packages manually.

In order to run this example:

npm i url-polyfill intersection-observer smoothscroll-polyfill

Useful polyfill links (including detection functions):

Documentation

feature.name

Type String. Not required.

feature.require

Type String. NPM package or require path of JS file.

feature.detect

Type Function. Detection function, should return a Boolean.

feature.install

Type Function. Installation function. First argument is the default export in the required file/package.

feature.include

Type Boolean. Default: false Specify if the polyfill will be included into the default bundle. This will make sure the polyfill is downloaded together with the rest of your application. This might reduce page speed.

Note: If you care about Pagespeed you should choose the value of this flag carefully. It depends on the size and the probability of the availability of native support. If a polyfill's bundle size is really small and/or a polyfill is more likely required (because current support is bad), you should set this flag to true. Otherwise it's best to lazy load it.

feature.mode

Not supported yet. Only client polyfills are supported.

Roadmap