Skip to content

Commit

Permalink
Merge pull request #14777 from webpack/bugfix/double-compilation-mana…
Browse files Browse the repository at this point in the history
…ged-path

fix double compilation with managed paths
  • Loading branch information
sokra committed Nov 20, 2021
2 parents eee5ffc + 200ab0e commit befeee9
Show file tree
Hide file tree
Showing 14 changed files with 104 additions and 2 deletions.
8 changes: 6 additions & 2 deletions lib/FileSystemInfo.js
Expand Up @@ -2256,7 +2256,9 @@ class FileSystemInfo {
for (const path of managedItems) {
const cache = this._managedItems.get(path);
if (cache !== undefined) {
managedFiles.add(join(this.fs, path, "package.json"));
if (cache !== "missing") {
managedFiles.add(join(this.fs, path, "package.json"));
}
managedItemInfo.set(path, cache);
} else {
jobs++;
Expand All @@ -2269,7 +2271,9 @@ class FileSystemInfo {
}
jobError();
} else if (entry) {
managedFiles.add(join(this.fs, path, "package.json"));
if (entry !== "missing") {
managedFiles.add(join(this.fs, path, "package.json"));
}
managedItemInfo.set(path, entry);
jobDone();
} else {
Expand Down
61 changes: 61 additions & 0 deletions test/Watch.test.js
@@ -0,0 +1,61 @@
"use strict";

require("./helpers/warmup-webpack");

const path = require("path");
const webpack = require("..");
const { createFsFromVolume, Volume } = require("memfs");

describe("Watch", () => {
jest.setTimeout(10000);

it("should only compile a single time", done => {
let counterBeforeCompile = 0;
let counterDone = 0;
let counterHandler = 0;
const compiler = webpack(
{
context: path.resolve(__dirname, "fixtures/watch"),
watch: true,
mode: "development",
snapshot: {
managedPaths: [/^(.+?[\\/]node_modules[\\/])/]
},
experiments: {
futureDefaults: true
},
module: {
// unsafeCache: false,
rules: [
{
test: /\.js$/,
use: "some-loader"
}
]
},
plugins: [
c => {
c.hooks.beforeCompile.tap("test", () => {
counterBeforeCompile++;
});
c.hooks.done.tap("test", () => {
counterDone++;
});
}
]
},
(err, stats) => {
if (err) return done(err);
if (stats.hasErrors()) return done(new Error(stats.toString()));
counterHandler++;
}
);
compiler.outputFileSystem = createFsFromVolume(new Volume());
setTimeout(() => {
expect(counterBeforeCompile).toBe(1);
expect(counterDone).toBe(1);
expect(counterHandler).toBe(1);
compiler.close(done);
}, 5000);
});
});
3 changes: 3 additions & 0 deletions test/fixtures/watch/node_modules/inline-loader/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions test/fixtures/watch/node_modules/inline-loader/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file.
4 changes: 4 additions & 0 deletions test/fixtures/watch/node_modules/nested-package1/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions test/fixtures/watch/node_modules/package/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions test/fixtures/watch/node_modules/package/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions test/fixtures/watch/node_modules/some-loader/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions test/fixtures/watch/node_modules/some-loader/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions test/fixtures/watch/src/index.js
@@ -0,0 +1,5 @@
import "package";
import "inline-loader!package";

import "./local";
import "inline-loader!./local";
2 changes: 2 additions & 0 deletions test/fixtures/watch/src/local.js
@@ -0,0 +1,2 @@
import "package";
import "inline-loader!package";

0 comments on commit befeee9

Please sign in to comment.