module: add createRequireFunction method
PR-URL: https://github.com/nodejs/node/pull/19360 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Jan Krems <jan.krems@gmail.com> Reviewed-By: Bradley Farias <bradley.meck@gmail.com> Reviewed-By: John-David Dalton <john.david.dalton@gmail.com>
This commit is contained in:
parent
e636addc3f
commit
246f6332e5
@ -888,12 +888,30 @@ by the [module wrapper][]. To access it, require the `Module` module:
|
||||
const builtin = require('module').builtinModules;
|
||||
```
|
||||
|
||||
### module.createRequireFromPath(filename)
|
||||
<!-- YAML
|
||||
added: REPLACEME
|
||||
-->
|
||||
|
||||
* `filename` {string} Filename to be used to construct the relative require
|
||||
function.
|
||||
* Returns: {[`require`][]} Require function
|
||||
|
||||
```js
|
||||
const { createRequireFromPath } = require('module');
|
||||
const requireUtil = createRequireFromPath('../src/utils');
|
||||
|
||||
// require `../src/utils/some-tool`
|
||||
requireUtil('./some-tool');
|
||||
```
|
||||
|
||||
[`__dirname`]: #modules_dirname
|
||||
[`__filename`]: #modules_filename
|
||||
[`Error`]: errors.html#errors_class_error
|
||||
[`module` object]: #modules_the_module_object
|
||||
[`path.dirname()`]: path.html#path_path_dirname_path
|
||||
[GLOBAL_FOLDERS]: #modules_loading_from_the_global_folders
|
||||
[`require`]: #modules_require
|
||||
[exports shortcut]: #modules_exports_shortcut
|
||||
[module resolution]: #modules_all_together
|
||||
[module wrapper]: #modules_the_module_wrapper
|
||||
|
@ -23,6 +23,7 @@
|
||||
|
||||
const { internalBinding, NativeModule } = require('internal/bootstrap/loaders');
|
||||
const util = require('util');
|
||||
const { pathToFileURL } = require('internal/url');
|
||||
const vm = require('vm');
|
||||
const assert = require('assert').ok;
|
||||
const fs = require('fs');
|
||||
@ -54,7 +55,6 @@ module.exports = Module;
|
||||
let asyncESM;
|
||||
let ModuleJob;
|
||||
let createDynamicModule;
|
||||
let pathToFileURL;
|
||||
let decorateErrorStack;
|
||||
|
||||
function lazyLoadESM() {
|
||||
@ -63,7 +63,6 @@ function lazyLoadESM() {
|
||||
createDynamicModule = require(
|
||||
'internal/modules/esm/create_dynamic_module');
|
||||
decorateErrorStack = require('internal/util').decorateErrorStack;
|
||||
pathToFileURL = require('internal/url').pathToFileURL;
|
||||
}
|
||||
|
||||
const {
|
||||
@ -750,6 +749,13 @@ Module.runMain = function() {
|
||||
process._tickCallback();
|
||||
};
|
||||
|
||||
Module.createRequireFromPath = (filename) => {
|
||||
const m = new Module(filename);
|
||||
m.filename = filename;
|
||||
m.paths = Module._nodeModulePaths(path.dirname(filename));
|
||||
return makeRequireFunction(m);
|
||||
};
|
||||
|
||||
Module._initPaths = function() {
|
||||
var homeDir;
|
||||
var nodePath;
|
||||
|
12
test/parallel/test-module-create-require.js
Normal file
12
test/parallel/test-module-create-require.js
Normal file
@ -0,0 +1,12 @@
|
||||
'use strict';
|
||||
|
||||
require('../common');
|
||||
const assert = require('assert');
|
||||
const path = require('path');
|
||||
|
||||
const { createRequireFromPath } = require('module');
|
||||
|
||||
const p = path.resolve(__dirname, '..', 'fixtures', 'fake.js');
|
||||
|
||||
const req = createRequireFromPath(p);
|
||||
assert.strictEqual(req('./baz'), 'perhaps I work');
|
Loading…
x
Reference in New Issue
Block a user