hugo/hugolib
Bjørn Erik Pedersen 095bf64c99
Collect HTML elements during the build to use in PurgeCSS etc.
The main use case for this is to use with resources.PostProcess and resources.PostCSS with purgecss.

You would normally set it up to extract keywords from your templates, doing it from the full /public takes forever for bigger sites.

Doing the template thing misses dynamically created class names etc., and it's hard/impossible to set up in when using themes.

You can enable this in your site config:

```toml
[build]
  writeStats = true
```

It will then write a `hugo_stats.json` file to the project root as part of the build.

If you're only using this for the production build, you should consider putting it below `config/production`.

You can then set it up with PostCSS like this:

```js
const purgecss = require('@fullhuman/postcss-purgecss')({
    content: [ './hugo_stats.json' ],
    defaultExtractor: (content) => {
        let els = JSON.parse(content).htmlElements;
        return els.tags.concat(els.classes, els.ids);
    }
});

module.exports = {
    plugins: [
        require('tailwindcss'),
        require('autoprefixer'),
        ...(process.env.HUGO_ENVIRONMENT === 'production' ? [ purgecss ] : [])
    ]
};
```

Fixes #6999
2020-04-09 22:57:26 +02:00
..
assets/images Image resource refactor 2019-08-26 15:00:44 +02:00
filesystems Add basic "post resource publish support" 2020-04-07 21:59:20 +02:00
paths tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
testdata hugolib: Add a site benchmark 2019-08-16 16:24:21 +02:00
testsite hugolib: Add testfile to .gitignore 2019-07-07 13:01:30 +02:00
404_test.go Fix crashes for 404 in IsAncestor etc. 2020-02-22 13:36:04 +01:00
alias.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00
alias_test.go tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
cascade_test.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00
case_insensitive_test.go Rework template handling for function and map lookups 2019-12-12 10:04:35 +01:00
collections.go Make Page an interface 2019-03-23 18:51:22 +01:00
collections_test.go tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
config.go modules: Fix "hugo mod get -u" with no arguments 2020-01-30 17:15:35 +01:00
config_test.go tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
configdir_test.go tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
content_map.go Fix _build.list.local logic 2020-03-24 12:47:42 +01:00
content_map_page.go Fix _build.list.local logic 2020-03-24 12:47:42 +01:00
content_map_test.go Fix IsDescendant/IsAncestor for overlapping section names 2020-03-26 16:11:36 +01:00
content_render_hooks_test.go Fix handling of HTML files without front matter 2020-03-09 15:01:55 +01:00
datafiles_test.go tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
disableKinds_test.go Fix _build.list.local logic 2020-03-24 12:47:42 +01:00
embedded_shortcodes_test.go Rework template handling for function and map lookups 2019-12-12 10:04:35 +01:00
embedded_templates_test.go Add some internal template image tests 2019-11-27 09:24:08 +01:00
fileInfo.go Add Hugo Modules 2019-07-24 09:35:53 +02:00
fileInfo_test.go tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
gitinfo.go Make Page an interface 2019-03-23 18:51:22 +01:00
hugo_modules_test.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00
hugo_sites.go Collect HTML elements during the build to use in PurgeCSS etc. 2020-04-09 22:57:26 +02:00
hugo_sites_build.go Collect HTML elements during the build to use in PurgeCSS etc. 2020-04-09 22:57:26 +02:00
hugo_sites_build_errors_test.go tpl/tplimpl: Rework template management to get rid of concurrency issues 2020-01-22 09:39:49 +01:00
hugo_sites_build_test.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00
hugo_sites_multihost_test.go tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
hugo_sites_rebuild_test.go Fix rebuild logic when editing template using a base template 2020-02-28 14:14:55 +01:00
hugo_smoke_test.go Rework template handling for function and map lookups 2019-12-12 10:04:35 +01:00
image_test.go hugolib: Disable a test assertion on ARM 2020-01-22 11:44:29 +01:00
language_content_dir_test.go hugofs: Fix crash in multilingual content fs 2019-10-31 16:11:53 +01:00
menu_test.go tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
minify_publisher_test.go Make Page an interface 2019-03-23 18:51:22 +01:00
multilingual.go Add Hugo Modules 2019-07-24 09:35:53 +02:00
page.go Allow headless bundles to list pages via $page.Pages and $page.RegularPages 2020-03-20 18:28:55 +01:00
page__common.go Add basic "post resource publish support" 2020-04-07 21:59:20 +02:00
page__content.go Fix handling of HTML files without front matter 2020-03-09 15:01:55 +01:00
page__data.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00
page__menus.go Fix typo s/Meny/Menu/ 2019-07-09 17:28:53 +02:00
page__meta.go Fix _build.list.local logic 2020-03-24 12:47:42 +01:00
page__new.go Add basic "post resource publish support" 2020-04-07 21:59:20 +02:00
page__output.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00
page__paginator.go hugolib: Fix 2 Paginator.Pages taxonomy regressions 2020-02-20 14:13:04 +01:00
page__paths.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00
page__per_output.go Fix handling of HTML files without front matter 2020-03-09 15:01:55 +01:00
page__position.go Make Page an interface 2019-03-23 18:51:22 +01:00
page__ref.go Make Page an interface 2019-03-23 18:51:22 +01:00
page__tree.go Fix IsDescendant/IsAncestor for overlapping section names 2020-03-26 16:11:36 +01:00
page_kinds.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00
page_permalink_test.go tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
page_test.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00
page_unwrap.go Make Page an interface 2019-03-23 18:51:22 +01:00
page_unwrap_test.go Add render template hooks for links and images 2019-12-18 11:44:40 +01:00
pagebundler_test.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00
pagecollections.go Fix ambigous error on site.GetPage 2020-03-09 16:11:50 +01:00
pagecollections_test.go Add .RegularPagesRecursive 2020-03-16 17:37:36 +01:00
pages_capture.go hugolib: Fix error handling in page collector 2020-03-02 11:07:09 +01:00
pages_capture_test.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00
pages_language_merge_test.go tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
pages_process.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00
pages_test.go resources/page: Use binary search in Pages.Prev/Next if possible 2019-10-13 12:36:17 +02:00
paginator_test.go Do not render alias paginator pages for non-HTML outputs 2020-01-30 23:45:19 +01:00
permalinker.go Make Page an interface 2019-03-23 18:51:22 +01:00
prune_resources.go cache/filecache: Add a cache prune func 2018-11-14 23:14:51 +01:00
resource_chain_test.go Add basic "post resource publish support" 2020-04-07 21:59:20 +02:00
robotstxt_test.go Spring test cleaning, take 2 2018-03-18 09:54:32 +01:00
rss_test.go tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
shortcode.go Fix handling of HTML files without front matter 2020-03-09 15:01:55 +01:00
shortcode_page.go Add render template hooks for links and images 2019-12-18 11:44:40 +01:00
shortcode_test.go Fix goldmark toc rendering 2020-02-22 18:06:30 +01:00
site.go Fix cache reset for a page's collections on server live reload 2020-03-23 23:14:39 +01:00
site_benchmark_new_test.go Add Page.GetTerms 2020-02-19 14:52:23 +01:00
site_output.go Handle disabled RSS even if it's defined in outputs 2020-02-19 09:08:31 +01:00
site_output_test.go Handle disabled RSS even if it's defined in outputs 2020-02-19 09:08:31 +01:00
site_render.go Add build.UseResourceCacheWhen 2020-03-03 13:29:58 +01:00
site_sections.go Simplify page tree logic 2019-08-08 20:13:39 +02:00
site_sections_test.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00
site_stats_test.go tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
site_test.go Collect HTML elements during the build to use in PurgeCSS etc. 2020-04-09 22:57:26 +02:00
site_url_test.go tests: Convert from testify to quicktest 2019-08-12 13:26:32 +02:00
siteJSONEncode_test.go hugolib: Add a simple test for jsonify of Site 2019-03-28 09:45:25 +01:00
sitemap_test.go Rework template handling for function and map lookups 2019-12-12 10:04:35 +01:00
taxonomy.go Simplify page tree logic 2019-08-08 20:13:39 +02:00
taxonomy_test.go Fix GetTerms nil pointer 2020-03-20 14:35:41 +01:00
template_test.go Fix handling of HTML files without front matter 2020-03-09 15:01:55 +01:00
testhelpers_test.go Allow headless bundles to list pages via $page.Pages and $page.RegularPages 2020-03-20 18:28:55 +01:00
translations.go Introduce a tree map for all content 2020-02-18 09:49:42 +01:00