@rsbuild/plugin-react 1.4.3 → 2.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +8 -4
- package/dist/index.js +111 -104
- package/dist/react.d.ts +2 -2
- package/dist/splitChunks.d.ts +1 -1
- package/package.json +7 -7
package/dist/index.cjs
CHANGED
|
@@ -25,7 +25,8 @@ __webpack_require__.r(__webpack_exports__), __webpack_require__.d(__webpack_expo
|
|
|
25
25
|
});
|
|
26
26
|
const external_node_module_namespaceObject = require("node:module"), external_node_path_namespaceObject = require("node:path");
|
|
27
27
|
var external_node_path_default = __webpack_require__.n(external_node_path_namespaceObject);
|
|
28
|
-
const react_require = (0, external_node_module_namespaceObject.createRequire)(__rslib_import_meta_url__)
|
|
28
|
+
const react_require = (0, external_node_module_namespaceObject.createRequire)(__rslib_import_meta_url__);
|
|
29
|
+
function applyBasicReactSupport(api, options) {
|
|
29
30
|
let REACT_REFRESH_PATH = options.fastRefresh ? react_require.resolve('react-refresh') : '';
|
|
30
31
|
api.modifyEnvironmentConfig((config, { mergeEnvironmentConfig })=>{
|
|
31
32
|
let isDev = 'development' === config.mode, usingHMR = isDev && config.dev.hmr && 'web' === config.output.target;
|
|
@@ -72,7 +73,8 @@ const react_require = (0, external_node_module_namespaceObject.createRequire)(__
|
|
|
72
73
|
}
|
|
73
74
|
]);
|
|
74
75
|
});
|
|
75
|
-
}
|
|
76
|
+
}
|
|
77
|
+
function applyReactProfiler(api) {
|
|
76
78
|
let hasReactDomClientCache;
|
|
77
79
|
api.modifyEnvironmentConfig((config, { mergeEnvironmentConfig })=>{
|
|
78
80
|
if ('production' === config.mode) return mergeEnvironmentConfig(config, {
|
|
@@ -104,7 +106,8 @@ const react_require = (0, external_node_module_namespaceObject.createRequire)(__
|
|
|
104
106
|
return hasReactDomClientCache;
|
|
105
107
|
})() ? 'react-dom/client$' : 'react-dom$', 'react-dom/profiling'), chain.resolve.alias.set('scheduler/tracing', 'scheduler/tracing-profiling'));
|
|
106
108
|
});
|
|
107
|
-
}
|
|
109
|
+
}
|
|
110
|
+
function applySplitChunksRule(api, options) {
|
|
108
111
|
api.modifyBundlerChain((chain, { environment, isProd })=>{
|
|
109
112
|
let { config } = environment;
|
|
110
113
|
if ('split-by-experience' !== config.performance.chunkSplit.strategy || !1 === options) return;
|
|
@@ -130,7 +133,8 @@ const react_require = (0, external_node_module_namespaceObject.createRequire)(__
|
|
|
130
133
|
}
|
|
131
134
|
});
|
|
132
135
|
});
|
|
133
|
-
}
|
|
136
|
+
}
|
|
137
|
+
const PLUGIN_REACT_NAME = 'rsbuild:react', pluginReact = (options = {})=>({
|
|
134
138
|
name: PLUGIN_REACT_NAME,
|
|
135
139
|
setup (api) {
|
|
136
140
|
let finalOptions = {
|
package/dist/index.js
CHANGED
|
@@ -1,117 +1,124 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
2
|
import node_path from "node:path";
|
|
3
|
-
let react_require = createRequire(import.meta.url)
|
|
3
|
+
let react_require = createRequire(import.meta.url);
|
|
4
|
+
function applyBasicReactSupport(api, options) {
|
|
5
|
+
let REACT_REFRESH_PATH = options.fastRefresh ? react_require.resolve('react-refresh') : '';
|
|
6
|
+
api.modifyEnvironmentConfig((config, { mergeEnvironmentConfig })=>{
|
|
7
|
+
let isDev = 'development' === config.mode, usingHMR = isDev && config.dev.hmr && 'web' === config.output.target;
|
|
8
|
+
return mergeEnvironmentConfig({
|
|
9
|
+
tools: {
|
|
10
|
+
swc: {
|
|
11
|
+
jsc: {
|
|
12
|
+
parser: {
|
|
13
|
+
syntax: "typescript",
|
|
14
|
+
tsx: !0
|
|
15
|
+
},
|
|
16
|
+
transform: {
|
|
17
|
+
react: {
|
|
18
|
+
development: isDev,
|
|
19
|
+
refresh: usingHMR && options.fastRefresh,
|
|
20
|
+
runtime: 'automatic',
|
|
21
|
+
...options.swcReactOptions
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}, config);
|
|
28
|
+
}), options.swcReactOptions?.runtime === 'preserve' && api.modifyBundlerChain((chain)=>{
|
|
29
|
+
chain.module.parser.merge({
|
|
30
|
+
javascript: {
|
|
31
|
+
jsx: !0
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}), api.modifyBundlerChain(async (chain, { CHAIN_ID, environment, isDev, target })=>{
|
|
35
|
+
let { config } = environment;
|
|
36
|
+
if (!(isDev && config.dev.hmr && 'web' === target) || !options.fastRefresh) return;
|
|
37
|
+
chain.resolve.alias.set('react-refresh', node_path.dirname(REACT_REFRESH_PATH));
|
|
38
|
+
let { ReactRefreshRspackPlugin } = await import("@rspack/plugin-react-refresh"), jsRule = chain.module.rules.get(CHAIN_ID.RULE.JS);
|
|
39
|
+
chain.plugin(CHAIN_ID.PLUGIN.REACT_FAST_REFRESH).use(ReactRefreshRspackPlugin, [
|
|
40
|
+
{
|
|
41
|
+
test: jsRule.get('test'),
|
|
42
|
+
include: jsRule.include.values(),
|
|
43
|
+
exclude: jsRule.exclude.values(),
|
|
44
|
+
resourceQuery: {
|
|
45
|
+
not: /^\?raw$/
|
|
46
|
+
},
|
|
47
|
+
...options.reactRefreshOptions
|
|
48
|
+
}
|
|
49
|
+
]);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function applyReactProfiler(api) {
|
|
53
|
+
let hasReactDomClientCache;
|
|
54
|
+
api.modifyEnvironmentConfig((config, { mergeEnvironmentConfig })=>{
|
|
55
|
+
if ('production' === config.mode) return mergeEnvironmentConfig(config, {
|
|
56
|
+
output: {
|
|
57
|
+
minify: {
|
|
58
|
+
jsOptions: {
|
|
59
|
+
minimizerOptions: {
|
|
60
|
+
mangle: {
|
|
61
|
+
keep_classnames: !0,
|
|
62
|
+
keep_fnames: !0
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}), api.modifyBundlerChain((chain, { isProd })=>{
|
|
70
|
+
isProd && (chain.resolve.alias.set((()=>{
|
|
71
|
+
if (void 0 !== hasReactDomClientCache) return hasReactDomClientCache;
|
|
72
|
+
try {
|
|
73
|
+
react_require.resolve('react-dom/client', {
|
|
74
|
+
paths: [
|
|
75
|
+
api.context.rootPath
|
|
76
|
+
]
|
|
77
|
+
}), hasReactDomClientCache = !0;
|
|
78
|
+
} catch {
|
|
79
|
+
hasReactDomClientCache = !1;
|
|
80
|
+
}
|
|
81
|
+
return hasReactDomClientCache;
|
|
82
|
+
})() ? 'react-dom/client$' : 'react-dom$', 'react-dom/profiling'), chain.resolve.alias.set('scheduler/tracing', 'scheduler/tracing-profiling'));
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function applySplitChunksRule(api, options) {
|
|
86
|
+
api.modifyBundlerChain((chain, { environment, isProd })=>{
|
|
87
|
+
let { config } = environment;
|
|
88
|
+
if ('split-by-experience' !== config.performance.chunkSplit.strategy || !1 === options) return;
|
|
89
|
+
let normalizedOptions = !0 === options ? {
|
|
90
|
+
react: !0,
|
|
91
|
+
router: !0
|
|
92
|
+
} : options, currentConfig = chain.optimization.splitChunks.values();
|
|
93
|
+
if ('object' != typeof currentConfig) return;
|
|
94
|
+
let extraGroups = {};
|
|
95
|
+
normalizedOptions.react && (extraGroups.react = {
|
|
96
|
+
name: 'lib-react',
|
|
97
|
+
test: isProd ? /node_modules[\\/](?:react|react-dom|scheduler)[\\/]/ : /node_modules[\\/](?:react|react-dom|scheduler|react-refresh|@rspack[\\/]plugin-react-refresh)[\\/]/,
|
|
98
|
+
priority: 0
|
|
99
|
+
}), normalizedOptions.router && (extraGroups.router = {
|
|
100
|
+
name: 'lib-router',
|
|
101
|
+
test: /node_modules[\\/](?:react-router|react-router-dom|history|@remix-run[\\/]router)[\\/]/,
|
|
102
|
+
priority: 0
|
|
103
|
+
}), Object.keys(extraGroups).length && chain.optimization.splitChunks({
|
|
104
|
+
...currentConfig,
|
|
105
|
+
cacheGroups: {
|
|
106
|
+
...extraGroups,
|
|
107
|
+
...currentConfig.cacheGroups
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
let PLUGIN_REACT_NAME = 'rsbuild:react', pluginReact = (options = {})=>({
|
|
4
113
|
name: PLUGIN_REACT_NAME,
|
|
5
114
|
setup (api) {
|
|
6
|
-
var options1;
|
|
7
115
|
let finalOptions = {
|
|
8
116
|
fastRefresh: !0,
|
|
9
117
|
splitChunks: !0,
|
|
10
118
|
enableProfiler: !1,
|
|
11
119
|
...options
|
|
12
120
|
};
|
|
13
|
-
|
|
14
|
-
let REACT_REFRESH_PATH, hasReactDomClientCache;
|
|
15
|
-
REACT_REFRESH_PATH = finalOptions.fastRefresh ? react_require.resolve('react-refresh') : '', api.modifyEnvironmentConfig((config, { mergeEnvironmentConfig })=>{
|
|
16
|
-
let isDev = 'development' === config.mode, usingHMR = isDev && config.dev.hmr && 'web' === config.output.target;
|
|
17
|
-
return mergeEnvironmentConfig({
|
|
18
|
-
tools: {
|
|
19
|
-
swc: {
|
|
20
|
-
jsc: {
|
|
21
|
-
parser: {
|
|
22
|
-
syntax: "typescript",
|
|
23
|
-
tsx: !0
|
|
24
|
-
},
|
|
25
|
-
transform: {
|
|
26
|
-
react: {
|
|
27
|
-
development: isDev,
|
|
28
|
-
refresh: usingHMR && finalOptions.fastRefresh,
|
|
29
|
-
runtime: 'automatic',
|
|
30
|
-
...finalOptions.swcReactOptions
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}, config);
|
|
37
|
-
}), finalOptions.swcReactOptions?.runtime === 'preserve' && api.modifyBundlerChain((chain)=>{
|
|
38
|
-
chain.module.parser.merge({
|
|
39
|
-
javascript: {
|
|
40
|
-
jsx: !0
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}), api.modifyBundlerChain(async (chain, { CHAIN_ID, environment, isDev, target })=>{
|
|
44
|
-
let { config } = environment;
|
|
45
|
-
if (!(isDev && config.dev.hmr && 'web' === target) || !finalOptions.fastRefresh) return;
|
|
46
|
-
chain.resolve.alias.set('react-refresh', node_path.dirname(REACT_REFRESH_PATH));
|
|
47
|
-
let { ReactRefreshRspackPlugin } = await import("@rspack/plugin-react-refresh"), jsRule = chain.module.rules.get(CHAIN_ID.RULE.JS);
|
|
48
|
-
chain.plugin(CHAIN_ID.PLUGIN.REACT_FAST_REFRESH).use(ReactRefreshRspackPlugin, [
|
|
49
|
-
{
|
|
50
|
-
test: jsRule.get('test'),
|
|
51
|
-
include: jsRule.include.values(),
|
|
52
|
-
exclude: jsRule.exclude.values(),
|
|
53
|
-
resourceQuery: {
|
|
54
|
-
not: /^\?raw$/
|
|
55
|
-
},
|
|
56
|
-
...finalOptions.reactRefreshOptions
|
|
57
|
-
}
|
|
58
|
-
]);
|
|
59
|
-
}), finalOptions.enableProfiler && (api.modifyEnvironmentConfig((config, { mergeEnvironmentConfig })=>{
|
|
60
|
-
if ('production' === config.mode) return mergeEnvironmentConfig(config, {
|
|
61
|
-
output: {
|
|
62
|
-
minify: {
|
|
63
|
-
jsOptions: {
|
|
64
|
-
minimizerOptions: {
|
|
65
|
-
mangle: {
|
|
66
|
-
keep_classnames: !0,
|
|
67
|
-
keep_fnames: !0
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
}), api.modifyBundlerChain((chain, { isProd })=>{
|
|
75
|
-
isProd && (chain.resolve.alias.set((()=>{
|
|
76
|
-
if (void 0 !== hasReactDomClientCache) return hasReactDomClientCache;
|
|
77
|
-
try {
|
|
78
|
-
react_require.resolve('react-dom/client', {
|
|
79
|
-
paths: [
|
|
80
|
-
api.context.rootPath
|
|
81
|
-
]
|
|
82
|
-
}), hasReactDomClientCache = !0;
|
|
83
|
-
} catch {
|
|
84
|
-
hasReactDomClientCache = !1;
|
|
85
|
-
}
|
|
86
|
-
return hasReactDomClientCache;
|
|
87
|
-
})() ? 'react-dom/client$' : 'react-dom$', 'react-dom/profiling'), chain.resolve.alias.set('scheduler/tracing', 'scheduler/tracing-profiling'));
|
|
88
|
-
}));
|
|
89
|
-
}
|
|
90
|
-
options1 = finalOptions.splitChunks, api.modifyBundlerChain((chain, { environment, isProd })=>{
|
|
91
|
-
let { config } = environment;
|
|
92
|
-
if ('split-by-experience' !== config.performance.chunkSplit.strategy || !1 === options1) return;
|
|
93
|
-
let normalizedOptions = !0 === options1 ? {
|
|
94
|
-
react: !0,
|
|
95
|
-
router: !0
|
|
96
|
-
} : options1, currentConfig = chain.optimization.splitChunks.values();
|
|
97
|
-
if ('object' != typeof currentConfig) return;
|
|
98
|
-
let extraGroups = {};
|
|
99
|
-
normalizedOptions.react && (extraGroups.react = {
|
|
100
|
-
name: 'lib-react',
|
|
101
|
-
test: isProd ? /node_modules[\\/](?:react|react-dom|scheduler)[\\/]/ : /node_modules[\\/](?:react|react-dom|scheduler|react-refresh|@rspack[\\/]plugin-react-refresh)[\\/]/,
|
|
102
|
-
priority: 0
|
|
103
|
-
}), normalizedOptions.router && (extraGroups.router = {
|
|
104
|
-
name: 'lib-router',
|
|
105
|
-
test: /node_modules[\\/](?:react-router|react-router-dom|history|@remix-run[\\/]router)[\\/]/,
|
|
106
|
-
priority: 0
|
|
107
|
-
}), Object.keys(extraGroups).length && chain.optimization.splitChunks({
|
|
108
|
-
...currentConfig,
|
|
109
|
-
cacheGroups: {
|
|
110
|
-
...extraGroups,
|
|
111
|
-
...currentConfig.cacheGroups
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
});
|
|
121
|
+
'rspack' === api.context.bundlerType && (applyBasicReactSupport(api, finalOptions), finalOptions.enableProfiler && applyReactProfiler(api)), applySplitChunksRule(api, finalOptions.splitChunks);
|
|
115
122
|
}
|
|
116
123
|
});
|
|
117
124
|
export { PLUGIN_REACT_NAME, pluginReact };
|
package/dist/react.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { RsbuildPluginAPI } from '@rsbuild/core';
|
|
2
2
|
import type { PluginReactOptions } from './index.js';
|
|
3
|
-
export declare
|
|
4
|
-
export declare
|
|
3
|
+
export declare function applyBasicReactSupport(api: RsbuildPluginAPI, options: PluginReactOptions): void;
|
|
4
|
+
export declare function applyReactProfiler(api: RsbuildPluginAPI): void;
|
package/dist/splitChunks.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { RsbuildPluginAPI } from '@rsbuild/core';
|
|
2
2
|
import type { SplitReactChunkOptions } from './index.js';
|
|
3
|
-
export declare
|
|
3
|
+
export declare function applySplitChunksRule(api: RsbuildPluginAPI, options: SplitReactChunkOptions | boolean): void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsbuild/plugin-react",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-alpha.3",
|
|
4
4
|
"description": "React plugin for Rsbuild",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -22,18 +22,18 @@
|
|
|
22
22
|
"dist"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@rspack/plugin-react-refresh": "^1.
|
|
25
|
+
"@rspack/plugin-react-refresh": "^1.6.0",
|
|
26
26
|
"react-refresh": "^0.18.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@rslib/core": "0.19.
|
|
30
|
-
"@types/node": "^24.10.
|
|
29
|
+
"@rslib/core": "0.19.3",
|
|
30
|
+
"@types/node": "^24.10.9",
|
|
31
31
|
"typescript": "^5.9.3",
|
|
32
|
-
"@
|
|
33
|
-
"@
|
|
32
|
+
"@scripts/test-helper": "1.0.1",
|
|
33
|
+
"@rsbuild/core": "2.0.0-alpha.3"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
|
-
"@rsbuild/core": "^
|
|
36
|
+
"@rsbuild/core": "^2.0.0-0"
|
|
37
37
|
},
|
|
38
38
|
"publishConfig": {
|
|
39
39
|
"access": "public",
|