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

 

posted @ 2019-05-21 15:31  cher。  阅读(226)  评论(0编辑  收藏  举报