Skip to content

Commit 3700a8c

Browse files
committed
loadmodule jshint errors fixed
1 parent a9e0440 commit 3700a8c

File tree

5 files changed

+57
-48
lines changed

5 files changed

+57
-48
lines changed

loadmodule/anothermodule.js

Lines changed: 0 additions & 7 deletions
This file was deleted.

loadmodule/loadmodule.js

Lines changed: 36 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,49 @@
11
/*jshint globalstrict: true*/
22
/*jshint node: true */
3+
/*jshint latedef: false */
4+
/*jshint unused:false*/
35
"use strict";
4-
var fs = require('fs');
5-
var req = require;
6+
7+
const fs = require('fs');
8+
//save the original require
9+
let originalRequire = require;
10+
611
function loadModule(filename, module, require) {
7-
var wrappedSrc = '( function( module, exports, require) {' +
8-
fs.readFileSync(filename, 'utf8') +
9-
'})( module, module.exports, require);';
10-
eval(wrappedSrc); //jshint ignore:line
12+
const wrappedSrc =
13+
`(function(module, exports, require) {
14+
${fs.readFileSync(filename, 'utf8')}
15+
})(module, module.exports, require);`;
16+
eval(wrappedSrc); // jshint ignore:line
1117
}
1218

13-
var require = function(moduleName) {
14-
console.log('Require invoked for module: ' + moduleName);
15-
var id = require.resolve(moduleName);
16-
//[ 1]
17-
if (require.cache[id]) {
18-
//[ 2]
19+
// We intentionally use var in the next line to avoid "SyntaxError: Identifier 'require' has already been declared"
20+
var require = (moduleName) => {
21+
console.log(`Require invoked for module: ${moduleName}`);
22+
const id = require.resolve(moduleName); //[1]
23+
if(require.cache[id]) { //[2]
1924
return require.cache[id].exports;
2025
}
21-
// module metadata
22-
var module = {
23-
//[ 3]
24-
exports : {},
25-
id : id
26+
27+
//module metadata
28+
const module = { //[3]
29+
exports: {},
30+
id: id
2631
};
27-
// Update the cache
28-
require.cache[id] = module;
29-
//[ 4]
30-
// load the module
31-
loadModule(id, module, require);
32-
//[ 5]
33-
// return exported variables
34-
return module.exports;
35-
//[ 6]
32+
//Update the cache
33+
require.cache[id] = module; //[4]
34+
35+
//load the module
36+
loadModule(id, module, require); //[5]
37+
38+
//return exported variables
39+
return module.exports; //[6]
3640
};
41+
3742
require.cache = {};
38-
require.resolve =
39-
function(moduleName) {
40-
/* resolve a full module id fromthe moduleName */
41-
if (moduleName.startsWith('./')) {
42-
if (moduleName.indexOf('.js'))
43-
return moduleName;
44-
return moduleName + '.js';
45-
}
46-
return req.resolve(moduleName);
43+
require.resolve = (moduleName) => {
44+
//reuse the original resolving algorithm for simplicity
45+
return originalRequire.resolve(moduleName);
4746
};
4847

49-
// load another dependency
50-
var dependency = require('./anothermodule.js');
51-
// a private function
52-
function log() { console.log('Well done ' + dependency.username); }
53-
// the API to be exported for public use
54-
module.exports.run = function() { log(); };
48+
//Load the entry point using our homemade 'require'
49+
require(process.argv[2]);

loadmodule/main.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
"use strict";
2+
3+
const moduleA = require('./moduleA');
4+
moduleA.run();
5+

loadmodule/moduleA.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
"use strict";
2+
3+
const moduleB = require('./moduleB');
4+
5+
module.exports = {
6+
run: () => {
7+
moduleB.log();
8+
}
9+
};
10+

loadmodule/moduleB.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
"use strict";
2+
3+
exports.log = () => {
4+
console.log("From module B: the homemade require works!");
5+
};
6+

0 commit comments

Comments
 (0)