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;
|
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
|
[`__dirname`]: #modules_dirname
|
||||||
[`__filename`]: #modules_filename
|
[`__filename`]: #modules_filename
|
||||||
[`Error`]: errors.html#errors_class_error
|
[`Error`]: errors.html#errors_class_error
|
||||||
[`module` object]: #modules_the_module_object
|
[`module` object]: #modules_the_module_object
|
||||||
[`path.dirname()`]: path.html#path_path_dirname_path
|
[`path.dirname()`]: path.html#path_path_dirname_path
|
||||||
[GLOBAL_FOLDERS]: #modules_loading_from_the_global_folders
|
[GLOBAL_FOLDERS]: #modules_loading_from_the_global_folders
|
||||||
|
[`require`]: #modules_require
|
||||||
[exports shortcut]: #modules_exports_shortcut
|
[exports shortcut]: #modules_exports_shortcut
|
||||||
[module resolution]: #modules_all_together
|
[module resolution]: #modules_all_together
|
||||||
[module wrapper]: #modules_the_module_wrapper
|
[module wrapper]: #modules_the_module_wrapper
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
const { internalBinding, NativeModule } = require('internal/bootstrap/loaders');
|
const { internalBinding, NativeModule } = require('internal/bootstrap/loaders');
|
||||||
const util = require('util');
|
const util = require('util');
|
||||||
|
const { pathToFileURL } = require('internal/url');
|
||||||
const vm = require('vm');
|
const vm = require('vm');
|
||||||
const assert = require('assert').ok;
|
const assert = require('assert').ok;
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
@ -54,7 +55,6 @@ module.exports = Module;
|
|||||||
let asyncESM;
|
let asyncESM;
|
||||||
let ModuleJob;
|
let ModuleJob;
|
||||||
let createDynamicModule;
|
let createDynamicModule;
|
||||||
let pathToFileURL;
|
|
||||||
let decorateErrorStack;
|
let decorateErrorStack;
|
||||||
|
|
||||||
function lazyLoadESM() {
|
function lazyLoadESM() {
|
||||||
@ -63,7 +63,6 @@ function lazyLoadESM() {
|
|||||||
createDynamicModule = require(
|
createDynamicModule = require(
|
||||||
'internal/modules/esm/create_dynamic_module');
|
'internal/modules/esm/create_dynamic_module');
|
||||||
decorateErrorStack = require('internal/util').decorateErrorStack;
|
decorateErrorStack = require('internal/util').decorateErrorStack;
|
||||||
pathToFileURL = require('internal/url').pathToFileURL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const {
|
const {
|
||||||
@ -750,6 +749,13 @@ Module.runMain = function() {
|
|||||||
process._tickCallback();
|
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() {
|
Module._initPaths = function() {
|
||||||
var homeDir;
|
var homeDir;
|
||||||
var nodePath;
|
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