[JavaScript] 纯文本查看 复制代码 // 我来实现一个自己定义的require.js
function myRequire(path) {
/**
* 创建一个Module模块
*/
function Module() {
this.exports = {};
}
// fs模块是Node.计算提供的一个原生的用于读取文件的模块
var fs = require('fs');
var sourceCode = fs.readFileSync(path, 'utf-8');
// console.log(sourceCode);
// 读取文件,拼接字符串
var packSouceCode = '(function(exports, module){' + sourceCode + ' return module.exports; })';
console.log(packSouceCode);
// 通过eval()这个函数可以动态地执行JavaScript代码
var packObj = eval(packSouceCode);
// 我自己来创建一个模块
var module = new Module();
console.log(typeof packObj); // function
// 开始动态执行我自己定义的这个require 函数( 需要把形参传递给我自定义的函数的实参)
var executeRes = packObj(module.exports, module);
// 输出返回的结果
console.log(executeRes); // 1234567, 这个函数执行的结果返回的实际上就是一个module.exports
}
// 测试, 直接会输出文件中的内容信息
var res = myRequire('./model4.js');
console.log(res);
(function(exports, module){
var name = 'xiuxiu';
exports.name = name;
module.exports = function(){
console.log(arguments);
}
return module.exports;
})
// 头部
var str = (function(exports, module){
var name = 'xiuxiu';
exports.name = name;
module.exports = '1234567';
// 尾部
return module.exports;
})
// 可以执行一个字符串
var res = eval(str);
console.log(res);
var obj = res('module1', 'module');
console.log(obj);
实际上NodeJS是通过require的方式间接读取文件内容,然后解析js,最后使用eval函数实现模块的加载的
[JavaScript] 纯文本查看 复制代码 // 我来实现一个自己定义的require.js
function myRequire(path) {
/**
* 创建一个Module模块
*/
function Module() {
this.exports = {};
}
// fs模块是Node.计算提供的一个原生的用于读取文件的模块
var fs = require('fs');
var sourceCode = fs.readFileSync(path, 'utf-8');
// console.log(sourceCode);
// 读取文件,拼接字符串
var packSouceCode = '(function(exports, module){' + sourceCode + ' return module.exports; })';
console.log(packSouceCode);
// 通过eval()这个函数可以动态地执行JavaScript代码
var packObj = eval(packSouceCode);
// 我自己来创建一个模块
var module = new Module();
console.log(typeof packObj); // function
// 开始动态执行我自己定义的这个require 函数( 需要把形参传递给我自定义的函数的实参)
var executeRes = packObj(module.exports, module);
// 输出返回的结果
console.log(executeRes); // 1234567, 这个函数执行的结果返回的实际上就是一个module.exports
}
// 测试, 直接会输出文件中的内容信息
var res = myRequire('./model4.js');
console.log(res);
(function(exports, module){
var name = 'xiuxiu';
exports.name = name;
module.exports = function(){
console.log(arguments);
}
return module.exports;
})
// 头部
var str = (function(exports, module){
var name = 'xiuxiu';
exports.name = name;
module.exports = '1234567';
// 尾部
return module.exports;
})
// 可以执行一个字符串
var res = eval(str);
console.log(res);
var obj = res('module1', 'module');
console.log(obj);
|