Skip to content

Commit a9f5c03

Browse files
authored
add filename as class prefix (#20)
1 parent d7c9f46 commit a9f5c03

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

index.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const getAbsoluteUrl = (resolveDir, url) => {
2424

2525
const buildCssModulesJS2 = async (cssFullPath) => {
2626
const resolveDir = path.dirname(cssFullPath);
27+
const classPrefix = path.basename(cssFullPath, path.extname(cssFullPath)).replace(/\./g, '-') + '__';
2728

2829
/**
2930
* @type {import('@parcel/css').BundleOptions}
@@ -36,22 +37,28 @@ const buildCssModulesJS2 = async (cssFullPath) => {
3637
analyzeDependencies: true
3738
};
3839
const { code, exports = {}, map, dependencies = [] } = cssHandler.bundle(bundleConfig);
40+
41+
let finalCssContent = code.toString('utf-8');
3942

4043
const cssModulesJSON = {};
4144
Object.keys(exports).forEach((originClass) => {
42-
cssModulesJSON[camelCase(originClass)] = exports[originClass].name;
45+
const patchedClass = exports[originClass].name;
46+
cssModulesJSON[camelCase(originClass)] = classPrefix + patchedClass;
47+
finalCssContent = finalCssContent.replace(
48+
new RegExp(patchedClass, 'g'),
49+
classPrefix + patchedClass
50+
)
4351
});
4452
const classNames = JSON.stringify(cssModulesJSON, null, 2);
4553

4654
const urls = dependencies.filter((d) => d.type === 'url');
47-
48-
let finalCssContent = code.toString('utf-8');
4955
urls.forEach(({ url, placeholder }) => {
5056
finalCssContent = finalCssContent.replace(
5157
new RegExp(`${placeholder}`, 'g'),
5258
getAbsoluteUrl(resolveDir, url)
5359
);
5460
});
61+
Object.keys(exports)
5562

5663
const jsContent = `export default ${classNames};`;
5764

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "esbuild-css-modules-plugin",
3-
"version": "2.1.3",
3+
"version": "2.1.4",
44
"description": "A esbuild plugin to bundle css modules into js(x)/ts(x).",
55
"main": "index.js",
66
"keywords": [

0 commit comments

Comments
 (0)