Skip to content

Commit

Permalink
module: mark DEP0019 as End-of-Life
Browse files Browse the repository at this point in the history
In certain cases, `require('.')` could resolve outside the package
directory. This behavior has been removed.

PR-URL: nodejs#26973
Refs: nodejs#3384
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
  • Loading branch information
BridgeAR committed Apr 3, 2019
1 parent 666c67e commit 75007d6
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 45 deletions.
10 changes: 6 additions & 4 deletions doc/api/deprecations.md
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,9 @@ code.
### DEP0019: require('.') resolved outside directory
<!-- YAML
changes:
- version: REPLACEME
pr-url: https://github.com/nodejs/node/pull/26973
description: Removed functionality.
- version:
- v4.8.6
- v6.12.0
Expand All @@ -452,11 +455,10 @@ changes:
description: Runtime deprecation.
-->

Type: Runtime
Type: End-of-Life

In certain cases, `require('.')` may resolve outside the package directory.
This behavior is deprecated and will be removed in a future major Node.js
release.
In certain cases, `require('.')` could resolve outside the package directory.
This behavior has been removed.

<a id="DEP0020"></a>
### DEP0020: Server.connections
Expand Down
46 changes: 10 additions & 36 deletions lib/internal/modules/cjs/loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ const {
CHAR_FORWARD_SLASH,
CHAR_BACKWARD_SLASH,
CHAR_COLON,
CHAR_DOT,
CHAR_UNDERSCORE,
CHAR_0,
CHAR_9,
Expand Down Expand Up @@ -306,7 +305,6 @@ function findLongestRegisteredExtension(filename) {
return '.js';
}

var warned = false;
Module._findPath = function(request, paths, isMain) {
if (path.isAbsolute(request)) {
paths = [''];
Expand Down Expand Up @@ -375,18 +373,6 @@ Module._findPath = function(request, paths, isMain) {
}

if (filename) {
// Warn once if '.' resolved outside the module dir
if (request === '.' && i > 0) {
if (!warned) {
warned = true;
process.emitWarning(
'warning: require(\'.\') resolved outside the package ' +
'directory. This functionality is deprecated and will be removed ' +
'soon.',
'DeprecationWarning', 'DEP0019');
}
}

Module._pathCache[cacheKey] = filename;
return filename;
}
Expand Down Expand Up @@ -490,35 +476,23 @@ Module._resolveLookupPaths = function(request, parent, newReturn) {
return (newReturn ? null : [request, []]);
}

// Check for non-relative path
if (request.length < 2 ||
request.charCodeAt(0) !== CHAR_DOT ||
(request.charCodeAt(1) !== CHAR_DOT &&
request.charCodeAt(1) !== CHAR_FORWARD_SLASH &&
(!isWindows || request.charCodeAt(1) !== CHAR_BACKWARD_SLASH))) {
var paths = modulePaths;
if (parent) {
if (!parent.paths)
paths = parent.paths = [];
else
paths = parent.paths.concat(paths);
}
// Check for node modules paths.
if (request.charAt(0) !== '.' ||
(request.length > 1 &&
request.charAt(1) !== '.' &&
request.charAt(1) !== '/' &&
(!isWindows || request.charAt(1) !== '\\'))) {

// Maintain backwards compat with certain broken uses of require('.')
// by putting the module's directory in front of the lookup paths.
if (request === '.') {
if (parent && parent.filename) {
paths.unshift(path.dirname(parent.filename));
} else {
paths.unshift(path.resolve(request));
}
let paths = modulePaths;
if (parent != null && parent.paths && parent.paths.length) {
paths = parent.paths.concat(paths);
}

debug('looking for %j in %j', request, paths);
return (newReturn ? (paths.length > 0 ? paths : null) : [request, paths]);
}

// with --eval, parent.id is not set and parent.filename is null
// With --eval, parent.id is not set and parent.filename is null.
if (!parent || !parent.id || !parent.filename) {
// Make require('./path/to/foo') work - normally the path is taken
// from realpath(__filename) but with eval there is no filename
Expand Down
11 changes: 6 additions & 5 deletions test/parallel/test-require-dot.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ assert.strictEqual(a, b);
process.env.NODE_PATH = fixtures.path('module-require', 'relative');
m._initPaths();

const c = require('.');
assert.strictEqual(
c.value,
42,
`require(".") should honor NODE_PATH; expected 42, found ${c.value}`
assert.throws(
() => require('.'),
{
message: /Cannot find module '\.'/,
code: 'MODULE_NOT_FOUND'
}
);

0 comments on commit 75007d6

Please sign in to comment.