@@ -128,6 +128,17 @@ function runCompileInWorker(script, ctx, task) {
128128 const totalTasks = Object . keys ( ctx . pages . mainPages ) . length
129129 + Object . values ( ctx . pages . subPages ) . reduce ( ( sum , item ) => sum + item . info . length , 0 )
130130
131+ let isResolved = false
132+ let workerError = null
133+
134+ // 统一的错误处理函数,防止重复 reject
135+ const handleError = ( error ) => {
136+ if ( isResolved ) return
137+ isResolved = true
138+ worker . terminate ( )
139+ reject ( error )
140+ }
141+
131142 worker . postMessage ( { pages : ctx . pages , storeInfo : ctx . storeInfo } )
132143 // 接收 Worker 完成后的消息
133144 worker . on ( 'message' , ( message ) => {
@@ -142,8 +153,10 @@ function runCompileInWorker(script, ctx, task) {
142153 }
143154
144155 if ( message . success ) {
145- resolve ( )
156+ if ( isResolved ) return
157+ isResolved = true
146158 worker . terminate ( )
159+ resolve ( )
147160 }
148161 else if ( message . error ) {
149162 const error = new Error ( message . error . message || message . error )
@@ -153,20 +166,29 @@ function runCompileInWorker(script, ctx, task) {
153166 error . file = message . error . file
154167 if ( message . error . line )
155168 error . line = message . error . line
156- reject ( error )
157- worker . terminate ( )
169+ handleError ( error )
158170 }
159171 }
160172 catch ( err ) {
161- reject ( new Error ( `Error processing worker message: ${ err . message } \n${ err . stack } ` ) )
162- worker . terminate ( )
173+ handleError ( new Error ( `Error processing worker message: ${ err . message } \n${ err . stack } ` ) )
163174 }
164175 } )
165176
166- worker . on ( 'error' , reject )
177+ worker . on ( 'error' , ( err ) => {
178+ // 保存错误信息,可能在 exit 事件中使用
179+ workerError = err
180+ handleError ( err )
181+ } )
167182 worker . on ( 'exit' , ( code ) => {
168- if ( code !== 0 ) {
169- reject ( new Error ( `Worker stopped with exit code ${ code } ` ) )
183+ if ( code !== 0 && ! isResolved ) {
184+ // 如果已经有 workerError,使用它;否则创建新的错误
185+ // 退出码 1 通常表示内存溢出或其他致命错误
186+ const error = workerError || new Error (
187+ code === 1
188+ ? 'Worker terminated due to reaching memory limit: JS heap out of memory'
189+ : `Worker stopped with exit code ${ code } `
190+ )
191+ handleError ( error )
170192 }
171193 } )
172194 } ) )
0 commit comments