From 75007d64c036bba8412df71b0aa34efee161799c Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Fri, 29 Mar 2019 03:11:41 +0100 Subject: [PATCH] module: mark DEP0019 as End-of-Life MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In certain cases, `require('.')` could resolve outside the package directory. This behavior has been removed. PR-URL: https://github.com/nodejs/node/pull/26973 Refs: https://github.com/nodejs/node/pull/3384 Reviewed-By: Michaƫl Zasso Reviewed-By: Matteo Collina --- doc/api/deprecations.md | 10 ++++--- lib/internal/modules/cjs/loader.js | 46 +++++++----------------------- test/parallel/test-require-dot.js | 11 +++---- 3 files changed, 22 insertions(+), 45 deletions(-) diff --git a/doc/api/deprecations.md b/doc/api/deprecations.md index eaf946a777dc52..4609d7be9380c7 100644 --- a/doc/api/deprecations.md +++ b/doc/api/deprecations.md @@ -442,6 +442,9 @@ code. ### DEP0019: require('.') resolved outside directory -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. ### DEP0020: Server.connections diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index 54bad5a444502a..2f06d355460125 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -70,7 +70,6 @@ const { CHAR_FORWARD_SLASH, CHAR_BACKWARD_SLASH, CHAR_COLON, - CHAR_DOT, CHAR_UNDERSCORE, CHAR_0, CHAR_9, @@ -306,7 +305,6 @@ function findLongestRegisteredExtension(filename) { return '.js'; } -var warned = false; Module._findPath = function(request, paths, isMain) { if (path.isAbsolute(request)) { paths = ['']; @@ -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; } @@ -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 diff --git a/test/parallel/test-require-dot.js b/test/parallel/test-require-dot.js index 423441cfcde435..7145e688d4759f 100644 --- a/test/parallel/test-require-dot.js +++ b/test/parallel/test-require-dot.js @@ -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' + } );