Node中的简单模块化

一、在node中,模块有三种

(1)具名的核心模块
例如:fs、http

(2)用户自己编写的文件模块

  • 相对路径必须加./ 不能省略
  • 可以省略后缀名.js
  • 上一级必须加 . ./

(3)第三方模块

二、node中的作用域

  • 在node中,没有全局作用域,只有局部作用域
  • 外部访问不到内部
  • 内部访问不了外部
  • 默认是封闭的,出了此文件作用域,定义的变量、函数等都无效了

三、如何实现模块与模块之间的通信

既然是模块作用域,如何让模块与模块之间进行通信?
有时候我们加载文件模块的目的不是为了简简单单的执行里面的代码,更重要的是访问里面的成员。

再给出解决方法之前,我们需要先了解什么是requireexports

require方法有两个作用
1、加载文件模块并执行里面的代码。
2、拿到被加载文件模块导出的接口对象 exports。

在每个文件模块中都提供了一个对象叫:exports
1、exports默认是一个空对象。
2、你要做的就是把所有需要被外部访问的成员挂载到exports对象中。

模块与模块之间进行通信的解决方法:
第一步:把所有需要被外部访问的成员挂载到exports对象中。
第二部:在需要访问的文件中用require方法得到接口对象exports,通过exports得到挂载到exports里面的成员。

例如:
在这里插入图片描述
先创建两个js文件a.js和add.js。

add.js里面的代码如下:

var foo = 'bbb'; //没有挂载到exports,在a.js里面访问不到

var age = 18;

function add (a,b){
    
     //没有挂载到exports,在a.js里面访问不到
return a-b;
}

console.log(exports);   //输出{}

//动态为对象添加成员foo,值为hello
exports.foo = 'hello';

//动态为对象添加成员add函数,此add函数非上面的add函数
exports.add = function (a,b){
    
    
    return a+b;
};

//动态为对象添加成员readFile函数,此readFile不是fs里面的readFile函数
exports.readFile = function (path,callback){
    
    
    console.log(path);
}

//动态为对象添加成员age,并将之前定义好的age变量赋值给exports.age
exports.age = age;

a.js里面的代码如下:

//require方法有两个作用
//  1、加载文件模块并执行里面的代码
//  2、拿到被加载文件模块导出的接口对象 exports

//在每个文件模块中都提供了一个对象叫:exports
//  exports默认是一个空对象
//  你要做的就是把所有需要被外部访问的成员挂载到exports对象中

var bExports = require('./add');

console.log(bExports.foo);  // 输出 'hello'

console.log(bExports.add(10,29)); // 输出 39

console.log(bExports.age); // 输出 18



bExports.readFile('c:/d/d/df/f'); // 输出 'c:/d/d/df/f'

var fs = require('fs');
fs.readFile('../../hello.txt',function (err,data){
    
    
    if(err){
    
    
        console.log('读取失败');
    }else{
    
    
        console.log(data);  // 输出 '<Buffer e5 a4 a7 e5 ae b6 e5 a5 bd ef bc 8c e7 bb 99 e5 a4 a7 e5 ae b6 e4 bb 8b e7 bb 8d e4 b8 80 e4 b8 8b 6e 6f 64 65 2e 6a 73>'
    }
})

// console.log(foo);

a.js运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cake_eat/article/details/108939728