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
|
```js
|
||||||
const { createRequireFromPath } = require('module');
|
const { createRequireFromPath } = require('module');
|
||||||
const requireUtil = createRequireFromPath('../src/utils');
|
const requireUtil = createRequireFromPath('../src/utils/');
|
||||||
|
|
||||||
// Require `../src/utils/some-tool`
|
// Require `../src/utils/some-tool`
|
||||||
requireUtil('./some-tool');
|
requireUtil('./some-tool');
|
||||||
|
@ -825,9 +825,18 @@ Module.runMain = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Module.createRequireFromPath = (filename) => {
|
Module.createRequireFromPath = (filename) => {
|
||||||
const m = new Module(filename);
|
// Allow a directory to be passed as the filename
|
||||||
m.filename = filename;
|
const trailingSlash =
|
||||||
m.paths = Module._nodeModulePaths(path.dirname(filename));
|
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);
|
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