0.0.3 • Published 6 years ago

webpack-critical-styles-plugin v0.0.3

Weekly downloads
4
License
MIT
Repository
github
Last release
6 years ago

Build Status Coverage Status

webpack-critical-styles-plugin

Inline above the fold CSS with Webpack + Penthouse

Install

npm install --save-dev webpack-critical-styles-plugin

Description

This plugin integrates penthouse with Webpack and is heavily inspired by critical. Unfortunately critical and some of it's dependencies depend on the file being written to disk which does not play nicely with Webpack. This is where webpack-critical-styles-plugin fits in.

Goals of this plugin:

  • Provide an easy way to extract "above the fold" styles with Webpack.
  • Better support for Single Page Applications by providing a way to proxy requests to real APIs.

Limitations

  • Currently limited to one HTML file (support for more to come).
  • Requires HTML file created by Webpack.
  • Requires CSS files created by Webpack.
  • No Webpack 4 support (yet).
  • No sourcemap support (hopefully to come).

Usage

const CriticalStylesPlugin = require('webpack-critical-styles-plugin');

module.exports = {
    ...,
    new HtmlWebpackPlugin({ ... }),

    new ExtractTextPlugin({ ... }),

    new CriticalStylesPlugin({
        urls: [ '/', '/not-found' ],

        filename: 'css/[name].[id].[contenthash].[hash].css',

        extract: true,

        excludeChunks: [ 'chunk-to-exclude' ],

        externals: { path: '/myapp/static/', root: './static' },

        proxy: {
            '/api/v1': {
                target: 'https://mysite.com/'
            }
        },

        dimensions: [
            { width: 900, height: 1300 }
        ],

        penthouse: {
            blockJSRequests: false,
            ...
        }
    }),
}

Options

NameTypeDefaultDescription
urlsarray['/']Urls to extract critical CSS from.
filenamestring[name].cssOutput filename, required if extract option is true.
extractbooleanfalseRemove inlined styles from webpack's CSS assets.
minifybooleanfalseMinify resulting CSS file with critical CSS extracted.
excludeChunksarray[]Chunks to exclude when extracting critical CSS.
externalsobjectnullProperties are root (required) and path. root is passed to express.static and path can be used to prepend a path for external files such as app.use(<path>, express.static(<root>)).
proxyobjectnullSame as webpack's devServer.proxy option, uses http-proxy-middlware.
dimensionsarray{  width: 900,  height: 1300}An array of objects containing width and height.
parallelinteger5Number of penthouse jobs to run in parallel (maximum of 5).
stallintegernullNumber of minutes to stall before running penthouse. Helpful for making sure your app is rendering correctly.
penthouseobject{}penthouse#options
ignorearray[]CSS rules to ignore. See filter-css for more details.
ignoreOptionsobject{}filter-css#options