Skip to content

Commit 30c9dd0

Browse files
committed
remove __webpack_require__ requirement from some ConstDependencies
fixes webpack#5707
1 parent 0f6c36c commit 30c9dd0

File tree

10 files changed

+41
-26
lines changed

10 files changed

+41
-26
lines changed

lib/APIPlugin.js

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,27 @@ const ParserHelpers = require("./ParserHelpers");
99

1010
const NullFactory = require("./NullFactory");
1111

12+
/* eslint-disable camelcase */
1213
const REPLACEMENTS = {
13-
__webpack_require__: "__webpack_require__", // eslint-disable-line camelcase
14-
__webpack_public_path__: "__webpack_require__.p", // eslint-disable-line camelcase
15-
__webpack_modules__: "__webpack_require__.m", // eslint-disable-line camelcase
16-
__webpack_chunk_load__: "__webpack_require__.e", // eslint-disable-line camelcase
17-
__non_webpack_require__: "require", // eslint-disable-line camelcase
18-
__webpack_nonce__: "__webpack_require__.nc", // eslint-disable-line camelcase
19-
"require.onError": "__webpack_require__.oe" // eslint-disable-line camelcase
14+
__webpack_require__: "__webpack_require__",
15+
__webpack_public_path__: "__webpack_require__.p",
16+
__webpack_modules__: "__webpack_require__.m",
17+
__webpack_chunk_load__: "__webpack_require__.e",
18+
__non_webpack_require__: "require",
19+
__webpack_nonce__: "__webpack_require__.nc",
20+
"require.onError": "__webpack_require__.oe"
21+
};
22+
const NO_WEBPACK_REQUIRE = {
23+
__non_webpack_require__: true
2024
};
2125
const REPLACEMENT_TYPES = {
22-
__webpack_public_path__: "string", // eslint-disable-line camelcase
23-
__webpack_require__: "function", // eslint-disable-line camelcase
24-
__webpack_modules__: "object", // eslint-disable-line camelcase
25-
__webpack_chunk_load__: "function", // eslint-disable-line camelcase
26-
__webpack_nonce__: "string" // eslint-disable-line camelcase
26+
__webpack_public_path__: "string",
27+
__webpack_require__: "function",
28+
__webpack_modules__: "object",
29+
__webpack_chunk_load__: "function",
30+
__webpack_nonce__: "string"
2731
};
32+
/* eslint-enable camelcase */
2833

2934
class APIPlugin {
3035
apply(compiler) {
@@ -36,7 +41,7 @@ class APIPlugin {
3641

3742
normalModuleFactory.plugin(["parser javascript/auto", "parser javascript/dynamic", "parser javascript/esm"], parser => {
3843
Object.keys(REPLACEMENTS).forEach(key => {
39-
parser.plugin(`expression ${key}`, ParserHelpers.toConstantDependency(REPLACEMENTS[key]));
44+
parser.plugin(`expression ${key}`, NO_WEBPACK_REQUIRE[key] ? ParserHelpers.toConstantDependency(REPLACEMENTS[key]) : ParserHelpers.toConstantDependencyWithWebpackRequire(REPLACEMENTS[key]));
4045
parser.plugin(`evaluate typeof ${key}`, ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key]));
4146
});
4247
});

lib/DefinePlugin.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class DefinePlugin {
8484
res.setRange(expr.range);
8585
return res;
8686
});
87-
parser.plugin("expression " + key, ParserHelpers.toConstantDependency(code));
87+
parser.plugin("expression " + key, /__webpack_require__/.test(code) ? ParserHelpers.toConstantDependencyWithWebpackRequire(code) : ParserHelpers.toConstantDependency(code));
8888
}
8989
const typeofCode = isTypeof ? code : "typeof (" + code + ")";
9090
parser.plugin("evaluate typeof " + key, (expr) => {
@@ -115,7 +115,7 @@ class DefinePlugin {
115115
parser.plugin("can-rename " + key, ParserHelpers.approve);
116116
parser.plugin("evaluate Identifier " + key, (expr) => new BasicEvaluatedExpression().setTruthy().setRange(expr.range));
117117
parser.plugin("evaluate typeof " + key, ParserHelpers.evaluateToString("object"));
118-
parser.plugin("expression " + key, ParserHelpers.toConstantDependency(code));
118+
parser.plugin("expression " + key, /__webpack_require__/.test(code) ? ParserHelpers.toConstantDependencyWithWebpackRequire(code) : ParserHelpers.toConstantDependency(code));
119119
parser.plugin("typeof " + key, ParserHelpers.toConstantDependency(JSON.stringify("object")));
120120
};
121121

lib/ExtendedAPIPlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class ExtendedAPIPlugin {
4141

4242
normalModuleFactory.plugin(["parser javascript/auto", "parser javascript/dynamic", "parser javascript/esm"], (parser, parserOptions) => {
4343
Object.keys(REPLACEMENTS).forEach(key => {
44-
parser.plugin(`expression ${key}`, ParserHelpers.toConstantDependency(REPLACEMENTS[key]));
44+
parser.plugin(`expression ${key}`, ParserHelpers.toConstantDependencyWithWebpackRequire(REPLACEMENTS[key]));
4545
parser.plugin(`evaluate typeof ${key}`, ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key]));
4646
});
4747
});

lib/HotModuleReplacementPlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ module.exports = class HotModuleReplacementPlugin {
194194

195195
// TODO add HMR support for javascript/esm
196196
normalModuleFactory.plugin(["parser javascript/auto", "parser javascript/dynamic"], (parser, parserOptions) => {
197-
parser.plugin("expression __webpack_hash__", ParserHelpers.toConstantDependency("__webpack_require__.h()"));
197+
parser.plugin("expression __webpack_hash__", ParserHelpers.toConstantDependencyWithWebpackRequire("__webpack_require__.h()"));
198198
parser.plugin("evaluate typeof __webpack_hash__", ParserHelpers.evaluateToString("string"));
199199
parser.plugin("evaluate Identifier module.hot", expr => {
200200
return ParserHelpers.evaluateToIdentifier("module.hot", !!parser.state.compilation.hotUpdateChunkTemplate)(expr);

lib/NodeStuffPlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class NodeStuffPlugin {
6666
if(!parser.state.module) return;
6767
return ParserHelpers.evaluateToString(parser.state.module.context)(expr);
6868
});
69-
parser.plugin("expression require.main", ParserHelpers.toConstantDependency("__webpack_require__.c[__webpack_require__.s]"));
69+
parser.plugin("expression require.main", ParserHelpers.toConstantDependencyWithWebpackRequire("__webpack_require__.c[__webpack_require__.s]"));
7070
parser.plugin(
7171
"expression require.extensions",
7272
ParserHelpers.expressionIsUnsupported("require.extensions is not supported by webpack. Use a loader instead.")

lib/ParserHelpers.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,18 @@ ParserHelpers.requireFileAsExpression = (context, pathToModule) => {
3535
return "require(" + JSON.stringify(moduleJsPath) + ")";
3636
};
3737

38-
ParserHelpers.toConstantDependency = value => {
38+
ParserHelpers.toConstantDependency = (value) => {
3939
return function constDependency(expr) {
40-
var dep = new ConstDependency(value, expr.range);
40+
var dep = new ConstDependency(value, expr.range, false);
41+
dep.loc = expr.loc;
42+
this.state.current.addDependency(dep);
43+
return true;
44+
};
45+
};
46+
47+
ParserHelpers.toConstantDependencyWithWebpackRequire = (value) => {
48+
return function constDependencyWithWebpackRequire(expr) {
49+
var dep = new ConstDependency(value, expr.range, true);
4150
dep.loc = expr.loc;
4251
this.state.current.addDependency(dep);
4352
return true;
@@ -67,7 +76,7 @@ ParserHelpers.evaluateToIdentifier = (identifier, truthy) => {
6776

6877
ParserHelpers.expressionIsUnsupported = (message) => {
6978
return function unsupportedExpression(expr) {
70-
var dep = new ConstDependency("(void 0)", expr.range);
79+
var dep = new ConstDependency("(void 0)", expr.range, false);
7180
dep.loc = expr.loc;
7281
this.state.current.addDependency(dep);
7382
if(!this.state.module) return;

lib/RequireJsStuffPlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ module.exports = class RequireJsStuffPlugin {
2525
parser.plugin("call requirejs.config", ParserHelpers.toConstantDependency("undefined"));
2626

2727
parser.plugin("expression require.version", ParserHelpers.toConstantDependency(JSON.stringify("0.0.0")));
28-
parser.plugin("expression requirejs.onError", ParserHelpers.toConstantDependency("__webpack_require__.oe"));
28+
parser.plugin("expression requirejs.onError", ParserHelpers.toConstantDependencyWithWebpackRequire("__webpack_require__.oe"));
2929
});
3030
});
3131
}

lib/dependencies/CommonJsRequireDependencyParserPlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class CommonJsRequireDependencyParserPlugin {
3838
return true;
3939
};
4040

41-
parser.plugin("expression require.cache", ParserHelpers.toConstantDependency("__webpack_require__.c"));
41+
parser.plugin("expression require.cache", ParserHelpers.toConstantDependencyWithWebpackRequire("__webpack_require__.c"));
4242
parser.plugin("expression require", (expr) => {
4343
const dep = new CommonJsRequireContextDependency({
4444
request: options.unknownContextRequest,

lib/dependencies/ConstDependency.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66
const NullDependency = require("./NullDependency");
77

88
class ConstDependency extends NullDependency {
9-
constructor(expression, range) {
9+
constructor(expression, range, requireWebpackRequire) {
1010
super();
1111
this.expression = expression;
1212
this.range = range;
13+
this.requireWebpackRequire = requireWebpackRequire;
1314
}
1415

1516
updateHash(hash) {

test/statsCases/define-plugin/expected.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ Child
33
Hash: 3cc0d6b1ff5f64f9667a
44
Time: Xms
55
Asset Size Chunks Chunk Names
6-
main.js 2.64 KiB 0 [emitted] main
6+
main.js 2.62 KiB 0 [emitted] main
77
[0] ./index.js 24 bytes {0} [built]
88
Child
99
Hash: 5b4570daab591bb1c99b
1010
Time: Xms
1111
Asset Size Chunks Chunk Names
12-
main.js 2.64 KiB 0 [emitted] main
12+
main.js 2.62 KiB 0 [emitted] main
1313
[0] ./index.js 24 bytes {0} [built]

0 commit comments

Comments
 (0)