Skip to content
Permalink
Browse files

module: allow passing a directory to createRequireFromPath

Fixes: #23710

PR-URL: #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>
  • Loading branch information...
gillesdemey authored and MylesBorins committed Oct 22, 2018
1 parent b884ceb commit e5c8be2bd0f34ea9b579164ac053fcd30b98d213
@@ -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);
};

@@ -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' });

0 comments on commit e5c8be2

Please sign in to comment.
You can’t perform that action at this time.