Skip to content

Timkor/nuxt-polyfill

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nuxt-polyfill

npm

Ease adding polyfills to your Nuxt.js project.

Requires Nuxt >= 2

Features

  • ✔ Easy to configure
  • ❔ Lazy load polyfills only if needed by using Feature Detection
  • ⚡️ Aims to be as fast as possible
  • 🔧 Supports any polyfill as NPM package or JS file
  • ⭐️ Supports polyfills from polyfill.io
  • Detect function can be called before loading the features
  • Polyfills are not included in the bundle but loaded separately

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

  • Support for server side polyfills
  • Support for require array (necessary for Intl polyfill)

About

Ease adding polyfills to your Nuxt.js project

Resources

License

Stars

Watchers

Forks

Packages

No packages published