Skip to content

Commit

Permalink
Handle module.require, require.main.require, and module.parent.require
Browse files Browse the repository at this point in the history
- Resolve module.require dependencies

- Add require.main.require and module.parent.require as unsupported
  • Loading branch information
ak-14 committed Jul 19, 2018
1 parent 9fd6af8 commit 80c3e43
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 80c3e43

Please sign in to comment.