module: allow passing a directory to createRequireFromPath
Fixes: https://github.com/nodejs/node/issues/23710 PR-URL: https://github.com/nodejs/node/pull/23818 Reviewed-By: Guy Bedford <guybedford@gmail.com> Reviewed-By: Myles Borins <myles.borins@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
parent
b884ceb518
commit
e5c8be2bd0
@ -916,7 +916,7 @@ added: v10.12.0
|
||||
|
||||
```js
|
||||
const { createRequireFromPath } = require('module');
|
||||
const requireUtil = createRequireFromPath('../src/utils');
|
||||
const requireUtil = createRequireFromPath('../src/utils/');
|
||||
|
||||
// Require `../src/utils/some-tool`
|
||||
requireUtil('./some-tool');
|
||||
|
@ -825,9 +825,18 @@ Module.runMain = function() {
|
||||
};
|
||||
|
||||
Module.createRequireFromPath = (filename) => {
|
||||
const m = new Module(filename);
|
||||
m.filename = filename;
|
||||
m.paths = Module._nodeModulePaths(path.dirname(filename));
|
||||
// Allow a directory to be passed as the filename
|
||||
const trailingSlash =
|
||||
filename.endsWith(path.sep) || path.sep !== '/' && filename.endsWith('\\');
|
||||
|
||||
const proxyPath = trailingSlash ?
|
||||
path.join(filename, 'noop.js') :
|
||||
filename;
|
||||
|
||||
const m = new Module(proxyPath);
|
||||
m.filename = proxyPath;
|
||||
|
||||
m.paths = Module._nodeModulePaths(m.path);
|
||||
return makeRequireFunction(m);
|
||||
};
|
||||
|
||||
|
18
test/parallel/test-module-create-require-from-directory.js
Normal file
18
test/parallel/test-module-create-require-from-directory.js
Normal file
@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
|
||||
require('../common');
|
||||
const assert = require('assert');
|
||||
const path = require('path');
|
||||
|
||||
const { createRequireFromPath } = require('module');
|
||||
|
||||
const fixPath = path.resolve(__dirname, '..', 'fixtures');
|
||||
const p = path.join(fixPath, path.sep);
|
||||
|
||||
const req = createRequireFromPath(p);
|
||||
const reqFromNotDir = createRequireFromPath(fixPath);
|
||||
|
||||
assert.strictEqual(req('./baz'), 'perhaps I work');
|
||||
assert.throws(() => {
|
||||
reqFromNotDir('./baz');
|
||||
}, { code: 'MODULE_NOT_FOUND' });
|
Loading…
x
Reference in New Issue
Block a user