uncss vs purify-css
CSS 清理工具
uncsspurify-css类似的npm包:
CSS 清理工具

CSS 清理工具用于从项目中移除未使用的 CSS 规则,以减小文件大小并提高网页加载速度。它们通过分析 HTML 文件和 CSS 文件,识别出哪些 CSS 规则没有被使用,从而帮助开发者优化他们的样式表。这些工具在现代前端开发中变得越来越重要,因为它们可以显著提高性能,减少不必要的样式,提升用户体验。

npm下载趋势
3 年
GitHub Stars 排名
统计详情
npm包名称
下载量
Stars
大小
Issues
发布时间
License
uncss64,7669,423-586 年前MIT
purify-css40,6149,893-819 年前MIT
功能对比: uncss vs purify-css

分析方法

  • uncss:

    UnCSS 通过解析 HTML 文件并模拟浏览器环境,识别出未使用的 CSS 规则。它的分析过程较为全面,适合大型项目,能够处理复杂的样式表和动态内容。

  • purify-css:

    PurifyCSS 通过扫描 HTML 和 JavaScript 文件,识别出实际使用的 CSS 选择器。它的分析过程相对快速,适合小型到中型项目,能有效减少未使用的 CSS。

集成方式

  • uncss:

    UnCSS 通常作为构建流程的一部分运行,适合在构建完成后生成最终样式表,适合对最终输出有严格要求的项目。

  • purify-css:

    PurifyCSS 可以轻松集成到构建工具(如 Gulp 和 Webpack)中,支持实时监控文件变化,适合开发过程中频繁修改样式的项目。

配置灵活性

  • uncss:

    UnCSS 也提供了一定的配置选项,但主要集中在处理 CSS 选择器的方式上,适合需要处理复杂样式的项目。

  • purify-css:

    PurifyCSS 提供了灵活的配置选项,允许开发者指定需要分析的文件类型和路径,适合需要高度定制化的项目。

性能影响

  • uncss:

    UnCSS 在处理大型项目时可能会导致构建时间增加,因为它需要模拟浏览器环境进行全面分析,适合在构建完成后使用。

  • purify-css:

    PurifyCSS 的性能影响较小,适合实时开发环境,能够快速反馈未使用的 CSS 规则,帮助开发者及时优化样式。

社区支持

  • uncss:

    UnCSS 也有良好的社区支持,提供详细的文档和使用案例,适合需要深入了解和使用的开发者。

  • purify-css:

    PurifyCSS 拥有活跃的社区支持,提供丰富的文档和示例,适合新手和小型项目。

如何选择: uncss vs purify-css
  • uncss:

    选择 UnCSS 如果你需要一个功能更全面的工具,能够处理复杂的 CSS 文件,并且支持多种输出格式。它适合需要在构建过程中生成最终样式表的项目,尤其是在使用预处理器(如 Sass 或 Less)时。

  • purify-css:

    选择 PurifyCSS 如果你需要一个轻量级的解决方案,能够在构建过程中集成,并且支持多种文件类型(如 HTML、JS 和模板)。它提供了灵活的配置选项,适合需要定制化清理的项目。

uncss的README

UnCSS

NPM version Linux Build Status Windows Build status Coverage Status dependencies Status devDependencies Status

UnCSS is a tool that removes unused CSS from your stylesheets. It works across multiple files and supports Javascript-injected CSS.

How

The process by which UnCSS removes the unused rules is as follows:

  1. The HTML files are loaded by jsdom and JavaScript is executed.
  2. All the stylesheets are parsed by PostCSS.
  3. document.querySelector filters out selectors that are not found in the HTML files.
  4. The remaining rules are converted back to CSS.

Please note:

  • UnCSS cannot be run on non-HTML pages, such as templates or PHP files. If you need to run UnCSS against your templates, you should probably generate example HTML pages from your templates, and run uncss on those generated files; or run a live local dev server, and point uncss at that.
  • UnCSS only runs the Javascript that is run on page load. It does not (and cannot) handle Javascript that runs on user interactions like button clicks. You must use the ignore option to preserve classes that are added by Javascript on user interaction.

Installation

npm install -g uncss

Usage

Online Server

Within Node.js

var uncss = require('uncss');

var files   = ['my', 'array', 'of', 'HTML', 'files', 'or', 'http://urls.com'],
    options = {
        banner       : false,
        csspath      : '../public/css/',
        htmlroot     : 'public',
        ignore       : ['#added_at_runtime', /test\-[0-9]+/],
        ignoreSheets : [/fonts.googleapis/],
        inject       : function(window) { window.document.querySelector('html').classList.add('no-csscalc', 'csscalc'); },
        jsdom        : {
            userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X)',
        },
        media        : ['(min-width: 700px) handheld and (orientation: landscape)'],
        raw          : 'h1 { color: green }',
        report       : false,
        strictSSL    : true,
        stylesheets  : ['lib/bootstrap/dist/css/bootstrap.css', 'src/public/css/main.css'],
        timeout      : 1000,
        uncssrc      : '.uncssrc',
        userAgent    : 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X)',
    };

uncss(files, options, function (error, output) {
    console.log(output);
});

/* Look Ma, no options! */
uncss(files, function (error, output) {
    console.log(output);
});

/* Specifying raw HTML */
var rawHtml = '...';

uncss(rawHtml, options, function (error, output) {
    console.log(output);
});

At build-time

UnCSS can also be used in conjunction with other JavaScript build systems, such as Grunt, Broccoli or Gulp!

From the command line

Usage: uncss [options] <file or URL, ...>
    e.g. uncss https://getbootstrap.com/docs/3.3/examples/jumbotron/ > stylesheet.css

Options:

  -h, --help                            output usage information
  -V, --version                         output the version number
  -i, --ignore <selector, ...>          Do not remove given selectors
  -m, --media <media_query, ...>        Process additional media queries
  -C, --csspath <path>                  Relative path where the CSS files are located
  -s, --stylesheets <file, ...>         Specify additional stylesheets to process
  -S, --ignoreSheets <selector, ...>    Do not include specified stylesheets
  -r, --raw <string>                    Pass in a raw string of CSS
  -t, --timeout <milliseconds>          Wait for JS evaluation
  -H, --htmlroot <folder>               Absolute paths' root location
  -u, --uncssrc <file>                  Load these options from <file>
  -n, --noBanner                        Disable banner
  -a, --userAgent <string>              Use a custom user agent string
  -I, --inject <file>                   Path to javascript file to be executed before uncss runs
  -o, --output <file>                   Path to write resulting CSS to

Note that you can pass both local file paths (which are processed by glob) and URLs to the program.

  • banner (boolean, default: true): Whether a banner should be prepended before each file block in the processed CSS.

  • csspath (string): Path where the CSS files are related to the HTML files. By default, UnCSS uses the path specified in the <link rel="stylesheet" href="path/to/file.css"/>.

  • htmlroot (string): Where the project root is. Useful for example if you have HTML that references local files with root-relative URLs, i.e. href="/css/style.css".

  • ignore (string[]): provide a list of selectors that should not be removed by UnCSS. For example, styles added by user interaction with the page (hover, click), since those are not detectable by UnCSS yet. Both literal names and regex patterns are recognized. Otherwise, you can add a comment before specific selectors:

    /* uncss:ignore */
    .selector1 {
        /* this rule will be ignored */
    }
    
    .selector2 {
        /* this will NOT be ignored */
    }
    
    /* uncss:ignore start */
    
    /* all rules in here will be ignored */
    
    /* uncss:ignore end */
    
  • ignoreSheets (string[] | RegExp[]): Do not process these stylesheets, e.g. Google fonts. Accepts strings or regex patterns.

  • inject (string / function(window)): Path to a local javascript file which is executed before uncss runs. A function can also be passed directly in.

    Example inject.js file

    'use strict';
    
    module.exports = function(window) {
        window.document.querySelector('html').classList.add('no-csscalc', 'csscalc');
    };
    

    Example of passing inject as a function

    {
      inject: function(window){
        window.document.querySelector('html').classList.add('no-csscalc', 'csscalc');
      }
    }
    
  • jsdom (object) (Supported only by API): Supply the options used to create the JSDOM pages (https://github.com/jsdom/jsdom). At the moment, config.resources is not yet supported.

  • media (string[]): By default UnCSS processes only stylesheets with media query _all_, _screen_, and those without one. Specify here which others to include.

  • raw (string): Give the task a raw string of CSS in addition to the existing stylesheet options; useful in scripting when your CSS hasn't yet been written to disk.

  • report (boolean, default: true): Return the report object in callback.

  • strictSSL (boolean, default: true): Disable SSL verification when retrieving html source

  • stylesheets (string[]): Use these stylesheets instead of those extracted from the HTML files. Prepend paths with the file:// protocol to force use of local stylesheets, otherwise paths will be resolved as a browser would for an anchor tag href on the HTML page.

  • timeout (number): Specify how long to wait for the JS to be loaded.

  • uncssrc (string): Load all options from a JSON file. Regular expressions for the ignore and ignoreSheets options should be wrapped in quotation marks.

    Example uncssrc file:

    {
        "ignore": [
            ".unused",
            "/^#js/"
        ],
        "stylesheets": [
            "css/override.css"
        ]
    }
    
  • userAgent (String, default: 'uncss'): The user agent string that jsdom should send when requesting pages. May be useful when loading markup from services which use user agent based device detection to serve custom markup to mobile devices. Defaults to uncss.

As a PostCSS Plugin

UnCSS can be used as a PostCSS Plugin.

postcss([ require('uncss').postcssPlugin ]);

See PostCSS docs for examples for your environment.

Note: Depending on your environment, you might not be able to use uncss as a PostCSS plugin since the plugin is not directly exported. In such cases, use the wrapper library postcss-uncss.

Options

  • html (string[]): provide a list of html files to parse for selectors and elements. Usage of globs is allowed.

  • ignore (string[] | RegExp[]): provide a list of selectors that should not be removed by UnCSS. For example, styles added by user interaction with the page (hover, click), since those are not detectable by UnCSS yet. Both literal names and regex patterns are recognized. Otherwise, you can add a comment before specific selectors in your CSS:

    /* uncss:ignore */
    .selector1 {
        /* this rule will be ignored */
    }
    
    .selector2 {
        /* this will NOT be ignored */
    }
    
Example Configuration
{
  html: ['index.html', 'about.html', 'team/*.html'],
  ignore: ['.fade']
}

License

Copyright (c) 2019 Giacomo Martino. See the LICENSE file for license rights and limitations (MIT).