跳到正文

【Nodejs学习】NodeJS实现的原理代码分析

// 我来实现一个自己定义的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函数实现模块的加载的 // 我来实现一个自己定义的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);

评论

填写昵称与邮箱即可评论,无需登录。

推荐阅读