编译和执行时引入文件模块的最后一个阶段,定位到具体文件后,node会新建一个模块对象,然后根据路径载入并编译 每一个编译成功的模块都会将其文件路径作为索引缓存在Module._cache上 每个模块文件都存在require、exports、module三个变量,但是在文件中并未定义(__filename__、__dirname__ 变量也是) 其实在编译过程中,Node对javascript文件内容进行了头尾包装(相当于自定义函数传入window) 复制代码 代码如下: (function (exports, require, module, __filename__, __dirname__) { var math = require("math"); exports.area = function (radius) { return ""; }; });
这样,模块与模块之间做了隔离,不会互相影响,这里和underscore的编译有些类似...... 包与NPM Node组织了自身的核心模块,所以第三方文件模块可以有序的编写和使用,但是在第三方模块中,模块与模块之间仍然散列在各地 相互之间不能直接引用,在模块外包和NPM则是将联系建立起来的一种机制 PS:很多模块会形成一个包,这个包的概念和java包的概念,才#程序集的概念应该相似 一个包结构解压后会形成几个文件: ① package.json 描述文件 ② bin 可执行二进制目录 ③ lib javascript代码目录 ④ doc 文档(尼玛基本没有) ⑤ test demo 以上都是CommonJS包的规范的一些东西,但是我们稍微了解一下便可(初学嘛),NPM则需要熟练掌握,借助NPM我们可以熟练安装管理包 安装依赖包