File tree Expand file tree Collapse file tree 9 files changed +980
-0
lines changed
cases/lazy-compilation/consume-shared-worker Expand file tree Collapse file tree 9 files changed +980
-0
lines changed Original file line number Diff line number Diff line change 1+ import { expect , test } from "@/fixtures" ;
2+
3+ test ( "should load shared module in worker successfully" , async ( { page } ) => {
4+ // Wait for the worker to load the shared module and display the result
5+ await page . waitForSelector ( 'div#worker-result:has-text("Worker: Shared value")' ) ;
6+
7+ // Check that the shared value from the worker was loaded and displayed
8+ const workerResultText = await page . locator ( '#worker-result:has-text("Shared value")' ) . textContent ( ) ;
9+ expect ( workerResultText ) . toContain ( "Shared value from library" ) ;
10+ } ) ;
Original file line number Diff line number Diff line change 1+ const { rspack } = require ( "@rspack/core" ) ;
2+ const { ModuleFederationPlugin } = require ( "@module-federation/enhanced/rspack" ) ;
3+ const path = require ( "path" ) ;
4+
5+ /** @type { import('@rspack/core').RspackOptions } */
6+ module . exports = {
7+ context : __dirname ,
8+ mode : "development" ,
9+ entry : "./src/index.js" ,
10+ devtool : false ,
11+ output : {
12+ filename : "[name].js" ,
13+ chunkFilename : "[name].chunk.js"
14+ } ,
15+ resolve : {
16+ alias : {
17+ "shared-lib" : path . resolve ( __dirname , "src/shared-lib" )
18+ }
19+ } ,
20+ plugins : [
21+ new rspack . HtmlRspackPlugin ( { template : "./src/index.html" } ) ,
22+ new ModuleFederationPlugin ( {
23+ name : "host" ,
24+ filename : "remoteEntry.js" ,
25+ shared : {
26+ "shared-lib" : {
27+ singleton : true ,
28+ eager : false ,
29+ requiredVersion : false
30+ }
31+ }
32+ } )
33+ ] ,
34+ devServer : {
35+ hot : false ,
36+ port : 5680
37+ }
38+ } ;
Original file line number Diff line number Diff line change 1+ <!DOCTYPE html>
2+ < html >
3+ < head >
4+ < meta charset ="utf-8 " />
5+ < title > Module Federation Worker Test</ title >
6+ </ head >
7+ < body >
8+ < div id ="root "> Loading...</ div >
9+ </ body >
10+ </ html >
Original file line number Diff line number Diff line change 1+ // Create a worker that uses a shared library
2+ const worker = new Worker ( new URL ( "./worker.js" , import . meta. url ) ) ;
3+
4+ const root = document . getElementById ( "root" ) ;
5+ root . textContent = "Main thread loaded" ;
6+
7+ // Listen for messages from worker
8+ worker . addEventListener ( "message" , ( e ) => {
9+ const workerResult = document . createElement ( "div" ) ;
10+ workerResult . id = "worker-result" ;
11+ workerResult . textContent = `Worker: ${ e . data } ` ;
12+ root . appendChild ( workerResult ) ;
13+ } ) ;
14+
15+ // Listen for errors from worker
16+ worker . addEventListener ( "error" , ( e ) => {
17+ const workerError = document . createElement ( "div" ) ;
18+ workerError . id = "worker-error" ;
19+ workerError . textContent = `Error: ${ e . message } ` ;
20+ root . appendChild ( workerError ) ;
21+ console . error ( "Worker error:" , e ) ;
22+ } ) ;
23+
24+ // Send message to worker to trigger it
25+ worker . postMessage ( "start" ) ;
Original file line number Diff line number Diff line change 1+ export function getValue ( ) {
2+ return "Shared value from library" ;
3+ }
Original file line number Diff line number Diff line change 1+ export function getValue ( ) {
2+ return "Shared value from library v1.0.0" ;
3+ }
4+
5+ export function getVersion ( ) {
6+ return "1.0.0" ;
7+ }
Original file line number Diff line number Diff line change 1+ // Worker tries to import the shared library
2+ import ( "shared-lib" ) . then ( ( lib ) => {
3+ self . addEventListener ( "message" , ( e ) => {
4+ if ( e . data === "start" ) {
5+ // Use the shared library and send result back
6+ self . postMessage ( lib . getValue ( ) ) ;
7+ }
8+ } ) ;
9+
10+ // Signal that worker is ready
11+ self . postMessage ( "Worker ready" ) ;
12+ } ) . catch ( ( err ) => {
13+ self . postMessage ( `Worker import error: ${ err . message } ` ) ;
14+ console . error ( "Worker failed to import shared-lib:" , err ) ;
15+ } ) ;
Original file line number Diff line number Diff line change 99 "devDependencies" : {
1010 "@babel/core" : " ^7.28.5" ,
1111 "@babel/preset-react" : " ^7.27.1" ,
12+ "@module-federation/enhanced" : " ^0.21.2" ,
1213 "@playwright/test" : " 1.56.0" ,
1314 "core-js" : " 3.46.0" ,
1415 "@rspack/core" : " workspace:*" ,
You can’t perform that action at this time.
0 commit comments