'use strict';
-module.exports.stripBOM = stripBOM;
+module.exports = { makeRequireFunction, stripBOM };
+
+// Invoke with makeRequireFunction.call(module) where |module| is the
+// Module object to use as the context for the require() function.
+function makeRequireFunction() {
+ const Module = this.constructor;
+ const self = this;
+
+ function require(path) {
+ return self.require(path);
+ }
+
+ require.resolve = function(request) {
+ return Module._resolveFilename(request, self);
+ };
+
+ require.main = process.mainModule;
+
+ // Enable support to add extra extension types.
+ require.extensions = Module._extensions;
+
+ require.cache = Module._cache;
+
+ return require;
+}
/**
* Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
debug('Module._load REQUEST %s parent: %s', request, parent.id);
}
- // REPL is a special case, because it needs the real require.
- if (request === 'internal/repl' || request === 'repl') {
- if (Module._cache[request]) {
- return Module._cache[request];
- }
- var replModule = new Module(request);
- replModule._compile(NativeModule.getSource(request), `${request}.js`);
- NativeModule._cache[request] = replModule;
- return replModule.exports;
- }
-
var filename = Module._resolveFilename(request, parent);
var cachedModule = Module._cache[filename];
// the file.
// Returns exception, if any.
Module.prototype._compile = function(content, filename) {
- var self = this;
// remove shebang
content = content.replace(shebangRe, '');
- function require(path) {
- return self.require(path);
- }
-
- require.resolve = function(request) {
- return Module._resolveFilename(request, self);
- };
-
- Object.defineProperty(require, 'paths', { get: function() {
- throw new Error('require.paths is removed. Use ' +
- 'node_modules folders, or the NODE_PATH ' +
- 'environment variable instead.');
- }});
-
- require.main = process.mainModule;
-
- // Enable support to add extra extension types
- require.extensions = Module._extensions;
- require.registerExtension = function() {
- throw new Error('require.registerExtension() removed. Use ' +
- 'require.extensions instead.');
- };
-
- require.cache = Module._cache;
-
- var dirname = path.dirname(filename);
-
// create wrapper function
var wrapper = Module.wrap(content);
global.v8debug.Debug.setBreakPoint(compiledWrapper, 0, 0);
}
}
- var args = [self.exports, require, self, filename, dirname];
- return compiledWrapper.apply(self.exports, args);
+ const dirname = path.dirname(filename);
+ const require = internalModule.makeRequireFunction.call(this);
+
+ Object.defineProperty(require, 'paths', { get: function() {
+ throw new Error('require.paths is removed. Use ' +
+ 'node_modules folders, or the NODE_PATH ' +
+ 'environment variable instead.');
+ }});
+
+ require.registerExtension = function() {
+ throw new Error('require.registerExtension() removed. Use ' +
+ 'require.extensions instead.');
+ };
+
+ const args = [this.exports, require, this, filename, dirname];
+ return compiledWrapper.apply(this.exports, args);
};
Module.globalPaths = modulePaths.slice(0);
};
-// bootstrap repl
-Module.requireRepl = function() {
- return Module._load('internal/repl', '.');
-};
+// TODO(bnoordhuis) Unused, remove in the future.
+Module.requireRepl = internalUtil.deprecate(function() {
+ return NativeModule.require('internal/repl');
+}, 'Module.requireRepl is deprecated.');
Module._preloadModules = function(requests) {
if (!Array.isArray(requests))
'use strict';
+const internalModule = require('internal/module');
const util = require('util');
const inherits = util.inherits;
const Stream = require('stream');
const fs = require('fs');
const rl = require('readline');
const Console = require('console').Console;
+const Module = require('module');
const domain = require('domain');
const debug = util.debuglog('repl');
context.global.global = context;
}
+ const module = new Module('<repl>');
+ const require = internalModule.makeRequireFunction.call(module);
context.module = module;
context.require = require;
completionGroupsLoaded();
} else if (match = line.match(requireRE)) {
// require('...<Tab>')
- var exts = Object.keys(require.extensions);
+ const exts = Object.keys(this.context.require.extensions);
var indexRe = new RegExp('^index(' + exts.map(regexpEscape).join('|') +
')$');