File tree Expand file tree Collapse file tree 7 files changed +85
-6
lines changed
test/configCases/worker/issue-17105 Expand file tree Collapse file tree 7 files changed +85
-6
lines changed Original file line number Diff line number Diff line change 1+ ---
2+ " webpack " : patch
3+ ---
4+
5+ Do not crash when a referenced chunk is not a runtime chunk.
Original file line number Diff line number Diff line change @@ -4531,12 +4531,14 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
45314531 ( e ) => e . chunks [ e . chunks . length - 1 ]
45324532 )
45334533 ) ) {
4534- const otherInfo =
4535- /** @type {RuntimeChunkInfo } */
4536- ( runtimeChunksMap . get ( other ) ) ;
4537- otherInfo . referencedBy . push ( info ) ;
4538- info . remaining ++ ;
4539- remaining ++ ;
4534+ const otherInfo = runtimeChunksMap . get ( other ) ;
4535+ // other may be a non-runtime chunk (e.g. worker chunk)
4536+ // when you have a worker chunk in your app.js (new Worker(...)) and as a separate entry point
4537+ if ( otherInfo ) {
4538+ otherInfo . referencedBy . push ( info ) ;
4539+ info . remaining ++ ;
4540+ remaining ++ ;
4541+ }
45404542 }
45414543 }
45424544 /** @type {Chunk[] } */
Original file line number Diff line number Diff line change 1+ import { Worker } from "worker_threads" ;
2+
3+ it ( "should build and run when worker is an entry and using via `new Worker(...)`" , async ( ) => {
4+ const worker = new Worker (
5+ /* webpackChunkName: "my-worker" */ new URL ( "./worker.js" , import . meta. url )
6+ ) ;
7+ worker . postMessage ( { data : "ping" } ) ;
8+ const result = await new Promise ( resolve => {
9+ worker . on ( "message" , event => {
10+ resolve ( event . data ) ;
11+ } ) ;
12+ } ) ;
13+ expect ( result ) . toBe ( "pong" ) ;
14+ await worker . terminate ( ) ;
15+ } ) ;
Original file line number Diff line number Diff line change 1+ "use strict" ;
2+
3+ module . exports = {
4+ findBundle ( i , options ) {
5+ return [ "app.js" ] ;
6+ }
7+ } ;
Original file line number Diff line number Diff line change 1+ "use strict" ;
2+
3+ const supportsWorker = require ( "../../../helpers/supportsWorker" ) ;
4+
5+ module . exports = ( ) => supportsWorker ( ) ;
Original file line number Diff line number Diff line change 1+ "use strict" ;
2+
3+ /** @typedef {import("../../../../").Module } Module */
4+
5+ /** @type {import("../../../../").Configuration } */
6+ module . exports = {
7+ target : "node" ,
8+ entry : {
9+ app : "./app.js" ,
10+ "my-worker" : "./worker.js"
11+ } ,
12+ output : {
13+ filename : "[name].js" ,
14+ environment : {
15+ nodePrefixForCoreModules : false
16+ }
17+ } ,
18+ optimization : {
19+ runtimeChunk : { name : "runtime" } ,
20+ splitChunks : {
21+ cacheGroups : {
22+ vendor : {
23+ /**
24+ * @param {Module } mod module
25+ * @returns {string | boolean | null } result
26+ */
27+ test ( mod ) {
28+ return mod . context && mod . context . includes ( "node_modules" ) ;
29+ } ,
30+ chunks : "all" ,
31+ name : "vendor" ,
32+ priority : 10 ,
33+ enforce : true
34+ }
35+ }
36+ }
37+ }
38+ } ;
Original file line number Diff line number Diff line change 1+ import { parentPort } from "worker_threads" ;
2+
3+ if ( parentPort ) {
4+ parentPort . on ( "message" , event => {
5+ parentPort . postMessage ( event . data === "ping" ? { data : "pong" } : { data : "unexpected" } ) ;
6+ } ) ;
7+ }
You can’t perform that action at this time.
0 commit comments