Skip to content

Commit f65e9da

Browse files
committed
Add comment directive to disable import parsing
1 parent 40a089c commit f65e9da

File tree

6 files changed

+50
-4
lines changed

6 files changed

+50
-4
lines changed

lib/dependencies/ImportParserPlugin.js

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,25 @@ class ImportParserPlugin {
3232

3333
const importOptions = parser.getCommentOptions(expr.range);
3434
if (importOptions) {
35+
if (typeof importOptions.webpackIgnore !== "undefined") {
36+
if (typeof importOptions.webpackIgnore !== "boolean") {
37+
parser.state.module.warnings.push(
38+
new UnsupportedFeatureWarning(
39+
parser.state.module,
40+
`\`webpackIgnore\` expected a boolean, but received: ${
41+
importOptions.webpackIgnore
42+
}.`
43+
)
44+
);
45+
} else {
46+
// Do not instrument `import()` is `webpackIgnore` is `true`
47+
if (importOptions.webpackIgnore) {
48+
return false;
49+
}
50+
}
51+
}
3552
if (typeof importOptions.webpackChunkName !== "undefined") {
36-
if (typeof importOptions.webpackChunkName !== "string")
53+
if (typeof importOptions.webpackChunkName !== "string") {
3754
parser.state.module.warnings.push(
3855
new UnsupportedFeatureWarning(
3956
parser.state.module,
@@ -42,10 +59,12 @@ class ImportParserPlugin {
4259
}.`
4360
)
4461
);
45-
else chunkName = importOptions.webpackChunkName;
62+
} else {
63+
chunkName = importOptions.webpackChunkName;
64+
}
4665
}
4766
if (typeof importOptions.webpackMode !== "undefined") {
48-
if (typeof importOptions.webpackMode !== "string")
67+
if (typeof importOptions.webpackMode !== "string") {
4968
parser.state.module.warnings.push(
5069
new UnsupportedFeatureWarning(
5170
parser.state.module,
@@ -54,7 +73,9 @@ class ImportParserPlugin {
5473
}.`
5574
)
5675
);
57-
else mode = importOptions.webpackMode;
76+
} else {
77+
mode = importOptions.webpackMode;
78+
}
5879
}
5980
if (typeof importOptions.webpackInclude !== "undefined") {
6081
if (
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const fs = require("fs");
2+
const path = require("path");
3+
const should = require("should");
4+
5+
it("should be able to ignore import()", () => {
6+
const source = fs.readFileSync(path.join(__dirname, "bundle1.js"), "utf-8");
7+
should(source).containEql(`import(/* webpackIgnore: true */ "./other2.js")`);
8+
should(source).not.containEql(`import(/* webpackIgnore: false */ "./other3.js")`);
9+
});
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import(/* webpackIgnore: true */ "./other2.js");
2+
import(/* webpackIgnore: false */ "./other3.js");
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default "other2";
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default "other3";
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module.exports = {
2+
entry: {
3+
bundle0: "./index.js",
4+
bundle1: "./other.js"
5+
},
6+
output: {
7+
filename: "[name].js"
8+
},
9+
node: {
10+
__dirname: false
11+
}
12+
};

0 commit comments

Comments
 (0)