diff --git a/app/scripts/app-init.js b/app/scripts/app-init.js index 6d2bf2d65..ba66698b7 100644 --- a/app/scripts/app-init.js +++ b/app/scripts/app-init.js @@ -48,8 +48,3 @@ function importAllScripts() { // Placing script import call here ensures that scripts are inported each time service worker is activated. importAllScripts(); - -/** - * An open issue is changes in this file break during hot reloading. Reason is dynamic injection of "FILE NAMES". - * Developers need to restart local server if they change this file. - */ diff --git a/development/build/scripts.js b/development/build/scripts.js index 044551399..21892519e 100644 --- a/development/build/scripts.js +++ b/development/build/scripts.js @@ -365,6 +365,15 @@ function createScriptTasks({ } } +const postProcessServiceWorker = (mv3BrowserPlatforms, fileList) => { + mv3BrowserPlatforms.forEach((browser) => { + const appInitFile = `./dist/${browser}/app-init.js`; + const fileContent = readFileSync('./app/scripts/app-init.js', 'utf8'); + const fileOutput = fileContent.replace('/** FILE NAMES */', fileList); + writeFileSync(appInitFile, fileOutput); + }); +}; + // Function generates app-init.js for browsers chrome, brave and opera. // It dynamically injects list of files generated in the build. async function bundleMV3AppInitialiser({ @@ -400,12 +409,17 @@ async function bundleMV3AppInitialiser({ shouldLintFenceFiles, })(); - mv3BrowserPlatforms.forEach((browser) => { - const appInitFile = `./dist/${browser}/app-init.js`; - const fileContent = readFileSync('./app/scripts/app-init.js', 'utf8'); - const fileOutput = fileContent.replace('/** FILE NAMES */', fileList); - writeFileSync(appInitFile, fileOutput); + postProcessServiceWorker(mv3BrowserPlatforms, fileList); + + let prevChromeFileContent; + watch('./dist/chrome/app-init.js', () => { + const chromeFileContent = readFileSync('./dist/chrome/app-init.js', 'utf8'); + if (chromeFileContent !== prevChromeFileContent) { + prevChromeFileContent = chromeFileContent; + postProcessServiceWorker(mv3BrowserPlatforms, fileList); + } }); + console.log(`Bundle end: service worker app-init.js`); }