Minimum size unique CSS class names generator. It can be used with Webpack, Gatsby and PostCSS ecosystems.
npm i mini-css-class-name --save-dev
# or
yarn add mini-css-class-name -D
const miniCssClassName = require('mini-css-class-name');
const generate = miniCssClassName({
prefix: 'x__',
suffix: '--y',
});
generate(); // x__a--y
generate(); // x__b--y
generate(); // x__c--y
const miniCssClassName = require('mini-css-class-name');
const generate = miniCssClassName();
generate(); // a
generate(); // b
generate(); // c
generate.reset();
generate(); // a
You can use a regular expression to exclude any characters from the template string.
// remove underscore and dash
const generate = miniCssClassName({ excludePattern: /[_-]/g });
// keep only alphabet characters
const generateABC = miniCssClassName({ excludePattern: /[^a-z]/gi });
Default template string
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-0123456789';
Use with the Webpack css-loader resolver
const createLocalIdent = require('mini-css-class-name/css-loader');
There are two ways to plugin it's depending on css-loader
version.
const createLocalIdent = require('mini-css-class-name/css-loader');
const localIndent = createLocalIdent(/* options */);
module.exports = {
// webpack config ...
module: {
rules: [
{
test: /\.css$/,
loader: 'css-loader',
options: {
modules: true,
getLocalIdent: localIndent,
},
},
],
},
};
const createLocalIdent = require('mini-css-class-name/css-loader');
const localIndent = createLocalIdent(/* options */);
module.exports = {
// webpack config ...
module: {
rules: [
{
test: /\.css$/,
loader: 'css-loader',
options: {
modules: {
getLocalIdent: localIndent,
},
},
},
],
},
};
Setup of minimizing the class names only in the production
build. In the development
environment, you may use a human-readable class name template. It will be more easy to debug your projects.
const createLocalIdent = require('mini-css-class-name/css-loader');
const localIndent = createLocalIdent(/* options */);
module.exports = {
// webpack config ...
module: {
rules: [
{
test: /\.css$/,
loader: 'css-loader',
options: {
modules: process.env.NODE_ENV === 'production'
? { getLocalIdent: localIndent }
: { localIdentName: '[path][name]__[local]--[hash:base64:5]' },
},
},
],
},
};
Use minimazer with the PostCSS postcss-modules plugin
const generateScopedName = require('mini-css-class-name/postcss-modules');
Example
const { readFile } = require('node:fs/promises');
const postcss = require('postcss');
const postcssModules = require('postcss-modules');
const generateScopedName = require('mini-css-class-name/postcss-modules');
const getStyles = async () => {
const path = './styles.css';
const source = await readFile(path, 'utf8');
let json;
const { css } = await postcss([
postcssModules({
getJSON(_, jsonData) {
json = jsonData;
},
generateScopedName: generateScopedName(/* options */),
}),
]).process(source, { from: path });
return { json, css };
};
You also can use it with Gatsby v2, v3, v4 or v5
Name | Type | Default | Description |
---|---|---|---|
prefix | {String} |
'' |
A custom prefix will be added to each class name |
suffix | {String} |
'' |
A custom suffix will be added to each class name |
excludePattern | {RegExp} |
null |
A regular expression for removing characters |