Node - 模块化

1.什么是模块?

  • 1.1浏览器开发中的模块
    在浏览器开发中为了避免命名冲突, 方便维护等等
    我们采用或者立即执行函数的方式来封装JS代码, 来避免命名冲突和提升代码的维护性
    其实这里的一个类或者一个立即执行函数就是浏览器开发中一个模块
   let obj = {
       模块中的业务逻辑代码
   };
   ;(function(){
      模块中的业务逻辑代码
      window.xxx = xxx;
   })();

存在的问题:没有标准没有规范

1.2NodeJS开发中的模块

NodeJS采用CommonJS规范实现了模块系统

1.3CommonJS规范

CommonJS规范规定了如何定义一个模块, 如何暴露(导出)模块中的变量函数, 以及如何使用定义好的模块

  • 在CommonJS规范中一个文件就是一个模块
  • 在CommonJS规范中每个文件中的变量函数都是私有的,对其他文件不可见的
  • 在CommonJS规范中每个文件中的变量函数必须通过exports暴露(导出)之后其它文件才可以使用
  • 在CommonJS规范中想要使用其它文件暴露的变量函数必须通过require()导入模块才可以使用

1.4exports和module.exports区别

  • exports只能通过 exports.xxx方式导出数据, 不能直接赋值
  • module.exports既可以通过module.exports.xxx方式导出数据, 也可以直接赋值
  • 了解——可以像绑window全局属性一样,绑到global全局上面,global.str = name;require导入js,直接使用属性即可,但是不推荐这样使用

1.5require注意点

  • 1.1require导入模块时可以不添加导入模块的类型
    如果没有指定导入模块的类型, 那么会依次查找.js .json .node文件
    无论是三种类型中的哪一种, 导入之后都会转换成JS对象返回给我们
  • 1.2导入自定义模块时必须指定路径
    require可以导入"自定义模块(文件模块)"、"系统模块(核心模块)"、"第三方模块"
    导入"自定义模块"模块时前面必须加上路径
    导入"系统模块"和"第三方模块"是不用添加路径
  • 1.3导入"系统模块"和"第三方模块"是不用添加路径的原因
    如果是"系统模块"直接到环境变量配置的路径中查找
    如果是"第三方模块"会按照module.paths数组中的路径依次查找

你可能感兴趣的:(Node - 模块化)