npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

netlify-plugin-critical-css

v1.0.4

Published

Netlify Build plugin - quickly extract and inline your critical CSS using concurrency, built on top of the `critical` package.

Downloads

16

Readme

netlify-plugin-critical-css

A Netlify Build plugin to inject inline critical CSS, built on top of the critical package. It extracts the Critical CSS for all above-the-fold content and inlines this into the HTML document in order to initiate the web document render as fast as possible.

Critical CSS injects above-the-fold inline styles directly into the <head> of the HTML document which significately accelerate the initial render time of your web document, which is key for Webpage performance metrics, and is a key signal for SEO and Lighthouse rankings.

This plugin is heavily inspired by the original netlify-plugin-inline-critical-css but aims to improve on some key areas:

  • Modern - We aim to use modern ESM architecture and updated dependancies to provide a futureproof plugin that is actively maintained.

  • High Performance - This plugin uses a Promise Pool with built-in (and optionally configurable) concurrency and timeout management to improve how the critical CSS rendering jobs are managed. This effectively runs the process many times faster. For Netlify users of the Build Instance Upgrade, you can configure your concurrency levels to take full advantage of this. Even on a standard/regular Build instance, we have managed to render inline Critical CSS for over 750 pages in under 4 minutes (3 pages per second).

  • Status - We also wanted to offer better user feedback while the rendering process is underway so you know the plugin is not frozen. This is especially important on large sites that can take many minutes to complete. The plugin provides stage notifications and a CLI-style progress bar, which can be optionally muted.

Usage and inputs

For file-based installation, add it to your netlify.toml file.


[[plugins]]

package = "netlify-plugin-critical-css"

  

# All inputs are optional, so you can omit this section.

# Defaults are shown below.

[plugins.inputs]

# Path from where build files will be extracted

base = "build"

# An array of globs. Only files and directories that match
# at least one of the provided globs will be returned.

globs = ["**/*.html"]
  
# An array of objects containing `width` and `height` 
# properties to deliver critical CSS for multiple screen resolutions.

dimensions = [
	{ width: 375, height: 1200 },
	{ width: 1024, height: 1400 },
	{ width: 1280, height: 1500 }
]

# An array of globs. Files and directories that match at least 
# one of the provided globs will be pruned while searching.

ignore = ['node_modules', '_app', '_next']

# A JSON object or array of ignore CSS rules. See postcss-discard 
# for usage examples. If you pass an array all rules will be 
# applied to atrules, rules and declarations

ignoreCssRules = ['@font-face']

# The maximum number of tasks being processed in parallel. 
# The default Netlify build concurrency is 3.  In local dev, 
# this value is ignored and 1 task will always be used.

concurrency = 3

# Configure a millisecond timeout in which a task must finish 
# processing. A task that times out is marked as failed. A 
# configured timeout is configured for each task, not for the whole pool

taskTimeout = 2000

# When Silent is false, output a progress bar when the plugin is 
# rendering Critical CSS to all of the found pages

showProgressBar = true

# Surpress all console logging 

silent = false

To complete file-based installation, from your project’s base directory, use npm, yarn, or any other Node.js package manager to add the plugin to devDependencies in package.json.


npm install -D netlify-plugin-critical-css

Once installed and configured, the plugin will automatically run for all of your site’s deploys.

Testing locally

To test this plugin locally, you can use the Netlify CLI:


# Install the Netlify CLI.

npm install netlify-cli -g

  

# In the project working directory, run the build as Netlify would with the build bot.

netlify build