Node.js模块化开发


前言

模块化开发主要解决文件依赖和命名冲突等问题。


一、Node.js模块化开发规范

1、Node.js规定一个JavaScript文件就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到。
2、模块内部可以使用exports、module.exports对象进行成员导出,使用require方法导入其它模块的exports对象。

二、exports导出对象

1.模块a.js

代码如下:

//模块内部的变量和方法
const age = 12
const sayHi = () => {
    console.log('大家好,我是小明。');
}
console.log('我是a模块输出的内容');
//模块向外导出数据
exports.age = age
exports.sayHi = sayHi

2.模块b.js

代码如下:

const a = require('./a.js')
//const a = require('./a')//后缀可以省略
a.sayHi()
console.log('今年' + a.age + '岁。');

3.输出结果

代码如下:

//导入a.js模块后会运行a.js模块,所以才会输出a.js模块的内容
我是a模块输出的内容
大家好,我是小明。
今年12岁。

三、module.exports导出对象

1.模块a.js

代码如下:

//模块内部的变量和方法
const age = 12
const sayHi = () => {
    console.log('大家好,我是小明。');
}
//模块向外导出数据
module.exports.age = age
module.exports.sayHi = sayHi

2.模块b.js

代码如下:

const a = require('./a.js')
console.log(a);

3.输出结果

代码如下:

{ age: 12, sayHi: [Function: sayHi] }

四、exports和module.exports的关系

exports是module.exports的别名(地址引用关系),导出对象最终以module.exports为准。

1.模块a.js

//模块内部的变量和方法
const age = 12
const sayHi = () => {
    console.log('大家好,我是小明。');
}
//模块向外导出数据
module.exports.age = age
exports.sayHi = sayHi

2.模块b.js

const a = require('./a.js')
console.log(a);

3.输出结果

{ age: 12, sayHi: [Function: sayHi] }

五、exports或module.exports重新指向一个对象,导出对象最终以module.exports为准。

1.module.exports重新指向一个对象

1.模块a.js

//模块内部的变量和方法
const age = 12
const sayHi = () => {
    console.log('大家好,我是小明。');
}
//模块向外导出数据
module.exports.age = age
exports.sayHi = sayHi

module.exports = {
    sayHi: sayHi
}

2.模块b.js

const a = require('./a.js')
console.log(a);

3.输出结果

{ sayHi: [Function: sayHi] }

2.exports重新指向一个对象

1.模块a.js

//模块内部的变量和方法
const age = 12
const sayHi = () => {
    console.log('大家好,我是小明。');
}
//模块向外导出数据
module.exports.age = age
exports.sayHi = sayHi

exports = {
    sayHi: sayHi
}

2.模块b.js

const a = require('./a.js')
console.log(a);

3.输出结果

{ age: 12, sayHi: [Function: sayHi] }

总结

建议使用module.exports(狗头 =_= )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值