node模块化
// exports 是一个空对象,exports并不是全局的,每个模块都有这个对象 例:exports.a = 1;
//require() => module.require();方法的返回值就是module.exports对象
/**
* 一个文件是一个模块,每个模块中都有一个内置的对象 : module
* 该对象提供了包括当前模块文件所拥有的一些信息
* {
* id : 当前模块的唯一标识,默认id为当前这个文件的绝对路径
* filename : 当前模块的文件
* ...
* }
*
* 虽然exports == module.exports是同一个东西,但是使用上有一定注意事项
* 如果用exports来导出对象的话,就会赋值给一个新的对象,那么和module.exports就没有关系了,因为在node里相当于做了let exports = module.exports;
*/
/**
* 文件夹模块类型 ;当我们导入的是一个文件的时候,就会默认是文件夹模块,去引入文件夹下的index.js文件,也可以创建package.json,里面配置信息,配置一个参数main,
* 里面的值就是模块要引入的文件
* 当我们导入的模块名称是一个文件夹的时候
* 1.读取该文件夹下的package.json文件
* 2.导入package.json文件中main选项指定的文件
* 3.如果不存在package.json或者main指定的文件,默认指定寻找index.js文件
*/
/**
* 如果我们加载的是node_modules目录下的,又会有另外一个规则
* 就可以省略掉node_modules前面的文件地址
* 如果模块的加载是以 ./ ../ / 开始的,那么就是路径模块加载模式,不以这些路径开始的模式,按照另外一种加载机制进行加载
* 当非路径加载模式的时候 :
* 在module对象中有一个属性paths,里面保存的就是这种非路径加载模式需要查找的路径列表
*/
/**
* node里面也有核心模块,如果自己定义的模块和核心模块冲突了,会加载核心模块
*/
/**
* 模块文件后缀加载机制 : 文件 > .js > .josn > .node
*/