Skip to content

Commit

Permalink
Merge pull request #7750 from ak-14/node-dependencies
Browse files Browse the repository at this point in the history
Handle module.require, require.main.require, and module.parent.require
  • Loading branch information
sokra committed Jul 23, 2018
2 parents 945a951 + 80c3e43 commit 699fe21
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 0 deletions.
18 changes: 18 additions & 0 deletions lib/NodeStuffPlugin.js
Expand Up @@ -108,6 +108,24 @@ class NodeStuffPlugin {
"require.extensions is not supported by webpack. Use a loader instead."
)
);
parser.hooks.expression
.for("require.main.require")
.tap(
"NodeStuffPlugin",
ParserHelpers.expressionIsUnsupported(
parser,
"require.main.require is not supported by webpack."
)
);
parser.hooks.expression
.for("module.parent.require")
.tap(
"NodeStuffPlugin",
ParserHelpers.expressionIsUnsupported(
parser,
"module.parent.require is not supported by webpack."
)
);
parser.hooks.expression
.for("module.loaded")
.tap("NodeStuffPlugin", expr => {
Expand Down
6 changes: 6 additions & 0 deletions lib/dependencies/CommonJsRequireDependencyParserPlugin.js
Expand Up @@ -125,6 +125,12 @@ class CommonJsRequireDependencyParserPlugin {
parser.hooks.new
.for("require")
.tap("CommonJsRequireDependencyParserPlugin", createHandler(true));
parser.hooks.call
.for("module.require")
.tap("CommonJsRequireDependencyParserPlugin", createHandler(false));
parser.hooks.new
.for("module.require")
.tap("CommonJsRequireDependencyParserPlugin", createHandler(true));
}
}
module.exports = CommonJsRequireDependencyParserPlugin;
36 changes: 36 additions & 0 deletions test/Errors.test.js
Expand Up @@ -94,6 +94,42 @@ describe("Errors", () => {
}
);
});
it("should report require.main.require as unsupported", done => {
getErrors(
{
mode: "development",
entry: "./require.main.require"
},
(errors, warnings) => {
expect(errors).toHaveLength(0);
expect(warnings).toHaveLength(1);
const lines = warnings[0].split("\n");
expect(lines[0]).toMatch(/require.main.require\.js/);
expect(lines[1]).toMatch(
/require.main.require is not supported by webpack/
);
done();
}
);
});
it("should report module.parent.require as unsupported", done => {
getErrors(
{
mode: "development",
entry: "./module.parent.require"
},
(errors, warnings) => {
expect(errors).toHaveLength(0);
expect(warnings).toHaveLength(1);
const lines = warnings[0].split("\n");
expect(lines[0]).toMatch(/module.parent.require\.js/);
expect(lines[1]).toMatch(
/module.parent.require is not supported by webpack/
);
done();
}
);
});
it("should warn about case-sensitive module names", done => {
getErrors(
{
Expand Down
3 changes: 3 additions & 0 deletions test/cases/parsing/issue-7728/a.js
@@ -0,0 +1,3 @@
export default function test() {
return "OK";
}
4 changes: 4 additions & 0 deletions test/cases/parsing/issue-7728/index.js
@@ -0,0 +1,4 @@
it("should detect module.require dependency", function () {
var test1 = module.require('./a').default;
expect(test1()).toBe("OK");
});
1 change: 1 addition & 0 deletions test/fixtures/errors/module.parent.require.js
@@ -0,0 +1 @@
module.parent.require('./file');
1 change: 1 addition & 0 deletions test/fixtures/errors/require.main.require.js
@@ -0,0 +1 @@
require.main.require('./file');

0 comments on commit 699fe21

Please sign in to comment.