mirror of https://github.com/nodejs/node.git
module,repl: remove repl require() hack
Remove a hack that was introduced in commit bb6d468d
from November 2010.
This is groundwork for a follow-up commit that makes it possible to use
internal modules in lib/repl.js.
PR-URL: https://github.com/nodejs/node/pull/4026
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
parent
f4f1e89bf1
commit
ee72ee7531
|
@ -5,7 +5,7 @@ const path = require('path');
|
||||||
const net = require('net');
|
const net = require('net');
|
||||||
const vm = require('vm');
|
const vm = require('vm');
|
||||||
const Module = require('module');
|
const Module = require('module');
|
||||||
const repl = Module.requireRepl();
|
const repl = require('repl');
|
||||||
const inherits = util.inherits;
|
const inherits = util.inherits;
|
||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
const spawn = require('child_process').spawn;
|
const spawn = require('child_process').spawn;
|
||||||
|
|
|
@ -1,6 +1,30 @@
|
||||||
'use strict';
|
'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)
|
* Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
|
||||||
|
|
|
@ -274,17 +274,6 @@ Module._load = function(request, parent, isMain) {
|
||||||
debug('Module._load REQUEST %s parent: %s', request, parent.id);
|
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 filename = Module._resolveFilename(request, parent);
|
||||||
|
|
||||||
var cachedModule = Module._cache[filename];
|
var cachedModule = Module._cache[filename];
|
||||||
|
@ -376,27 +365,9 @@ var resolvedArgv;
|
||||||
// the file.
|
// the file.
|
||||||
// Returns exception, if any.
|
// Returns exception, if any.
|
||||||
Module.prototype._compile = function(content, filename) {
|
Module.prototype._compile = function(content, filename) {
|
||||||
var self = this;
|
|
||||||
// remove shebang
|
// remove shebang
|
||||||
content = content.replace(shebangRe, '');
|
content = content.replace(shebangRe, '');
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
var dirname = path.dirname(filename);
|
|
||||||
|
|
||||||
// create wrapper function
|
// create wrapper function
|
||||||
var wrapper = Module.wrap(content);
|
var wrapper = Module.wrap(content);
|
||||||
|
|
||||||
|
@ -421,8 +392,10 @@ Module.prototype._compile = function(content, filename) {
|
||||||
global.v8debug.Debug.setBreakPoint(compiledWrapper, 0, 0);
|
global.v8debug.Debug.setBreakPoint(compiledWrapper, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var args = [self.exports, require, self, filename, dirname];
|
const dirname = path.dirname(filename);
|
||||||
return compiledWrapper.apply(self.exports, args);
|
const require = internalModule.makeRequireFunction.call(this);
|
||||||
|
const args = [this.exports, require, this, filename, dirname];
|
||||||
|
return compiledWrapper.apply(this.exports, args);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -488,10 +461,10 @@ Module._initPaths = function() {
|
||||||
Module.globalPaths = modulePaths.slice(0);
|
Module.globalPaths = modulePaths.slice(0);
|
||||||
};
|
};
|
||||||
|
|
||||||
// bootstrap repl
|
// TODO(bnoordhuis) Unused, remove in the future.
|
||||||
Module.requireRepl = function() {
|
Module.requireRepl = internalUtil.deprecate(function() {
|
||||||
return Module._load('internal/repl', '.');
|
return NativeModule.require('internal/repl');
|
||||||
};
|
}, 'Module.requireRepl is deprecated.');
|
||||||
|
|
||||||
Module._preloadModules = function(requests) {
|
Module._preloadModules = function(requests) {
|
||||||
if (!Array.isArray(requests))
|
if (!Array.isArray(requests))
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
const internalModule = require('internal/module');
|
||||||
const util = require('util');
|
const util = require('util');
|
||||||
const inherits = util.inherits;
|
const inherits = util.inherits;
|
||||||
const Stream = require('stream');
|
const Stream = require('stream');
|
||||||
|
@ -29,6 +30,7 @@ const path = require('path');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const Interface = require('readline').Interface;
|
const Interface = require('readline').Interface;
|
||||||
const Console = require('console').Console;
|
const Console = require('console').Console;
|
||||||
|
const Module = require('module');
|
||||||
const domain = require('domain');
|
const domain = require('domain');
|
||||||
const debug = util.debuglog('repl');
|
const debug = util.debuglog('repl');
|
||||||
|
|
||||||
|
@ -522,6 +524,8 @@ REPLServer.prototype.createContext = function() {
|
||||||
context.global.global = context;
|
context.global.global = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const module = new Module('<repl>');
|
||||||
|
const require = internalModule.makeRequireFunction.call(module);
|
||||||
context.module = module;
|
context.module = module;
|
||||||
context.require = require;
|
context.require = require;
|
||||||
|
|
||||||
|
@ -661,7 +665,7 @@ REPLServer.prototype.complete = function(line, callback) {
|
||||||
completionGroupsLoaded();
|
completionGroupsLoaded();
|
||||||
} else if (match = line.match(requireRE)) {
|
} else if (match = line.match(requireRE)) {
|
||||||
// require('...<Tab>')
|
// 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('|') +
|
var indexRe = new RegExp('^index(' + exts.map(regexpEscape).join('|') +
|
||||||
')$');
|
')$');
|
||||||
|
|
||||||
|
|
|
@ -144,7 +144,7 @@
|
||||||
// If -i or --interactive were passed, or stdin is a TTY.
|
// If -i or --interactive were passed, or stdin is a TTY.
|
||||||
if (process._forceRepl || NativeModule.require('tty').isatty(0)) {
|
if (process._forceRepl || NativeModule.require('tty').isatty(0)) {
|
||||||
// REPL
|
// REPL
|
||||||
var cliRepl = Module.requireRepl();
|
var cliRepl = NativeModule.require('internal/repl');
|
||||||
cliRepl.createInternalRepl(process.env, function(err, repl) {
|
cliRepl.createInternalRepl(process.env, function(err, repl) {
|
||||||
if (err) {
|
if (err) {
|
||||||
throw err;
|
throw err;
|
||||||
|
|
|
@ -278,6 +278,10 @@ function error_test() {
|
||||||
expect: 'undefined\n' + prompt_unix },
|
expect: 'undefined\n' + prompt_unix },
|
||||||
{ client: client_unix, send: '/* \'\n"\n\'"\'\n*/',
|
{ client: client_unix, send: '/* \'\n"\n\'"\'\n*/',
|
||||||
expect: 'undefined\n' + prompt_unix },
|
expect: 'undefined\n' + prompt_unix },
|
||||||
|
// REPL should get a normal require() function, not one that allows
|
||||||
|
// access to internal modules without the --expose_internals flag.
|
||||||
|
{ client: client_unix, send: 'require("internal/repl")',
|
||||||
|
expect: /^Error: Cannot find module 'internal\/repl'/ },
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue