node中的模块系统

  • 模块系统

    • 在 Node 中没有全局作用域的概念
    • 在 Node 中,只能通过 require 方法来加载执行多个 JavaScript 脚本文件
    • require 加载只能是执行其中的代码,文件与文件之间由于是模块作用域,所以不会有污染的问题

      • 模块完全是封闭的
      • 外部无法访问内部
      • 内部也无法访问外部
    • 模块作用域固然带来了一些好处,可以加载执行多个文件,可以完全避免变量命名冲突污染的问题
    • 但是某些情况下,模块与模块是需要进行通信的
    • 在每个模块中,都提供了一个对象:exports
    • 该对象默认是一个空对象
    • 你要做的就是把需要被外部访问使用的成员手动的挂载到 exports 接口对象中
    • 然后谁来 require 这个模块,谁就可以得到模块内部的 exports 接口对象
    • 还有其它的一些规则,具体后面讲,以及如何在项目中去使用这种编程方式,会通过后面的案例来处理
  • 核心模块

    • 核心模块是由 Node 提供的一个个的具名的模块,它们都有自己特殊的名称标识,例如

      • fs 文件操作模块
      • http 网络服务构建模块
      • os 操作系统信息模块
      • path 路径处理模块
      • 。。。。
    • 所有核心模块在使用的时候都必须手动的先使用 require 方法来加载,然后才可以使用,例如:

      • var fs = require('fs')
        // require 是一个方法
        // 它的作用是用来加载模块的
        // 在node中,模块有三种:
            // 具名的核心模块,例如 fs http
            // 用户自己编写的文件模块
                // 相对路径必须加 ./
        // 可以省略后缀名
        // 相对路径中的 ./ 不能省略 否则报错
    
        // 在node中 ,没有全局作用域,只有模块作用域
        // 外部访问不到内部
        // 内部也访问不到外部
        // 默认都是封闭的
        // 既然是模块作用域,那如何让模块与模块直接进行通信
        // 有时候,我们加载文件模块的目的不是为了简简单单的执行里面的代码,更重要是为了使用里面的成员
        
        // require 方法有两个作用:
        // 1. 加载文件模块并执行里面的代码
        // 2.拿到被加载文件模块导出的接口对象
        
    // 在每个文件模块中都提供了一个对象:exports
    // exports 默认是一个空对象
        
    console.log('a.js start');
    require('./b.js');
    console.log('a.js end');
    var ret = require('./c.js');
    // 访问到c.js里面的成员
    console.log(ret.add(50, 40));
    console.log(ret.age);
文章目录