学习了一段时间比较火的NodeJS, 记录一下我的问题和我理解的答案。
1. 为什么一个module中的this 不是global对象 而是 exports ? require是怎么实现的?
我试着用javascript 实现一个自己require 函数, 输入代码字符串,得到一个exports对象
function myRequire(content){ var exports = {}; function run(){ eval(content); }; run.call(exports); return exports; } var script = "exports.add = function(a,b){return a+b;};" + "console.log(this);"; var add = myRequire(script).add; console.log(add(2,2));
2012年6月7日
2. require 函数的加载顺序?
绝对和相对路径加载: 如果没有写明扩展名, 按 .js --> .node (已编译node插件) 用 dlopen加载
只是模块名: 核心模块(lib/) --> 各级目录中的 node_modules (就近原则)
如果已经在node_modules , 而且没有找到的话 , 只找上层node_modules 目录