Nodejs模块化

发布时间 2023-06-29 21:55:42作者: wdszh

Nodejs模块化

ECMAScript标准的缺陷

  • 没有模块系统
  • 标准库较少
  • 没有标准接口
  • 缺乏管理系统

如果程序设计的规模达到了一定程度,则必须对其进行模块化,模块化可以有多种形式,但至少应该提供能够将代码分割为多个源文件的机制。CommonJS的模块功能可以帮我们解决该问题。
Nodejs实现了是CommonJS规范,但是也对规范做了一些取舍

介绍

  • 什么是模块化与模块?

    将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为模块化其中拆分出的每个文件就是一个模块,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他模块使用

  • 什么是模块化项目?

    编码时是按照模块一个一个编码的,整个项目就是一个模块化的项目

  • 模块化好处
    1. 防止命名冲突
    2. 高复用性
    3. 高维护性

模块暴露数据

可以通过下面的操作步骤

  1. 创建me.js

    //声明函数
    function tiemo(){
        console.log('贴膜....');
    }
    
    //暴露数据
    module.exports = tiemo;
    
  2. 创建index.js

    //导入模块
    const tiemo = require('./me.js');
    
    //调用函数
    tiemo();
    

模块暴露数据的方式有两种:

  1. module.exports = value
  2. exports.name = value

使用时有几点注意:

  • module.exports可以暴露任意数据
  • 不能使用exports = value的形式暴露数据,模块内部moduleexports的隐式关系exports = module.exports = {}require返回的是目标模块中module.exports的值

导入(引入)模块

在模块中使用require传入文件路径即可引入文件

const test = require('./me.js');

require 使用的一些注意事项:

  • 对于自己创建的模块,导入时路径建议写相对路径,且不能省略./../

  • jsjson文件导入时可以不用写后缀,c/c++编写的node扩展文件也可以不写后缀,但是一般用不到

  • 如果导入其他类型的文件,会以js文件进行处理

  • 如果导入的路径是个文件夹

    1. 首先检测该文件夹下package.json件中main属性对应的文件,如果存在则导入,反之如果文件不存在会报错
    2. 如果main属性不存在,或者package.json不存在,则会尝试导入文件夹下的index.jsindex.json
    3. 如果还是没找到,就会报错
  • 导入node.js内置模块时,直接require模块的名字即可,无需加./../

导入模块的基本流程

require导入自定义模块的基本流程

  1. 将相对路径转为绝对路径,定位目标文件
  2. 缓存检测
  3. 读取目标文件代码
  4. 包裹为一个函数并执行(自执行函数)。通过arguments.callee.toString()查看自执行函数
  5. 缓存模块的值
  6. 返回module.exports的值