文章目录
前言
模块化开发主要解决文件依赖和命名冲突等问题。
一、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(狗头 =_= )