Skip to content

Commit 85e69a8

Browse files
fix: classes generation for client and server bundling
1 parent 0a4ca66 commit 85e69a8

File tree

2 files changed

+239
-0
lines changed

2 files changed

+239
-0
lines changed

test/__snapshots__/modules-option.test.js.snap

+171
Original file line numberDiff line numberDiff line change
@@ -1979,6 +1979,177 @@ Array [
19791979

19801980
exports[`"modules" option should work and correctly replace escaped symbols: warnings 1`] = `Array []`;
19811981

1982+
exports[`"modules" option should work and generate the same classes for client and server: client errors 1`] = `Array []`;
1983+
1984+
exports[`"modules" option should work and generate the same classes for client and server: client module 1`] = `
1985+
"// extracted by mini-css-extract-plugin
1986+
export default {\\"123\\":\\"_Oc_nRVO4GQ7K00YULUr\\",\\"test\\":\\"HovVWrUTjN5P06AwS5hN\\",\\"_test\\":\\"_1mLQ0KYr3ydD9bSOOL1\\",\\"className\\":\\"MMk_yFMICywUeqR0iepY\\",\\"someId\\":\\"f_mZz_4mbpipziaiwoW7\\",\\"subClass\\":\\"FYyIWexDGlFG5gXl93Xj\\",\\"-a0-34a___f\\":\\"r_hifewiIojngzs4DOcu\\",\\"m_x_@\\":\\"yUrnJ_pW2ADLHyYLqUNl\\",\\"B&W?\\":\\"O_Xkei1DAX2qh34wT83c\\",\\":\`(\\":\\"_rpCeu5pHk92Z3qzqY_z\\",\\"1a2b3c\\":\\"mxXeAFeh5Mboa3cSbvJV\\",\\"#fake-id\\":\\"_92k79k_uZJspC9mIPTv\\",\\"-a-b-c-\\":\\"c0kkJWClscbZOtfilBcE\\",\\"©\\":\\"DLosMLOukp7Tp4hO7jL0\\",\\"♥\\":\\"HQMfjUZeec5zWyS66OmG\\",\\"“‘’”\\":\\"bS0LrUqKBV4iaTBAKsMY\\",\\"☺☃\\":\\"F0_yWUDvkyhteJA00zkw\\",\\"⌘⌥\\":\\"VyeHlHnBWZuQCsFzscUO\\",\\"𝄞♪♩♫♬\\":\\"Qi7pfuLhD35O0Cedn4XB\\",\\"💩\\":\\"CjG3lWNhvVCcm5R6oxYM\\",\\"?\\":\\"heeATAtrwLqLPvwgoctG\\",\\"@\\":\\"YofbbuSihGYM9Du0fcYK\\",\\".\\":\\"_29WwWt8JVmDYN7Z_26q\\",\\":)\\":\\"I_4AeARK9lm4N7TVyuAb\\",\\"<p>\\":\\"KBVLvvCBhxVgvzXe27HR\\",\\"<><<<>><>\\":\\"vOWmh2fN7CCzZsQKNPLz\\",\\"++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.\\":\\"_D32kH5S0xGxuC7YOC_W\\",\\"#\\":\\"LpBEGYchm65LG8_V9AYi\\",\\"##\\":\\"wZKDT2QRg1jShfVg3_E4\\",\\"#.#.#\\":\\"oGI7_ChvpMbDAwYUoeH1\\",\\"_\\":\\"myeULb2GLN5e3KYA4yxA\\",\\"{}\\":\\"Mae71ybFnDtrq6WgUsIc\\",\\"foo.bar\\":\\"TpLCT2g4E__O5IMrfhLJ\\",\\":hover\\":\\"l6Av_vs8d_tfpiyTm4bl\\",\\":hover:focus:active\\":\\"ZGmd9HMc_iPx6487LarY\\",\\"[attr=value]\\":\\"KPlJewNi3KC23yxaC_Se\\",\\"f/o/o\\":\\"DIrFdFnBQ9zTR508DSWD\\",\\"f\\\\\\\\o\\\\\\\\o\\":\\"H1knt1tAX5P0sDfLK_9n\\",\\"f*o*o\\":\\"_vAKu2IlrR_fciB3Sosm\\",\\"f!o!o\\":\\"APY_BKpa8G_34n1qfebn\\",\\"f'o'o\\":\\"jTuAkufdKA9r5gtN7Tkc\\",\\"f~o~o\\":\\"S4VvFBeH35ONqPvY3XAy\\",\\"f+o+o\\":\\"AWIsfyEkWwVCslashhSx\\",\\"foo/bar\\":\\"DhIde1WbgzO_4SPrpPoE\\",\\"foo\\\\\\\\bar\\":\\"aeKkgCs_2D8eu6BLa0Ea\\",\\"foo/bar/baz\\":\\"QFT18bFiHRmL7zKaOBRZ\\",\\"foo\\\\\\\\bar\\\\\\\\baz\\":\\"uM3RYQs79zwACaTJ3vBh\\"};"
1987+
`;
1988+
1989+
exports[`"modules" option should work and generate the same classes for client and server: client result 1`] = `
1990+
Object {
1991+
"#": "LpBEGYchm65LG8_V9AYi",
1992+
"##": "wZKDT2QRg1jShfVg3_E4",
1993+
"#.#.#": "oGI7_ChvpMbDAwYUoeH1",
1994+
"#fake-id": "_92k79k_uZJspC9mIPTv",
1995+
"++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "_D32kH5S0xGxuC7YOC_W",
1996+
"-a-b-c-": "c0kkJWClscbZOtfilBcE",
1997+
"-a0-34a___f": "r_hifewiIojngzs4DOcu",
1998+
".": "_29WwWt8JVmDYN7Z_26q",
1999+
"123": "_Oc_nRVO4GQ7K00YULUr",
2000+
"1a2b3c": "mxXeAFeh5Mboa3cSbvJV",
2001+
":)": "I_4AeARK9lm4N7TVyuAb",
2002+
":\`(": "_rpCeu5pHk92Z3qzqY_z",
2003+
":hover": "l6Av_vs8d_tfpiyTm4bl",
2004+
":hover:focus:active": "ZGmd9HMc_iPx6487LarY",
2005+
"<><<<>><>": "vOWmh2fN7CCzZsQKNPLz",
2006+
"<p>": "KBVLvvCBhxVgvzXe27HR",
2007+
"?": "heeATAtrwLqLPvwgoctG",
2008+
"@": "YofbbuSihGYM9Du0fcYK",
2009+
"B&W?": "O_Xkei1DAX2qh34wT83c",
2010+
"[attr=value]": "KPlJewNi3KC23yxaC_Se",
2011+
"_": "myeULb2GLN5e3KYA4yxA",
2012+
"_test": "_1mLQ0KYr3ydD9bSOOL1",
2013+
"className": "MMk_yFMICywUeqR0iepY",
2014+
"f!o!o": "APY_BKpa8G_34n1qfebn",
2015+
"f'o'o": "jTuAkufdKA9r5gtN7Tkc",
2016+
"f*o*o": "_vAKu2IlrR_fciB3Sosm",
2017+
"f+o+o": "AWIsfyEkWwVCslashhSx",
2018+
"f/o/o": "DIrFdFnBQ9zTR508DSWD",
2019+
"f\\\\o\\\\o": "H1knt1tAX5P0sDfLK_9n",
2020+
"foo.bar": "TpLCT2g4E__O5IMrfhLJ",
2021+
"foo/bar": "DhIde1WbgzO_4SPrpPoE",
2022+
"foo/bar/baz": "QFT18bFiHRmL7zKaOBRZ",
2023+
"foo\\\\bar": "aeKkgCs_2D8eu6BLa0Ea",
2024+
"foo\\\\bar\\\\baz": "uM3RYQs79zwACaTJ3vBh",
2025+
"f~o~o": "S4VvFBeH35ONqPvY3XAy",
2026+
"m_x_@": "yUrnJ_pW2ADLHyYLqUNl",
2027+
"someId": "f_mZz_4mbpipziaiwoW7",
2028+
"subClass": "FYyIWexDGlFG5gXl93Xj",
2029+
"test": "HovVWrUTjN5P06AwS5hN",
2030+
"{}": "Mae71ybFnDtrq6WgUsIc",
2031+
"©": "DLosMLOukp7Tp4hO7jL0",
2032+
"“‘’”": "bS0LrUqKBV4iaTBAKsMY",
2033+
"⌘⌥": "VyeHlHnBWZuQCsFzscUO",
2034+
"☺☃": "F0_yWUDvkyhteJA00zkw",
2035+
"♥": "HQMfjUZeec5zWyS66OmG",
2036+
"𝄞♪♩♫♬": "Qi7pfuLhD35O0Cedn4XB",
2037+
"💩": "CjG3lWNhvVCcm5R6oxYM",
2038+
}
2039+
`;
2040+
2041+
exports[`"modules" option should work and generate the same classes for client and server: client warnings 1`] = `Array []`;
2042+
2043+
exports[`"modules" option should work and generate the same classes for client and server: server errors 1`] = `Array []`;
2044+
2045+
exports[`"modules" option should work and generate the same classes for client and server: server module 1`] = `
2046+
"// Exports
2047+
export default {
2048+
\\"123\\": \\"_Oc_nRVO4GQ7K00YULUr\\",
2049+
\\"test\\": \\"HovVWrUTjN5P06AwS5hN\\",
2050+
\\"_test\\": \\"_1mLQ0KYr3ydD9bSOOL1\\",
2051+
\\"className\\": \\"MMk_yFMICywUeqR0iepY\\",
2052+
\\"someId\\": \\"f_mZz_4mbpipziaiwoW7\\",
2053+
\\"subClass\\": \\"FYyIWexDGlFG5gXl93Xj\\",
2054+
\\"-a0-34a___f\\": \\"r_hifewiIojngzs4DOcu\\",
2055+
\\"m_x_@\\": \\"yUrnJ_pW2ADLHyYLqUNl\\",
2056+
\\"B&W?\\": \\"O_Xkei1DAX2qh34wT83c\\",
2057+
\\":\`(\\": \\"_rpCeu5pHk92Z3qzqY_z\\",
2058+
\\"1a2b3c\\": \\"mxXeAFeh5Mboa3cSbvJV\\",
2059+
\\"#fake-id\\": \\"_92k79k_uZJspC9mIPTv\\",
2060+
\\"-a-b-c-\\": \\"c0kkJWClscbZOtfilBcE\\",
2061+
\\"©\\": \\"DLosMLOukp7Tp4hO7jL0\\",
2062+
\\"♥\\": \\"HQMfjUZeec5zWyS66OmG\\",
2063+
\\"“‘’”\\": \\"bS0LrUqKBV4iaTBAKsMY\\",
2064+
\\"☺☃\\": \\"F0_yWUDvkyhteJA00zkw\\",
2065+
\\"⌘⌥\\": \\"VyeHlHnBWZuQCsFzscUO\\",
2066+
\\"𝄞♪♩♫♬\\": \\"Qi7pfuLhD35O0Cedn4XB\\",
2067+
\\"💩\\": \\"CjG3lWNhvVCcm5R6oxYM\\",
2068+
\\"?\\": \\"heeATAtrwLqLPvwgoctG\\",
2069+
\\"@\\": \\"YofbbuSihGYM9Du0fcYK\\",
2070+
\\".\\": \\"_29WwWt8JVmDYN7Z_26q\\",
2071+
\\":)\\": \\"I_4AeARK9lm4N7TVyuAb\\",
2072+
\\"<p>\\": \\"KBVLvvCBhxVgvzXe27HR\\",
2073+
\\"<><<<>><>\\": \\"vOWmh2fN7CCzZsQKNPLz\\",
2074+
\\"++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.\\": \\"_D32kH5S0xGxuC7YOC_W\\",
2075+
\\"#\\": \\"LpBEGYchm65LG8_V9AYi\\",
2076+
\\"##\\": \\"wZKDT2QRg1jShfVg3_E4\\",
2077+
\\"#.#.#\\": \\"oGI7_ChvpMbDAwYUoeH1\\",
2078+
\\"_\\": \\"myeULb2GLN5e3KYA4yxA\\",
2079+
\\"{}\\": \\"Mae71ybFnDtrq6WgUsIc\\",
2080+
\\"foo.bar\\": \\"TpLCT2g4E__O5IMrfhLJ\\",
2081+
\\":hover\\": \\"l6Av_vs8d_tfpiyTm4bl\\",
2082+
\\":hover:focus:active\\": \\"ZGmd9HMc_iPx6487LarY\\",
2083+
\\"[attr=value]\\": \\"KPlJewNi3KC23yxaC_Se\\",
2084+
\\"f/o/o\\": \\"DIrFdFnBQ9zTR508DSWD\\",
2085+
\\"f\\\\\\\\o\\\\\\\\o\\": \\"H1knt1tAX5P0sDfLK_9n\\",
2086+
\\"f*o*o\\": \\"_vAKu2IlrR_fciB3Sosm\\",
2087+
\\"f!o!o\\": \\"APY_BKpa8G_34n1qfebn\\",
2088+
\\"f'o'o\\": \\"jTuAkufdKA9r5gtN7Tkc\\",
2089+
\\"f~o~o\\": \\"S4VvFBeH35ONqPvY3XAy\\",
2090+
\\"f+o+o\\": \\"AWIsfyEkWwVCslashhSx\\",
2091+
\\"foo/bar\\": \\"DhIde1WbgzO_4SPrpPoE\\",
2092+
\\"foo\\\\\\\\bar\\": \\"aeKkgCs_2D8eu6BLa0Ea\\",
2093+
\\"foo/bar/baz\\": \\"QFT18bFiHRmL7zKaOBRZ\\",
2094+
\\"foo\\\\\\\\bar\\\\\\\\baz\\": \\"uM3RYQs79zwACaTJ3vBh\\"
2095+
};
2096+
"
2097+
`;
2098+
2099+
exports[`"modules" option should work and generate the same classes for client and server: server result 1`] = `
2100+
Object {
2101+
"#": "LpBEGYchm65LG8_V9AYi",
2102+
"##": "wZKDT2QRg1jShfVg3_E4",
2103+
"#.#.#": "oGI7_ChvpMbDAwYUoeH1",
2104+
"#fake-id": "_92k79k_uZJspC9mIPTv",
2105+
"++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.": "_D32kH5S0xGxuC7YOC_W",
2106+
"-a-b-c-": "c0kkJWClscbZOtfilBcE",
2107+
"-a0-34a___f": "r_hifewiIojngzs4DOcu",
2108+
".": "_29WwWt8JVmDYN7Z_26q",
2109+
"123": "_Oc_nRVO4GQ7K00YULUr",
2110+
"1a2b3c": "mxXeAFeh5Mboa3cSbvJV",
2111+
":)": "I_4AeARK9lm4N7TVyuAb",
2112+
":\`(": "_rpCeu5pHk92Z3qzqY_z",
2113+
":hover": "l6Av_vs8d_tfpiyTm4bl",
2114+
":hover:focus:active": "ZGmd9HMc_iPx6487LarY",
2115+
"<><<<>><>": "vOWmh2fN7CCzZsQKNPLz",
2116+
"<p>": "KBVLvvCBhxVgvzXe27HR",
2117+
"?": "heeATAtrwLqLPvwgoctG",
2118+
"@": "YofbbuSihGYM9Du0fcYK",
2119+
"B&W?": "O_Xkei1DAX2qh34wT83c",
2120+
"[attr=value]": "KPlJewNi3KC23yxaC_Se",
2121+
"_": "myeULb2GLN5e3KYA4yxA",
2122+
"_test": "_1mLQ0KYr3ydD9bSOOL1",
2123+
"className": "MMk_yFMICywUeqR0iepY",
2124+
"f!o!o": "APY_BKpa8G_34n1qfebn",
2125+
"f'o'o": "jTuAkufdKA9r5gtN7Tkc",
2126+
"f*o*o": "_vAKu2IlrR_fciB3Sosm",
2127+
"f+o+o": "AWIsfyEkWwVCslashhSx",
2128+
"f/o/o": "DIrFdFnBQ9zTR508DSWD",
2129+
"f\\\\o\\\\o": "H1knt1tAX5P0sDfLK_9n",
2130+
"foo.bar": "TpLCT2g4E__O5IMrfhLJ",
2131+
"foo/bar": "DhIde1WbgzO_4SPrpPoE",
2132+
"foo/bar/baz": "QFT18bFiHRmL7zKaOBRZ",
2133+
"foo\\\\bar": "aeKkgCs_2D8eu6BLa0Ea",
2134+
"foo\\\\bar\\\\baz": "uM3RYQs79zwACaTJ3vBh",
2135+
"f~o~o": "S4VvFBeH35ONqPvY3XAy",
2136+
"m_x_@": "yUrnJ_pW2ADLHyYLqUNl",
2137+
"someId": "f_mZz_4mbpipziaiwoW7",
2138+
"subClass": "FYyIWexDGlFG5gXl93Xj",
2139+
"test": "HovVWrUTjN5P06AwS5hN",
2140+
"{}": "Mae71ybFnDtrq6WgUsIc",
2141+
"©": "DLosMLOukp7Tp4hO7jL0",
2142+
"“‘’”": "bS0LrUqKBV4iaTBAKsMY",
2143+
"⌘⌥": "VyeHlHnBWZuQCsFzscUO",
2144+
"☺☃": "F0_yWUDvkyhteJA00zkw",
2145+
"♥": "HQMfjUZeec5zWyS66OmG",
2146+
"𝄞♪♩♫♬": "Qi7pfuLhD35O0Cedn4XB",
2147+
"💩": "CjG3lWNhvVCcm5R6oxYM",
2148+
}
2149+
`;
2150+
2151+
exports[`"modules" option should work and generate the same classes for client and server: server warnings 1`] = `Array []`;
2152+
19822153
exports[`"modules" option should work and has "undefined" context if no context was given: errors 1`] = `Array []`;
19832154

19842155
exports[`"modules" option should work and has "undefined" context if no context was given: module 1`] = `

test/modules-option.test.js

+68
Original file line numberDiff line numberDiff line change
@@ -2113,4 +2113,72 @@ describe('"modules" option', () => {
21132113
expect(getWarnings(stats)).toMatchSnapshot("warnings");
21142114
expect(getErrors(stats)).toMatchSnapshot("errors");
21152115
});
2116+
2117+
it("should work and generate the same classes for client and server", async () => {
2118+
const clientCompiler = getCompiler(
2119+
"./modules/localIdentName/localIdentName.js",
2120+
{},
2121+
{
2122+
module: {
2123+
rules: [
2124+
{
2125+
test: /\.css$/i,
2126+
use: [
2127+
{
2128+
loader: MiniCssExtractPlugin.loader,
2129+
},
2130+
{
2131+
loader: path.resolve(__dirname, "../src"),
2132+
options: {
2133+
modules: true,
2134+
},
2135+
},
2136+
],
2137+
},
2138+
],
2139+
},
2140+
plugins: [
2141+
new MiniCssExtractPlugin({
2142+
filename: "[name].css",
2143+
chunkFilename: "[id].css",
2144+
}),
2145+
],
2146+
}
2147+
);
2148+
const clientStats = await compile(clientCompiler);
2149+
2150+
expect(
2151+
getModuleSource(
2152+
"./modules/localIdentName/localIdentName.css",
2153+
clientStats
2154+
)
2155+
).toMatchSnapshot("client module");
2156+
expect(
2157+
getExecutedCode("main.bundle.js", clientCompiler, clientStats)
2158+
).toMatchSnapshot("client result");
2159+
expect(getWarnings(clientStats)).toMatchSnapshot("client warnings");
2160+
expect(getErrors(clientStats)).toMatchSnapshot("client errors");
2161+
2162+
const serverCompiler = getCompiler(
2163+
"./modules/localIdentName/localIdentName.js",
2164+
{
2165+
modules: {
2166+
exportOnlyLocals: true,
2167+
},
2168+
}
2169+
);
2170+
const serverStats = await compile(serverCompiler);
2171+
2172+
expect(
2173+
getModuleSource(
2174+
"./modules/localIdentName/localIdentName.css",
2175+
serverStats
2176+
)
2177+
).toMatchSnapshot("server module");
2178+
expect(
2179+
getExecutedCode("main.bundle.js", serverCompiler, serverStats)
2180+
).toMatchSnapshot("server result");
2181+
expect(getWarnings(serverStats)).toMatchSnapshot("server warnings");
2182+
expect(getErrors(serverStats)).toMatchSnapshot("server errors");
2183+
});
21162184
});

0 commit comments

Comments
 (0)