diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index fba416d4db35d6..3a983fd7bcf00f 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -217,16 +217,6 @@ function tryExtensions(p, exts, isMain) { return false; } -function readExtensions() { - const exts = Object.keys(Module._extensions); - for (var i = 0, j = 0; i < exts.length; ++i) { - if (path.extname(exts[i]) === '') - exts[j++] = exts[i]; - } - exts.length = j; - return exts; -} - var warned = false; Module._findPath = function(request, paths, isMain) { if (path.isAbsolute(request)) { @@ -283,7 +273,7 @@ Module._findPath = function(request, paths, isMain) { if (!filename) { // try it with each of the extensions if (exts === undefined) - exts = readExtensions(); + exts = Object.keys(Module._extensions); filename = tryExtensions(basePath, exts, isMain); } } @@ -291,7 +281,7 @@ Module._findPath = function(request, paths, isMain) { if (!filename && rc === 1) { // Directory. // try it with each of the extensions at "index" if (exts === undefined) - exts = readExtensions(); + exts = Object.keys(Module._extensions); filename = tryPackage(basePath, exts, isMain); if (!filename) { filename = tryExtensions(path.resolve(basePath, 'index'), exts, isMain); diff --git a/test/known_issues/test-module-deleted-extensions.js b/test/known_issues/test-module-deleted-extensions.js new file mode 100644 index 00000000000000..3a51e8725eec60 --- /dev/null +++ b/test/known_issues/test-module-deleted-extensions.js @@ -0,0 +1,18 @@ +'use strict'; +// Refs: https://github.com/nodejs/node/issues/4778 +const common = require('../common'); +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); +const tmpdir = require('../common/tmpdir'); +const file = path.join(tmpdir.path, 'test-extensions.foo.bar'); + +tmpdir.refresh(); +fs.writeFileSync(file, '', 'utf8'); +require.extensions['.foo.bar'] = (module, path) => {}; +delete require.extensions['.foo.bar']; +require.extensions['.bar'] = common.mustCall((module, path) => { + assert.strictEqual(module.id, file); + assert.strictEqual(path, file); +}); +require(path.join(tmpdir.path, 'test-extensions')); diff --git a/test/parallel/test-module-deleted-extensions.js b/test/parallel/test-module-deleted-extensions.js deleted file mode 100644 index f14da0a70f7656..00000000000000 --- a/test/parallel/test-module-deleted-extensions.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict'; - -// Refs: https://github.com/nodejs/node/issues/4778 - -const common = require('../common'); -const assert = require('assert'); -const fs = require('fs'); -const path = require('path'); -const tmpdir = require('../common/tmpdir'); -const file = path.join(tmpdir.path, 'test-extensions.foo.bar'); - -tmpdir.refresh(); -fs.writeFileSync(file, '', 'utf8'); - -{ - require.extensions['.bar'] = common.mustNotCall(); - require.extensions['.foo.bar'] = common.mustNotCall(); - const modulePath = path.join(tmpdir.path, 'test-extensions'); - assert.throws( - () => require(modulePath), - new Error(`Cannot find module '${modulePath}'`) - ); -} - -{ - delete require.extensions['.bar']; - require.extensions['.foo.bar'] = common.mustNotCall(); - const modulePath = path.join(tmpdir.path, 'test-extensions'); - assert.throws( - () => require(modulePath), - new Error(`Cannot find module '${modulePath}'`) - ); - assert.throws( - () => require(modulePath + '.foo'), - new Error(`Cannot find module '${modulePath}.foo'`) - ); -} - -{ - delete require.extensions['.bar']; - delete require.extensions['.foo.bar']; - const modulePath = path.join(tmpdir.path, 'test-extensions'); - assert.throws( - () => require(modulePath), - new Error(`Cannot find module '${modulePath}'`) - ); -} - -{ - delete require.extensions['.foo.bar']; - require.extensions['.bar'] = common.mustCall((module, path) => { - assert.strictEqual(module.id, file); - assert.strictEqual(path, file); - }); - - const modulePath = path.join(tmpdir.path, 'test-extensions.foo'); - require(modulePath); -}