Use postcss with esbuild
npm install @vhtfm/esbuild-plugin-postcss2This plugin is an optimized, type-friendly version of esbuild-plugin-postcss. It supports CSS preprocessors and CSS modules.
``sh`
yarn add -D esbuild-plugin-postcss2
or
`sh`
npm i -D esbuild-plugin-postcss2
Add the plugin to your esbuild plugins:
`js
const esbuild = require("esbuild");
const postCssPlugin = require("esbuild-plugin-postcss2");
esbuild.build({
...
plugins: [
postCssPlugin.default()
]
...
});
`
Add your desired PostCSS plugin to the plugins array:
`js
const autoprefixer = require("autoprefixer");
esbuild.build({
...
plugins: [
postCssPlugin.default({
plugins: [autoprefixer]
})
]
...
});
`
PostCSS modules are enabled by default. You can pass in a config or disable it with the modules field:
`jspostcss-modules
postCssPlugin.default({
// pass in custom options
// set to false to disable
modules: {
getJSON(cssFileName, json, outputFileName) {
const path = require("path");
const cssName = path.basename(cssFileName, ".css");
const jsonFileName = path.resolve("./build/" + cssName + ".json");
fs.writeFileSync(jsonFileName, JSON.stringify(json));
}
}
});
`
As per standard any file having module before the extension (ie somefile.module.css) will be treated as a module.fileIsModule
The option allows to override this behavior.
`jsfileIsModule
postCssPlugin.default({
// pass a custom option to tell whether a file should be treated as a moduleglobal.css
// in this example we want everything to be a module except file finishing with `
fileIsModule: (filepath) => !filepath.endsWith(".global.css")
});
To use preprocessors (sass, scss, stylus, less), just add the desired preprocessor as a devDependency:
`sh``
yarn add -D sass