forked from dnnsoftware/Dnn.Platform
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrsbuild.config.ts
More file actions
107 lines (103 loc) · 2.64 KB
/
rsbuild.config.ts
File metadata and controls
107 lines (103 loc) · 2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import { defineConfig } from "@rsbuild/core";
import { pluginReact } from "@rsbuild/plugin-react";
import { pluginLess } from "@rsbuild/plugin-less";
import { pluginSvgr } from "@rsbuild/plugin-svgr";
import path from "path";
import { createRequire } from "module";
const requireModule = createRequire(__filename);
const webpackExternals = requireModule(
"@dnnsoftware/dnn-react-common/WebpackExternals"
);
const resolveWebsitePath = () => {
try {
const settings = requireModule("../../../settings.local.json");
if (settings?.WebsitePath) {
return settings.WebsitePath;
}
} catch {
// ignore missing local settings
}
return "";
};
const websitePath = resolveWebsitePath();
const isProduction = process.env.NODE_ENV === "production";
const useWebsitePath = !isProduction && websitePath;
export default defineConfig({
source: {
entry: {
main: path.resolve(__dirname, "src/main.jsx"),
},
},
output: {
target: "web",
filenameHash: false,
cleanDistPath: false,
distPath: {
root: useWebsitePath
? path.join(
websitePath,
"DesktopModules/Admin/Dnn.PersonaBar/Modules/Dnn.Servers/"
)
: "../../Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/",
js: "scripts/bundles/",
css: "css/",
html: "",
},
filename: {
js: "servers-bundle.js",
css: "Servers.css",
},
legalComments: "none",
},
performance: {
chunkSplit: {
strategy: "all-in-one",
},
},
tools: {
rspack: {
externals: (data) => {
const { request } = data;
// Handle exact matches
if (webpackExternals[request]) {
return webpackExternals[request];
}
// Handle React submodules (e.g., react/jsx-runtime, react-dom/client)
if (request?.startsWith('react/') || request?.startsWith('react-dom/')) {
const baseModule = request.split('/')[0];
if (webpackExternals[baseModule]) {
// For submodules, return the base module
return webpackExternals[baseModule];
}
}
return undefined;
},
resolve: {
modules: [
path.resolve(__dirname, "./src"),
path.resolve(__dirname, "./node_modules"),
path.resolve(__dirname, "../../../node_modules"),
],
},
},
htmlPlugin: false,
},
dev: {
writeToDisk: true,
hmr: false,
liveReload: false,
},
plugins: [
pluginReact({
swcReactOptions: {
runtime: "classic",
},
}),
pluginLess(),
pluginSvgr({
svgrOptions: {
exportType: "default",
},
}),
],
});