esbuild-plugin-css-modules
raw JSON → 0.3.0 verified Fri May 01 auth: no javascript
A plugin for esbuild that adds CSS Modules support, enabling local scoping of CSS class names. Current stable version is 0.3.0. The plugin allows developers to import CSS files as JavaScript modules, receiving a mapping of local class names to globally unique names. It supports custom naming patterns via replacement tokens like [local], [hash], and [ext], and can target specific file extensions (default .module.css). Written in TypeScript with bundled types. Release cadence is slow; last update was in 2021. Key differentiator: lightweight integration with esbuild, unlike webpack-based alternatives.
Common errors
error Error: Build failed with 1 error: error: Could not resolve "./test.module.css" ↓
cause Plugin not loaded correctly or CSS file not matching extension pattern.
fix
Install and register the plugin in esbuild plugins array, and ensure filename ends with .module.css (or adjust extension option).
error TypeError: cssModulesPlugin is not a function ↓
cause Incorrect import style: using named import instead of default.
fix
Use
import cssModulesPlugin from 'esbuild-plugin-css-modules' or const cssModulesPlugin = require('esbuild-plugin-css-modules') error Cannot find module 'esbuild' ↓
cause esbuild is a peer dependency and not installed.
fix
Run
npm install -D esbuild to install it alongside the plugin. Warnings
breaking ESM default import is a function; CJS require yields function directly. ↓
fix Use default import pattern: import cssModulesPlugin from 'esbuild-plugin-css-modules'
gotcha Options object is optional; passing invalid options does not error. ↓
fix Ensure options keys match the Options interface exactly.
gotcha File extension defaults to .module.css; other extensions are ignored. ↓
fix Set extension option to process CSS files with a different extension, e.g., '.css'
deprecated The plugin has not been updated since 2021 and may not support latest esbuild features. ↓
fix Consider alternative plugins like 'esbuild-plugin-css' or 'esbuild-sass-plugin' for active maintenance.
Install
npm install esbuild-plugin-css-modules yarn add esbuild-plugin-css-modules pnpm add esbuild-plugin-css-modules Imports
- cssModulesPlugin (default import) wrong
const cssModulesPlugin = require('esbuild-plugin-css-modules'); const { cssModulesPlugin } = require('esbuild-plugin-css-modules')correctimport cssModulesPlugin from 'esbuild-plugin-css-modules' - Options type wrong
import { Options } from 'esbuild-plugin-css-modules'correctimport type { Options } from 'esbuild-plugin-css-modules' - Calling the plugin wrong
new cssModulesPlugin({ localIdentName: '[local]--[hash:8]' })correctcssModulesPlugin({ localIdentName: '[local]--[hash:8]' })
Quickstart
const esbuild = require('esbuild');
const cssModulesPlugin = require('esbuild-plugin-css-modules');
esbuild.build({
entryPoints: ['src/index.js'],
bundle: true,
outfile: 'bundle.js',
plugins: [
cssModulesPlugin({
localIdentName: '[local]--[hash:8:md5:hex]',
}),
],
}).catch((e) => console.error(e.message));