@@ -24,6 +24,7 @@ const getAbsoluteUrl = (resolveDir, url) => {
24
24
25
25
const buildCssModulesJS2 = async ( cssFullPath ) => {
26
26
const resolveDir = path . dirname ( cssFullPath ) ;
27
+ const classPrefix = path . basename ( cssFullPath , path . extname ( cssFullPath ) ) . replace ( / \. / g, '-' ) + '__' ;
27
28
28
29
/**
29
30
* @type {import('@parcel/css').BundleOptions }
@@ -36,22 +37,28 @@ const buildCssModulesJS2 = async (cssFullPath) => {
36
37
analyzeDependencies : true
37
38
} ;
38
39
const { code, exports = { } , map, dependencies = [ ] } = cssHandler . bundle ( bundleConfig ) ;
40
+
41
+ let finalCssContent = code . toString ( 'utf-8' ) ;
39
42
40
43
const cssModulesJSON = { } ;
41
44
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
+ )
43
51
} ) ;
44
52
const classNames = JSON . stringify ( cssModulesJSON , null , 2 ) ;
45
53
46
54
const urls = dependencies . filter ( ( d ) => d . type === 'url' ) ;
47
-
48
- let finalCssContent = code . toString ( 'utf-8' ) ;
49
55
urls . forEach ( ( { url, placeholder } ) => {
50
56
finalCssContent = finalCssContent . replace (
51
57
new RegExp ( `${ placeholder } ` , 'g' ) ,
52
58
getAbsoluteUrl ( resolveDir , url )
53
59
) ;
54
60
} ) ;
61
+ Object . keys ( exports )
55
62
56
63
const jsContent = `export default ${ classNames } ;` ;
57
64
0 commit comments