一文读懂nodejs模块化规范

819 阅读3分钟

nodejs模块化规范

模块化规范介绍

  • 1.什么叫模块化?(模块 == js文件)
    • 一个js文件可以引入另一个js文件中的数据,这种开发模式就叫做模块化开发
  • 2.模块化开发的好处?
    • (1) 将功能分离出来
      • 一个js文件只负责处理一个功能,这样做的好处是业务逻辑清晰,便于维护
    • (2) 按需导入
      • 用到哪一个功能,就导入哪一个js文件。模块化开发是渐进式框架的共同特征。
    • (3) 避免变量污染
      • 一个js文件(模块),都是一个独立的作用域。互不干扰,不用考虑变量名冲突问题。
了解一下前端模块化开发进程
    ES6之前: js语言本身不支持模块化开发,一般需要通过第三方工具来实现模块化开发。
例如:sea.js. <https://www.zhangxinxu.com/sp/seajs/> require.js. <https://requirejs.org/>

ES6ES6新增了模块化开发语法
Nodejs : Nodejs本身也支持模块化开发,但是和前端的ES6有一些细微的区别。如果自己写一些npm框架,就必须要掌握nodejs模块化语法

模块化语法规范介绍

  • 任何一个语法,都需要遵循一定的规范。不同平台需要遵循的规范不同。一般情况下,模块化语法规范主要有三种。

CommonJS规范实现模块化语法

  • 1.CommonJS规范只有两句话
    • 1.模块必须要使用require()导入
    • 2.模块必须要使用module.exports导出
      • 这两个语法都是nodejs环境自带的全局语法
  • 2.导出模块语法一般放在js文件最底部,且只需要执行一次即可
  • 3.一般不需要把模块化中所有的变量全部都导出,只需要导出需要用的变量即可

模块缓存机制

  • 1.当一个模块第一次加载时,nodejs会执行里面的代码,并且导出模块
  • 2.nodejs会将导出的模块放入缓存中
  • 3.当重复导入一个模块的时候,nodejs会先从缓存中读取模块。如果缓存中有,就会从缓存读取。缓存没有就重复步骤1

image.png

nodejs三种模块及require()加载原理

  • 1.nodejs有三种模块
    • 有一种: 核心模块、内置模块
      • nodejs作者写的,这些模块js文件会随着安装nodejs的时候一起安装。因此我们可以直接使用,而无需下载。
      • 例如:fs、path、http都是核心模块
    • 第二种:第三方模块
      • npm官网上面的模块,这些都是大佬写的模块。需要下载后使用
      • 例如:express、cors、bod-parser
    • 第三种:自定义模块
      • 我们自己写的文件
  • 2.require('文件路径')加载原理
    • (1) 自定义模块:必须要写文件路径,require()会得到这个模块里面的module.exports对象
    • (2) 第三方模块:写模块名。nodejs会自动从你的node_module文件夹里面去找这个模块的名字,然后执行模块里面的index.js代码,得到里面的module.exports
      • 如果当前目录没有module.exports就会从上级目录找,以此类推。一直找到你的磁盘根目录。还找不到就会提示报错模块不存在(类似变量作用域的就近原则)
    • (3) 核心模块:写模块名。nodejs会自动从你的node安装包路径里面去找。