Skip to content

Commit 8bc8868

Browse files
Merge pull request #4925 from NativeScript/tachev/fix-lazy-chunks-hmr
fix: include all chunkFiles in fallbackFiles in order to avoid wrong lazy Angular chunks
2 parents 49fdfdd + ffa256d commit 8bc8868

File tree

1 file changed

+15
-23
lines changed

1 file changed

+15
-23
lines changed

lib/services/webpack/webpack-compiler-service.ts

+15-23
Original file line numberDiff line numberDiff line change
@@ -221,33 +221,25 @@ export class WebpackCompilerService extends EventEmitter implements IWebpackComp
221221
return args;
222222
}
223223

224-
private getUpdatedEmittedFiles(emittedFiles: string[], chunkFiles: string[]) {
225-
let fallbackFiles: string[] = [];
224+
private getUpdatedEmittedFiles(allEmittedFiles: string[], chunkFiles: string[]) {
225+
const hotHash = this.getCurrentHotUpdateHash(allEmittedFiles);
226+
const emittedHotUpdateFiles = _.difference(allEmittedFiles, chunkFiles);
227+
228+
return { emittedFiles: emittedHotUpdateFiles, fallbackFiles: chunkFiles, hash: hotHash };
229+
}
230+
231+
private getCurrentHotUpdateHash(emittedFiles: string[]) {
226232
let hotHash;
227-
let result = emittedFiles.slice();
228233
const hotUpdateScripts = emittedFiles.filter(x => x.endsWith('.hot-update.js'));
229-
if (chunkFiles && chunkFiles.length) {
230-
result = result.filter(file => chunkFiles.indexOf(file) === -1);
234+
if (hotUpdateScripts && hotUpdateScripts.length) {
235+
// the hash is the same for each hot update in the current compilation
236+
const hotUpdateName = hotUpdateScripts[0];
237+
const matcher = /^(.+)\.(.+)\.hot-update/gm;
238+
const matches = matcher.exec(hotUpdateName);
239+
hotHash = matches[2];
231240
}
232-
hotUpdateScripts.forEach(hotUpdateScript => {
233-
const { name, hash } = this.parseHotUpdateChunkName(hotUpdateScript);
234-
hotHash = hash;
235-
// remove bundle/vendor.js files if there's a bundle.XXX.hot-update.js or vendor.XXX.hot-update.js
236-
result = result.filter(file => file !== `${name}.js`);
237-
});
238-
// if applying of hot update fails, we must fallback to the full files
239-
fallbackFiles = emittedFiles.filter(file => hotUpdateScripts.indexOf(file) === -1);
240-
241-
return { emittedFiles: result, fallbackFiles, hash: hotHash };
242-
}
243241

244-
private parseHotUpdateChunkName(name: string) {
245-
const matcher = /^(.+)\.(.+)\.hot-update/gm;
246-
const matches = matcher.exec(name);
247-
return {
248-
name: matches[1] || "",
249-
hash: matches[2] || "",
250-
};
242+
return hotHash || "";
251243
}
252244

253245
private async stopWebpackForPlatform(platform: string) {

0 commit comments

Comments
 (0)