module: revert #3384 DEP0019 EOL
The original commit was landed without running CITGM. Unfortunately this change breaks the module `d` which has over 500k downloads a day. It is worth mentioning that the compatibility hack can be removed without breaking anything. We should definitely revisit for the next Semver-Major but shipping this today will cause non trivial ecosystem breakages. Refs: https://github.com/nodejs/node/pull/3384 PR-URL: https://github.com/nodejs/node/pull/16634 Refs: https://github.com/nodejs/node/pull/3384 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
parent
dfcaf280b7
commit
82790d84f2
@ -202,7 +202,7 @@ code.
|
|||||||
<a id="DEP0019"></a>
|
<a id="DEP0019"></a>
|
||||||
### DEP0019: require('.') resolved outside directory
|
### DEP0019: require('.') resolved outside directory
|
||||||
|
|
||||||
Type: End-of-Life
|
Type: Runtime
|
||||||
|
|
||||||
In certain cases, `require('.')` may resolve outside the package directory.
|
In certain cases, `require('.')` may resolve outside the package directory.
|
||||||
This behavior is deprecated and will be removed in a future major Node.js
|
This behavior is deprecated and will be removed in a future major Node.js
|
||||||
|
@ -176,6 +176,7 @@ function tryExtensions(p, exts, isMain) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var warned = false;
|
||||||
Module._findPath = function(request, paths, isMain) {
|
Module._findPath = function(request, paths, isMain) {
|
||||||
if (path.isAbsolute(request)) {
|
if (path.isAbsolute(request)) {
|
||||||
paths = [''];
|
paths = [''];
|
||||||
@ -232,6 +233,18 @@ Module._findPath = function(request, paths, isMain) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (filename) {
|
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;
|
Module._pathCache[cacheKey] = filename;
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
@ -334,7 +347,8 @@ Module._resolveLookupPaths = function(request, parent, newReturn) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check for relative path
|
// Check for relative path
|
||||||
if (request.charCodeAt(0) !== 46/*.*/ &&
|
if (request.length < 2 ||
|
||||||
|
request.charCodeAt(0) !== 46/*.*/ ||
|
||||||
(request.charCodeAt(1) !== 46/*.*/ &&
|
(request.charCodeAt(1) !== 46/*.*/ &&
|
||||||
request.charCodeAt(1) !== 47/*/*/)) {
|
request.charCodeAt(1) !== 47/*/*/)) {
|
||||||
var paths = modulePaths;
|
var paths = modulePaths;
|
||||||
@ -345,6 +359,16 @@ Module._resolveLookupPaths = function(request, parent, newReturn) {
|
|||||||
paths = parent.paths.concat(paths);
|
paths = parent.paths.concat(paths);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
debug('looking for %j in %j', request, paths);
|
debug('looking for %j in %j', request, paths);
|
||||||
return (newReturn ? (paths.length > 0 ? paths : null) : [request, paths]);
|
return (newReturn ? (paths.length > 0 ? paths : null) : [request, paths]);
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,9 @@ const b = require(fixtures.path('module-require', 'relative', 'dot-slash.js'));
|
|||||||
assert.strictEqual(a.value, 42);
|
assert.strictEqual(a.value, 42);
|
||||||
assert.strictEqual(a, b, 'require(".") should resolve like require("./")');
|
assert.strictEqual(a, b, 'require(".") should resolve like require("./")');
|
||||||
|
|
||||||
// require('.') should not lookup in NODE_PATH
|
|
||||||
process.env.NODE_PATH = fixtures.path('module-require', 'relative');
|
process.env.NODE_PATH = fixtures.path('module-require', 'relative');
|
||||||
m._initPaths();
|
m._initPaths();
|
||||||
assert.throws(() => { require('.'); }, Error, "Cannot find module '.'");
|
|
||||||
|
const c = require('.');
|
||||||
|
|
||||||
|
assert.strictEqual(c.value, 42, 'require(".") should honor NODE_PATH');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user