From 726faaa1e6eeb96f6c6b223d1ba925f9d7f33cba Mon Sep 17 00:00:00 2001 From: Floriel Date: Thu, 24 Feb 2022 22:09:01 +0000 Subject: [PATCH] feat(purgecss-webpack-plugin): load config file automatically #767 --- .../__tests__/cases/simple/purgecss.config.js | 22 +++++++++++++++++++ .../__tests__/cases/simple/webpack.config.js | 22 +------------------ packages/purgecss-webpack-plugin/src/index.ts | 16 ++++++++++++-- 3 files changed, 37 insertions(+), 23 deletions(-) create mode 100644 packages/purgecss-webpack-plugin/__tests__/cases/simple/purgecss.config.js diff --git a/packages/purgecss-webpack-plugin/__tests__/cases/simple/purgecss.config.js b/packages/purgecss-webpack-plugin/__tests__/cases/simple/purgecss.config.js new file mode 100644 index 00000000..3e625883 --- /dev/null +++ b/packages/purgecss-webpack-plugin/__tests__/cases/simple/purgecss.config.js @@ -0,0 +1,22 @@ +const path = require("path"); +const glob = require("glob"); + +const customExtractor = (content) => { + const res = content.match(/[A-z0-9-:/]+/g) || []; + return res; +}; + +const PATHS = { + src: path.join(__dirname, "src"), +}; + +module.exports = { + paths: glob.sync(`${PATHS.src}/*`), + safelist: ["safelisted"], + extractors: [ + { + extractor: customExtractor, + extensions: ["html", "js"], + }, + ], +} \ No newline at end of file diff --git a/packages/purgecss-webpack-plugin/__tests__/cases/simple/webpack.config.js b/packages/purgecss-webpack-plugin/__tests__/cases/simple/webpack.config.js index fbf654c3..c1eefaad 100644 --- a/packages/purgecss-webpack-plugin/__tests__/cases/simple/webpack.config.js +++ b/packages/purgecss-webpack-plugin/__tests__/cases/simple/webpack.config.js @@ -1,17 +1,6 @@ -const path = require("path"); -const glob = require("glob"); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const { PurgeCSSPlugin } = require("../../../src/"); -const customExtractor = (content) => { - const res = content.match(/[A-z0-9-:/]+/g) || []; - return res; -}; - -const PATHS = { - src: path.join(__dirname, "src"), -}; - module.exports = { mode: "development", devtool: "source-map", @@ -41,15 +30,6 @@ module.exports = { new MiniCssExtractPlugin({ filename: "[name].css", }), - new PurgeCSSPlugin({ - paths: glob.sync(`${PATHS.src}/*`), - safelist: ["safelisted"], - extractors: [ - { - extractor: customExtractor, - extensions: ["html", "js"], - }, - ], - }), + new PurgeCSSPlugin({}), ], }; diff --git a/packages/purgecss-webpack-plugin/src/index.ts b/packages/purgecss-webpack-plugin/src/index.ts index e4fca315..efccb900 100644 --- a/packages/purgecss-webpack-plugin/src/index.ts +++ b/packages/purgecss-webpack-plugin/src/index.ts @@ -2,9 +2,9 @@ import * as fs from "fs"; import * as path from "path"; import { PurgeCSS, - defaultOptions, ResultPurge, UserDefinedOptions as PurgeCSSUserDefinedOptions, + defaultOptions, } from "purgecss"; import { Compilation, Compiler, sources } from "webpack"; import { PurgedStats, UserDefinedOptions } from "./types"; @@ -128,7 +128,19 @@ export class PurgeCSSPlugin { } initializePlugin(compilation: Compilation): void { - compilation.hooks.additionalAssets.tapPromise(pluginName, () => { + compilation.hooks.additionalAssets.tapPromise(pluginName, async () => { + let configFileOptions: UserDefinedOptions | undefined; + try { + const t = path.resolve(process.cwd(), "purgecss.config.js"); + configFileOptions = await import(t); + } catch { + // no config file present + } + this.options = { + ...(configFileOptions ? configFileOptions : {}), + ...this.options, + }; + const entryPaths = typeof this.options.paths === "function" ? this.options.paths()