Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
871 changes: 871 additions & 0 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { expect, test } from "@/fixtures";

test("should load shared module in worker successfully", async ({ page }) => {
// Wait for the worker to load the shared module and display the result
await page.waitForSelector('div#worker-result:has-text("Worker: Shared value")');

// Check that the shared value from the worker was loaded and displayed
const workerResultText = await page.locator('#worker-result:has-text("Shared value")').textContent();
expect(workerResultText).toContain("Shared value from library");
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
const { rspack } = require("@rspack/core");
const { ModuleFederationPlugin } = require("@module-federation/enhanced/rspack");
const path = require("path");

/** @type { import('@rspack/core').RspackOptions } */
module.exports = {
context: __dirname,
mode: "development",
entry: "./src/index.js",
devtool: false,
output: {
filename: "[name].js",
chunkFilename: "[name].chunk.js"
},
resolve: {
alias: {
"shared-lib": path.resolve(__dirname, "src/shared-lib")
}
},
plugins: [
new rspack.HtmlRspackPlugin({ template: "./src/index.html" }),
new ModuleFederationPlugin({
name: "host",
filename: "remoteEntry.js",
shared: {
"shared-lib": {
singleton: true,
eager: false,
requiredVersion: false
}
}
})
],
devServer: {
hot: false,
port: 5680
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Module Federation Worker Test</title>
</head>
<body>
<div id="root">Loading...</div>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Create a worker that uses a shared library
const worker = new Worker(new URL("./worker.js", import.meta.url));

const root = document.getElementById("root");
root.textContent = "Main thread loaded";

// Listen for messages from worker
worker.addEventListener("message", (e) => {
const workerResult = document.createElement("div");
workerResult.id = "worker-result";
workerResult.textContent = `Worker: ${e.data}`;
root.appendChild(workerResult);
});

// Listen for errors from worker
worker.addEventListener("error", (e) => {
const workerError = document.createElement("div");
workerError.id = "worker-error";
workerError.textContent = `Error: ${e.message}`;
root.appendChild(workerError);
console.error("Worker error:", e);
});

// Send message to worker to trigger it
worker.postMessage("start");
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function getValue() {
return "Shared value from library";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export function getValue() {
return "Shared value from library v1.0.0";
}

export function getVersion() {
return "1.0.0";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Worker tries to import the shared library
import("shared-lib").then((lib) => {
self.addEventListener("message", (e) => {
if (e.data === "start") {
// Use the shared library and send result back
self.postMessage(lib.getValue());
}
});

// Signal that worker is ready
self.postMessage("Worker ready");
}).catch((err) => {
self.postMessage(`Worker import error: ${err.message}`);
console.error("Worker failed to import shared-lib:", err);
});
1 change: 1 addition & 0 deletions tests/e2e/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"devDependencies": {
"@babel/core": "^7.28.5",
"@babel/preset-react": "^7.27.1",
"@module-federation/enhanced": "^0.21.2",
"@playwright/test": "1.56.0",
"core-js": "3.46.0",
"@rspack/core": "workspace:*",
Expand Down
Loading