Skip to content

Commit 623a851

Browse files
committed
chore: add e2e
1 parent 7f2ab6d commit 623a851

File tree

16 files changed

+236
-126
lines changed

16 files changed

+236
-126
lines changed

crates/node_binding/rspack.wasi-browser.js

Lines changed: 1 addition & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -63,63 +63,4 @@ const {
6363
},
6464
})
6565
export default __napiModule.exports
66-
export const Assets = __napiModule.exports.Assets
67-
export const AsyncDependenciesBlock = __napiModule.exports.AsyncDependenciesBlock
68-
export const Chunk = __napiModule.exports.Chunk
69-
export const ChunkGraph = __napiModule.exports.ChunkGraph
70-
export const ChunkGroup = __napiModule.exports.ChunkGroup
71-
export const Chunks = __napiModule.exports.Chunks
72-
export const CodeGenerationResult = __napiModule.exports.CodeGenerationResult
73-
export const CodeGenerationResults = __napiModule.exports.CodeGenerationResults
74-
export const ConcatenatedModule = __napiModule.exports.ConcatenatedModule
75-
export const ContextModule = __napiModule.exports.ContextModule
76-
export const Dependency = __napiModule.exports.Dependency
77-
export const Diagnostics = __napiModule.exports.Diagnostics
78-
export const EntryDataDto = __napiModule.exports.EntryDataDto
79-
export const EntryDataDTO = __napiModule.exports.EntryDataDTO
80-
export const EntryDependency = __napiModule.exports.EntryDependency
81-
export const EntryOptionsDto = __napiModule.exports.EntryOptionsDto
82-
export const EntryOptionsDTO = __napiModule.exports.EntryOptionsDTO
83-
export const ExternalModule = __napiModule.exports.ExternalModule
84-
export const JsCompilation = __napiModule.exports.JsCompilation
85-
export const JsCompiler = __napiModule.exports.JsCompiler
86-
export const JsContextModuleFactoryAfterResolveData = __napiModule.exports.JsContextModuleFactoryAfterResolveData
87-
export const JsContextModuleFactoryBeforeResolveData = __napiModule.exports.JsContextModuleFactoryBeforeResolveData
88-
export const JsDependencies = __napiModule.exports.JsDependencies
89-
export const JsEntries = __napiModule.exports.JsEntries
90-
export const JsExportsInfo = __napiModule.exports.JsExportsInfo
91-
export const JsModuleGraph = __napiModule.exports.JsModuleGraph
92-
export const JsResolver = __napiModule.exports.JsResolver
93-
export const JsResolverFactory = __napiModule.exports.JsResolverFactory
94-
export const JsStats = __napiModule.exports.JsStats
95-
export const KnownBuildInfo = __napiModule.exports.KnownBuildInfo
96-
export const Module = __napiModule.exports.Module
97-
export const ModuleGraphConnection = __napiModule.exports.ModuleGraphConnection
98-
export const NativeWatcher = __napiModule.exports.NativeWatcher
99-
export const NativeWatchResult = __napiModule.exports.NativeWatchResult
100-
export const NormalModule = __napiModule.exports.NormalModule
101-
export const RawExternalItemFnCtx = __napiModule.exports.RawExternalItemFnCtx
102-
export const ReadonlyResourceData = __napiModule.exports.ReadonlyResourceData
103-
export const ResolverFactory = __napiModule.exports.ResolverFactory
104-
export const Sources = __napiModule.exports.Sources
105-
export const VirtualFileStore = __napiModule.exports.VirtualFileStore
106-
export const JsVirtualFileStore = __napiModule.exports.JsVirtualFileStore
107-
export const async = __napiModule.exports.async
108-
export const BuiltinPluginName = __napiModule.exports.BuiltinPluginName
109-
export const cleanupGlobalTrace = __napiModule.exports.cleanupGlobalTrace
110-
export const EnforceExtension = __napiModule.exports.EnforceExtension
111-
export const EXPECTED_RSPACK_CORE_VERSION = __napiModule.exports.EXPECTED_RSPACK_CORE_VERSION
112-
export const formatDiagnostic = __napiModule.exports.formatDiagnostic
113-
export const JsLoaderState = __napiModule.exports.JsLoaderState
114-
export const JsRspackSeverity = __napiModule.exports.JsRspackSeverity
115-
export const loadBrowserslist = __napiModule.exports.loadBrowserslist
116-
export const minify = __napiModule.exports.minify
117-
export const minifySync = __napiModule.exports.minifySync
118-
export const RawJavascriptParserCommonjsExports = __napiModule.exports.RawJavascriptParserCommonjsExports
119-
export const RawRuleSetConditionType = __napiModule.exports.RawRuleSetConditionType
120-
export const registerGlobalTrace = __napiModule.exports.registerGlobalTrace
121-
export const RegisterJsTapKind = __napiModule.exports.RegisterJsTapKind
122-
export const sync = __napiModule.exports.sync
123-
export const syncTraceEvent = __napiModule.exports.syncTraceEvent
124-
export const transform = __napiModule.exports.transform
125-
export const transformSync = __napiModule.exports.transformSync
66+

crates/node_binding/rspack.wasi.cjs

Lines changed: 1 addition & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -108,63 +108,4 @@ const { instance: __napiInstance, module: __wasiModule, napiModule: __napiModule
108108
},
109109
})
110110
module.exports = __napiModule.exports
111-
module.exports.Assets = __napiModule.exports.Assets
112-
module.exports.AsyncDependenciesBlock = __napiModule.exports.AsyncDependenciesBlock
113-
module.exports.Chunk = __napiModule.exports.Chunk
114-
module.exports.ChunkGraph = __napiModule.exports.ChunkGraph
115-
module.exports.ChunkGroup = __napiModule.exports.ChunkGroup
116-
module.exports.Chunks = __napiModule.exports.Chunks
117-
module.exports.CodeGenerationResult = __napiModule.exports.CodeGenerationResult
118-
module.exports.CodeGenerationResults = __napiModule.exports.CodeGenerationResults
119-
module.exports.ConcatenatedModule = __napiModule.exports.ConcatenatedModule
120-
module.exports.ContextModule = __napiModule.exports.ContextModule
121-
module.exports.Dependency = __napiModule.exports.Dependency
122-
module.exports.Diagnostics = __napiModule.exports.Diagnostics
123-
module.exports.EntryDataDto = __napiModule.exports.EntryDataDto
124-
module.exports.EntryDataDTO = __napiModule.exports.EntryDataDTO
125-
module.exports.EntryDependency = __napiModule.exports.EntryDependency
126-
module.exports.EntryOptionsDto = __napiModule.exports.EntryOptionsDto
127-
module.exports.EntryOptionsDTO = __napiModule.exports.EntryOptionsDTO
128-
module.exports.ExternalModule = __napiModule.exports.ExternalModule
129-
module.exports.JsCompilation = __napiModule.exports.JsCompilation
130-
module.exports.JsCompiler = __napiModule.exports.JsCompiler
131-
module.exports.JsContextModuleFactoryAfterResolveData = __napiModule.exports.JsContextModuleFactoryAfterResolveData
132-
module.exports.JsContextModuleFactoryBeforeResolveData = __napiModule.exports.JsContextModuleFactoryBeforeResolveData
133-
module.exports.JsDependencies = __napiModule.exports.JsDependencies
134-
module.exports.JsEntries = __napiModule.exports.JsEntries
135-
module.exports.JsExportsInfo = __napiModule.exports.JsExportsInfo
136-
module.exports.JsModuleGraph = __napiModule.exports.JsModuleGraph
137-
module.exports.JsResolver = __napiModule.exports.JsResolver
138-
module.exports.JsResolverFactory = __napiModule.exports.JsResolverFactory
139-
module.exports.JsStats = __napiModule.exports.JsStats
140-
module.exports.KnownBuildInfo = __napiModule.exports.KnownBuildInfo
141-
module.exports.Module = __napiModule.exports.Module
142-
module.exports.ModuleGraphConnection = __napiModule.exports.ModuleGraphConnection
143-
module.exports.NativeWatcher = __napiModule.exports.NativeWatcher
144-
module.exports.NativeWatchResult = __napiModule.exports.NativeWatchResult
145-
module.exports.NormalModule = __napiModule.exports.NormalModule
146-
module.exports.RawExternalItemFnCtx = __napiModule.exports.RawExternalItemFnCtx
147-
module.exports.ReadonlyResourceData = __napiModule.exports.ReadonlyResourceData
148-
module.exports.ResolverFactory = __napiModule.exports.ResolverFactory
149-
module.exports.Sources = __napiModule.exports.Sources
150-
module.exports.VirtualFileStore = __napiModule.exports.VirtualFileStore
151-
module.exports.JsVirtualFileStore = __napiModule.exports.JsVirtualFileStore
152-
module.exports.async = __napiModule.exports.async
153-
module.exports.BuiltinPluginName = __napiModule.exports.BuiltinPluginName
154-
module.exports.cleanupGlobalTrace = __napiModule.exports.cleanupGlobalTrace
155-
module.exports.EnforceExtension = __napiModule.exports.EnforceExtension
156-
module.exports.EXPECTED_RSPACK_CORE_VERSION = __napiModule.exports.EXPECTED_RSPACK_CORE_VERSION
157-
module.exports.formatDiagnostic = __napiModule.exports.formatDiagnostic
158-
module.exports.JsLoaderState = __napiModule.exports.JsLoaderState
159-
module.exports.JsRspackSeverity = __napiModule.exports.JsRspackSeverity
160-
module.exports.loadBrowserslist = __napiModule.exports.loadBrowserslist
161-
module.exports.minify = __napiModule.exports.minify
162-
module.exports.minifySync = __napiModule.exports.minifySync
163-
module.exports.RawJavascriptParserCommonjsExports = __napiModule.exports.RawJavascriptParserCommonjsExports
164-
module.exports.RawRuleSetConditionType = __napiModule.exports.RawRuleSetConditionType
165-
module.exports.registerGlobalTrace = __napiModule.exports.registerGlobalTrace
166-
module.exports.RegisterJsTapKind = __napiModule.exports.RegisterJsTapKind
167-
module.exports.sync = __napiModule.exports.sync
168-
module.exports.syncTraceEvent = __napiModule.exports.syncTraceEvent
169-
module.exports.transform = __napiModule.exports.transform
170-
module.exports.transformSync = __napiModule.exports.transformSync
111+

packages/rspack/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
"zod-validation-error": "3.5.3"
6868
},
6969
"dependencies": {
70-
"@module-federation/runtime-tools": "0.18.0",
70+
"@module-federation/runtime-tools": "0.0.0-fix-lazy-comile-20250929064217",
7171
"@rspack/binding": "workspace:*",
7272
"@rspack/lite-tapable": "1.0.1"
7373
},

packages/rspack/src/container/ModuleFederationPlugin.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { Compiler } from "../Compiler";
22
import type { ExternalsType } from "../config";
3+
import { RuntimeGlobals } from "../RuntimeGlobals";
34
import { getExternalsTypeSchema } from "../schema/config";
45
import { isValidate } from "../schema/validate";
56
import type { ModuleFederationPluginV1Options } from "./ModuleFederationPluginV1";
@@ -40,6 +41,24 @@ export class ModuleFederationPlugin {
4041
...this._options,
4142
enhanced: true
4243
}).apply(compiler);
44+
45+
// inject ensureChunkHandlers if enable lazy compilation
46+
if (compiler.options.lazyCompilation && this._options.remotes) {
47+
compiler.hooks.thisCompilation.tap(
48+
"CoreModuleFederationPlugin",
49+
compilation => {
50+
compilation.hooks.additionalTreeRuntimeRequirements.tap(
51+
"CoreModuleFederationPlugin",
52+
(chunk, set) => {
53+
if (chunk.hasRuntime()) {
54+
set.add(RuntimeGlobals.ensureChunk);
55+
set.add(RuntimeGlobals.ensureChunkHandlers);
56+
}
57+
}
58+
);
59+
}
60+
);
61+
}
4362
}
4463
}
4564

packages/rspack/src/runtime/moduleFederationDefaultRuntime.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,12 @@ module.exports = function () {
212212
__webpack_require__.federation.attachShareScopeMap(__webpack_require__);
213213
}
214214

215+
if (!__webpack_require__.f) {
216+
__webpack_require__.f = {};
217+
}
218+
if (!__webpack_require__.f.remotes) {
219+
__webpack_require__.f.remotes = function () {};
220+
}
215221
override(__webpack_require__.f, "remotes", (chunkId, promises) =>
216222
__webpack_require__.federation.bundlerRuntime.remotes({
217223
chunkId,
@@ -226,6 +232,9 @@ module.exports = function () {
226232
webpackRequire: __webpack_require__
227233
})
228234
);
235+
if (!__webpack_require__.f.consumes) {
236+
__webpack_require__.f.consumes = function () {};
237+
}
229238
override(__webpack_require__.f, "consumes", (chunkId, promises) =>
230239
__webpack_require__.federation.bundlerRuntime.consumes({
231240
chunkId,
@@ -267,7 +276,7 @@ module.exports = function () {
267276
throw new Error(
268277
'Module "' + module + '" does not exist in container.'
269278
);
270-
});
279+
});
271280
__webpack_require__.R = undefined;
272281
return getScope;
273282
});

pnpm-lock.yaml

Lines changed: 45 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { expect, test } from "@/fixtures";
2+
3+
test("should load remote and shared success", async ({ page }) => {
4+
// Click the button that triggers dynamic import
5+
await page.waitForSelector('button:has-text("Click me")');
6+
await page.getByText("Click me").click();
7+
8+
// Wait for the component to appear with a more reliable wait
9+
await page.waitForSelector('div:has-text("RemoteComponent")');
10+
11+
// Check that the component was loaded and displayed
12+
const RemoteComponentCount = await page.getByText("RemoteComponent").count();
13+
expect(RemoteComponentCount).toBe(1);
14+
15+
16+
// Check that the shared component was loaded and displayed
17+
const SharedReactCount = await page.getByText("SharedReact").count();
18+
expect(SharedReactCount).toBe(1);
19+
});
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
const { rspack } = require("@rspack/core");
2+
const path = require('path');
3+
const ReactRefreshPlugin = require("@rspack/plugin-react-refresh");
4+
5+
/** @type { import('@rspack/core').RspackOptions } */
6+
module.exports = {
7+
context: __dirname,
8+
entry: "./src/index.jsx",
9+
mode: "development",
10+
devtool:false,
11+
resolve: {
12+
extensions: ["...", ".jsx"]
13+
},
14+
module: {
15+
rules: [
16+
{
17+
test: /\.(jsx?|tsx?)$/,
18+
use: [
19+
{
20+
loader: "builtin:swc-loader",
21+
options: {
22+
jsc: {
23+
parser: {
24+
syntax: "typescript",
25+
tsx: true
26+
},
27+
transform: {
28+
react: {
29+
runtime: "automatic",
30+
development: true,
31+
refresh: true,
32+
}
33+
},
34+
},
35+
}
36+
},
37+
]
38+
}
39+
]
40+
},
41+
plugins: [new rspack.HtmlRspackPlugin({ template: "./src/index.html" }), new rspack.container.ModuleFederationPlugin({
42+
name:"host",
43+
remotes: {
44+
remote: "remote@http://localhost:5679/remoteEntry.js"
45+
},
46+
shared: {
47+
react: {},
48+
'react-dom': {}
49+
},
50+
runtimePlugins: [require.resolve('./runtimePlugin.js')]
51+
}),
52+
new ReactRefreshPlugin(),
53+
54+
],
55+
lazyCompilation:true,
56+
devServer: {
57+
hot: true,
58+
port: 5678,
59+
devMiddleware: {
60+
writeToDisk: true
61+
}
62+
}
63+
};

0 commit comments

Comments
 (0)