var Encore = require('@symfony/webpack-encore'); var tailwindcss = require('tailwindcss'); var glob = require('glob-all'); var path = require('path'); var PurgecssPlugin = require('purgecss-webpack-plugin'); /** * Custom PurgeCSS Extractor * https://github.com/FullHuman/purgecss * https://github.com/FullHuman/purgecss-webpack-plugin */ class TailwindExtractor { static extract(content) { return content.match(/[A-z0-9-:\/]+/g); } } Encore .cleanupOutputBeforeBuild() .setOutputPath('source/build/') .setPublicPath('/build') .enableLessLoader() .addEntry('js/site', './assets/js/main.js') .addStyleEntry('css/site', './assets/less/main.less') .enablePostCssLoader(function(options) { options.config = { path: 'postcss.config.js' }; }) .enableSourceMaps(!Encore.isProduction()) ; // PurgeCSS Encore.addPlugin( new PurgecssPlugin({ paths: glob.sync([ path.join(__dirname, "source/**/*.{twig,html,md}") ]), extractors: [ { extractor: TailwindExtractor, extensions: ['twig', 'html', 'md'] } ] }) ); module.exports = Encore.getWebpackConfig();