Skip to content

Commit 1ed36ae

Browse files
bmeckBridgeAR
authored andcommitted
module: check file ext before dir as documented
The documented resolution algorithm started to search for package.json files prior to searching for file extensions when searching for a specifier. Oddly, it did not search for index files at same time it searched for package.json. This restores the documented behavior of searching for file extensions prior to searching directories. PR-URL: #15015 Fixes: #14990 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Evan Lucas <evanlucas@me.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Khaidi Chu <i@2333.moe>
1 parent 8b69d4a commit 1ed36ae

File tree

4 files changed

+42
-7
lines changed

4 files changed

+42
-7
lines changed

lib/module.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,9 @@ Module._findPath = function(request, paths, isMain) {
219219
var exts;
220220
var trailingSlash = request.length > 0 &&
221221
request.charCodeAt(request.length - 1) === CHAR_FORWARD_SLASH;
222+
if (!trailingSlash) {
223+
trailingSlash = /(?:^|\/)\.?\.$/.test(request);
224+
}
222225

223226
// For each path
224227
for (var i = 0; i < paths.length; i++) {
@@ -236,10 +239,6 @@ Module._findPath = function(request, paths, isMain) {
236239
} else {
237240
filename = toRealPath(basePath);
238241
}
239-
} else if (rc === 1) { // Directory.
240-
if (exts === undefined)
241-
exts = Object.keys(Module._extensions);
242-
filename = tryPackage(basePath, exts, isMain);
243242
}
244243

245244
if (!filename) {
@@ -251,11 +250,13 @@ Module._findPath = function(request, paths, isMain) {
251250
}
252251

253252
if (!filename && rc === 1) { // Directory.
253+
// try it with each of the extensions at "index"
254254
if (exts === undefined)
255255
exts = Object.keys(Module._extensions);
256-
filename = tryPackage(basePath, exts, isMain) ||
257-
// try it with each of the extensions at "index"
258-
tryExtensions(path.resolve(basePath, 'index'), exts, isMain);
256+
filename = tryPackage(basePath, exts, isMain);
257+
if (!filename) {
258+
filename = tryExtensions(path.resolve(basePath, 'index'), exts, isMain);
259+
}
259260
}
260261

261262
if (filename) {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = {};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"main": "./package.json"
3+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
'use strict';
2+
// fixes regression from v4
3+
require('../common');
4+
const assert = require('assert');
5+
const fixtures = require('../common/fixtures');
6+
const path = require('path');
7+
8+
const fixturesRequire = require(
9+
fixtures.path('module-extension-over-directory', 'inner'));
10+
11+
assert.strictEqual(
12+
fixturesRequire,
13+
require(fixtures.path('module-extension-over-directory', 'inner.js')),
14+
'test-require-extension-over-directory failed to import fixture' +
15+
' requirements'
16+
);
17+
18+
const fakePath = [
19+
fixtures.path('module-extension-over-directory', 'inner'),
20+
'fake',
21+
'..'
22+
].join(path.sep);
23+
const fixturesRequireDir = require(fakePath);
24+
25+
assert.strictEqual(
26+
fixturesRequireDir,
27+
require(fixtures.path('module-extension-over-directory', 'inner/')),
28+
'test-require-extension-over-directory failed to import fixture' +
29+
' requirements'
30+
);

0 commit comments

Comments
 (0)