Node学习(八)01-Node中的模块化——一个js文件就是一个模块& js中声明的属性和方法挂载global对象下则是全局作用域&module.exports导出属性和方法&require导入模块

Node学习(八)01-Node中的模块化——一个js文件就是一个模块& js中声明的属性和方法挂载global对象下则是全局作用域&module.exports导出属性和方法&require导入模块

10. Node中的模块化

10.1 什么是模块化

  • js设计之初只是为了实现表单验证这样的简单功能,没设计模块化方案,所以js天生不支持模块化
  • 不支持模块化简单来说就是在一个js文件内不能引入其他js文件,当然也就谈不上使用其他js文件中的内容
  • 为了让js支持模块化,一些大神自己编写底层库文件,让js开始支持模块化
  • js模块化规范有四种标准: AMD CMD CommonJS ES6
  • Node属于CommonJS标准
  • 使用模块化可以很好的解决变量、函数名冲突问题,也能灵活的解决文件依赖问题
  • 没有模块化,不允许一个js文件引入另外的JS,有了模块化,就允许一个js文件引入其他的js文件

10.2 通过global基本实现模块化

局部作用域(模块的作用域):

  • 一个js文件就是一个模块
  • 在一个js文件中定义的属性(变量、常量)和方法默认都只能在当前js文件中使用

全局作用域:

  • 在js文件中声明的属性和方法如果都挂载到global对象下;当其他js文件导入该模块后,就能使用该模块下的属性和方法了。

    aa.js

    // 加载bb.js
    require('./bb.js'); // 加载自己写的js文件, 必须加 ./
    
    // console.log(global.abc);
    console.log(abc);
    fn(4, 9);
    

    bb.js

    // 定义几个变量和函数
    let abc = 'hello';
    
    let fn = (x, y) => {
        console.log(x + y);
    };
    
    // let console = '123';
    
    // 把变量定义成global的属性
    global.abc = abc;
    global.fn = fn;
    

    这个方案可以实现模块化,但是不推荐,因为有可能会污染全局环境

实例-模块化引入-成对出现

1、文件目录

在这里插入图片描述

2、示例

第一组

a.js

// 引入b.js,并且还要使用b.js中定义的变量、函数等
const b = require('./b.js');

console.log(b); // 得到一个空对象

/**
 * 小结:
 * 虽然可以通过require加载其他的js文件,但是并不能使用其他js文件中定义的变量
 */

b.js

// 定义几个变量和函数
let abc = 'hello';

let fn = (x, y) => {
    console.log(x + y);
};

效果1-a引入b

在这里插入图片描述

第二组

aa.js

// 加载bb.js
require('./bb.js');

// console.log(global.abc);  // hello
console.log(abc);  // hello
fn(4, 9); // 13

bb.js

// 定义几个变量和函数
let abc = 'hello';

let fn = (x, y) => {
    console.log(x + y);
};

// let console = '123';

// 把变量定义成global的属性
global.abc = abc;
global.fn = fn;

效果2-aa引入bb

在这里插入图片描述

10.3 module.exports导出属性和方法

  • 将变量、对象、函数等挂载到global对象上并不推荐,因为容易造成变量污染。
  • 推荐使用 module.exports 导出模块中定义好的变量、对象、方法等等
  • 使用require加载(导入)模块后,就能使用模块中定义好的变量、对象、方法了

bbb.js – 导出模块

// 定义几个变量和函数
let abc = 'hello';

let fn = (x, y) => {
    console.log(x + y);
};

// 导出模块
// module.exports = 导出的内容(可以是对象、可以是函数)

module.exports = {
    // 属性: 值
    abc: abc,
    fn: fn
}

aaa.js – 导入模块

// 导入模块
const bbb = require('./bbb.js');
// console.log(bbb);

console.log(bbb.abc); // hello
bbb.fn(3, 8); // 11
实例
第三组

aaa.js

// 导入模块
const bbb = require('./bbb.js');
// console.log(bbb);

console.log(bbb.abc); // hello
bbb.fn(3, 8); // 11

bbb.js

// 定义几个变量和函数
let abc = 'hello';

let fn = (x, y) => {
    console.log(x + y);
};

// 导出模块
// module.exports = 导出的内容(可以是对象、可以是函数)

module.exports = {
    // 属性: 值
    abc: abc,
    fn: fn
}

// 等价于
module.exports = {
    // 属性: 值  es6中相同可省略
    abc,fn
}

效果3-aaa引入bbb

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值