Переглянути джерело

Merge pull request #9889 from afshin/fix-watch-mode

Bug fix for extension watch mode behavior
Jason Grout 4 роки тому
батько
коміт
9cdb1fac5d
1 змінених файлів з 20 додано та 10 видалено
  1. 20 10
      builder/src/extensionConfig.ts

+ 20 - 10
builder/src/extensionConfig.ts

@@ -167,21 +167,31 @@ function generateConfig({
 
   class CleanupPlugin {
     apply(compiler: any) {
-      compiler.hooks.done.tap('Cleanup', () => {
-        // Find the remoteEntry file and add it to the package.json metadata
+      compiler.hooks.done.tap('Cleanup', (stats: any) => {
+        const newlyCreatedAssets = stats.compilation.assets;
+
+        // Clear out any remoteEntry files that are stale
+        // https://stackoverflow.com/a/40370750
         const files = glob.sync(path.join(staticPath, 'remoteEntry.*.js'));
-        let newestTime = -1;
-        let newestRemote = '';
-        files.forEach(fpath => {
-          const mtime = fs.statSync(fpath).mtime.getTime();
-          if (mtime > newestTime) {
-            newestRemote = fpath;
-            newestTime = mtime;
+        let newEntry = '';
+        const unlinked: string[] = [];
+        files.forEach(file => {
+          const fileName = path.basename(file);
+          if (!newlyCreatedAssets[fileName]) {
+            fs.unlinkSync(path.resolve(file));
+            unlinked.push(fileName);
+          } else {
+            newEntry = fileName;
           }
         });
+        if (unlinked.length > 0) {
+          console.log('Removed old assets: ', unlinked);
+        }
+
+        // Find the remoteEntry file and add it to the package.json metadata
         const data = readJSONFile(path.join(outputPath, 'package.json'));
         const _build: any = {
-          load: path.join('static', path.basename(newestRemote))
+          load: path.join('static', newEntry)
         };
         if (exposes['./extension'] !== undefined) {
           _build.extension = './extension';