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 */