Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 8988e1e

Browse filesBrowse files
bnoordhuisrvagg
authored andcommitted
module,repl: remove repl require() hack
Remove a hack that was introduced in commit bb6d468 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: #4026 Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
1 parent a2b7596 commit 8988e1e
Copy full SHA for 8988e1e

File tree

Expand file treeCollapse file tree

6 files changed

+44
-39
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

6 files changed

+44
-39
lines changed
Open diff view settings
Collapse file

‎lib/_debugger.js‎

Copy file name to clipboardExpand all lines: lib/_debugger.js
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const path = require('path');
55
const net = require('net');
66
const vm = require('vm');
77
const Module = require('module');
8-
const repl = Module.requireRepl();
8+
const repl = require('repl');
99
const inherits = util.inherits;
1010
const assert = require('assert');
1111
const spawn = require('child_process').spawn;
Collapse file

‎lib/internal/module.js‎

Copy file name to clipboardExpand all lines: lib/internal/module.js
+25-1Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,30 @@
11
'use strict';
22

3-
module.exports.stripBOM = stripBOM;
3+
module.exports = { makeRequireFunction, stripBOM };
4+
5+
// Invoke with makeRequireFunction.call(module) where |module| is the
6+
// Module object to use as the context for the require() function.
7+
function makeRequireFunction() {
8+
const Module = this.constructor;
9+
const self = this;
10+
11+
function require(path) {
12+
return self.require(path);
13+
}
14+
15+
require.resolve = function(request) {
16+
return Module._resolveFilename(request, self);
17+
};
18+
19+
require.main = process.mainModule;
20+
21+
// Enable support to add extra extension types.
22+
require.extensions = Module._extensions;
23+
24+
require.cache = Module._cache;
25+
26+
return require;
27+
}
428

529
/**
630
* Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
Collapse file

‎lib/module.js‎

Copy file name to clipboardExpand all lines: lib/module.js
+8-35Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -274,17 +274,6 @@ Module._load = function(request, parent, isMain) {
274274
debug('Module._load REQUEST %s parent: %s', request, parent.id);
275275
}
276276

277-
// REPL is a special case, because it needs the real require.
278-
if (request === 'internal/repl' || request === 'repl') {
279-
if (Module._cache[request]) {
280-
return Module._cache[request];
281-
}
282-
var replModule = new Module(request);
283-
replModule._compile(NativeModule.getSource(request), `${request}.js`);
284-
NativeModule._cache[request] = replModule;
285-
return replModule.exports;
286-
}
287-
288277
var filename = Module._resolveFilename(request, parent);
289278

290279
var cachedModule = Module._cache[filename];
@@ -376,27 +365,9 @@ var resolvedArgv;
376365
// the file.
377366
// Returns exception, if any.
378367
Module.prototype._compile = function(content, filename) {
379-
var self = this;
380368
// remove shebang
381369
content = content.replace(shebangRe, '');
382370

383-
function require(path) {
384-
return self.require(path);
385-
}
386-
387-
require.resolve = function(request) {
388-
return Module._resolveFilename(request, self);
389-
};
390-
391-
require.main = process.mainModule;
392-
393-
// Enable support to add extra extension types
394-
require.extensions = Module._extensions;
395-
396-
require.cache = Module._cache;
397-
398-
var dirname = path.dirname(filename);
399-
400371
// create wrapper function
401372
var wrapper = Module.wrap(content);
402373

@@ -421,8 +392,10 @@ Module.prototype._compile = function(content, filename) {
421392
global.v8debug.Debug.setBreakPoint(compiledWrapper, 0, 0);
422393
}
423394
}
424-
var args = [self.exports, require, self, filename, dirname];
425-
return compiledWrapper.apply(self.exports, args);
395+
const dirname = path.dirname(filename);
396+
const require = internalModule.makeRequireFunction.call(this);
397+
const args = [this.exports, require, this, filename, dirname];
398+
return compiledWrapper.apply(this.exports, args);
426399
};
427400

428401

@@ -488,10 +461,10 @@ Module._initPaths = function() {
488461
Module.globalPaths = modulePaths.slice(0);
489462
};
490463

491-
// bootstrap repl
492-
Module.requireRepl = function() {
493-
return Module._load('internal/repl', '.');
494-
};
464+
// TODO(bnoordhuis) Unused, remove in the future.
465+
Module.requireRepl = internalUtil.deprecate(function() {
466+
return NativeModule.require('internal/repl');
467+
}, 'Module.requireRepl is deprecated.');
495468

496469
Module._preloadModules = function(requests) {
497470
if (!Array.isArray(requests))
Collapse file

‎lib/repl.js‎

Copy file name to clipboardExpand all lines: lib/repl.js
+5-1Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
'use strict';
2323

24+
const internalModule = require('internal/module');
2425
const util = require('util');
2526
const inherits = util.inherits;
2627
const Stream = require('stream');
@@ -29,6 +30,7 @@ const path = require('path');
2930
const fs = require('fs');
3031
const Interface = require('readline').Interface;
3132
const Console = require('console').Console;
33+
const Module = require('module');
3234
const domain = require('domain');
3335
const debug = util.debuglog('repl');
3436

@@ -522,6 +524,8 @@ REPLServer.prototype.createContext = function() {
522524
context.global.global = context;
523525
}
524526

527+
const module = new Module('<repl>');
528+
const require = internalModule.makeRequireFunction.call(module);
525529
context.module = module;
526530
context.require = require;
527531

@@ -661,7 +665,7 @@ REPLServer.prototype.complete = function(line, callback) {
661665
completionGroupsLoaded();
662666
} else if (match = line.match(requireRE)) {
663667
// require('...<Tab>')
664-
var exts = Object.keys(require.extensions);
668+
const exts = Object.keys(this.context.require.extensions);
665669
var indexRe = new RegExp('^index(' + exts.map(regexpEscape).join('|') +
666670
')$');
667671

Collapse file

‎src/node.js‎

Copy file name to clipboardExpand all lines: src/node.js
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@
144144
// If -i or --interactive were passed, or stdin is a TTY.
145145
if (process._forceRepl || NativeModule.require('tty').isatty(0)) {
146146
// REPL
147-
var cliRepl = Module.requireRepl();
147+
var cliRepl = NativeModule.require('internal/repl');
148148
cliRepl.createInternalRepl(process.env, function(err, repl) {
149149
if (err) {
150150
throw err;
Collapse file

‎test/parallel/test-repl.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-repl.js
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,10 @@ function error_test() {
278278
expect: 'undefined\n' + prompt_unix },
279279
{ client: client_unix, send: '/* \'\n"\n\'"\'\n*/',
280280
expect: 'undefined\n' + prompt_unix },
281+
// REPL should get a normal require() function, not one that allows
282+
// access to internal modules without the --expose_internals flag.
283+
{ client: client_unix, send: 'require("internal/repl")',
284+
expect: /^Error: Cannot find module 'internal\/repl'/ },
281285
]);
282286
}
283287

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.