模块化开发
在实际开发中,js模块化有一下几种规范
- AMD
- CMD
- CommonJS
- ES6
其中Node中使用的是CommonJS
什么是模块化开发
模块化开发可以用乐高积木来比喻。每个积木都有固定的形状和颜色,想要组合积木就必须正确的使用他们之间的连接点进行连接,最后拼出你想要的形状
模块化其实是一种规范,有了规范自然会大大的提升开发效率。每个js文件都是一个模块,每个模块通过固定的方式引入,并且通过固定的方式向外暴露指定的内容
怎样做到模块化开发
在node.js中可以使用exports
来将成员导出,用require
来引入。
向外暴露文件的方式
方式一: exports
新建a.js文件
let name = 'JOJO'
exports.a = a
新建b.js文件,引入a.js模块
const module_a = require('./a')
console.log(module_a.a)
注意:引入自定义模块时要写上其路径'./a.js'
,后缀也可以省略。别问为什么,问就是 甲鱼的臀部
也可以在定义成员的时候直接向外暴露
exports.a =10
也可以定义函数暴露
function add(a,b){
return a+b
}
export.add = add
模块外部调用
const a_module = require('./a')
console.log(a_module.add(1,1))
方式二:module.exports
a.js
module.exports.name = 'JOJO'
module.exports.age = '21'
module.exports.add=(a,b)=>a+b
b.js
const a_module = require('./a')
console.log(a_module.name)
console.log(a_module.age)
console.log(a_module.add(1,1))
让我们使用更为优雅方式
a.js
function add(a,b){
return a+b
}
function minus(a,b){
return a-b
}
let a = 10
exports.add = add
exports.minus = minus
exports.a = a
在暴露变量时我们有更简单的方式
module.exports = {
add,
minus,
a
}
b.js
使用解构赋值
let{sum,minus,a} = require('./a')
console.log(sum(1,1))
console.log(minus(2,1))
console.log(a)
两种方式有何不同
1、export是module.export的别名,导出对象最终以module.export为准
let a = 'hello'
let b = 'world'
exports.a = a
module.exports.b = b
const a_module = require('./a')
console.log(m)//{a:'hello',b:'world'}
可以确定,exports与module.exposts确实是一个地址
2、exports只能使用语法来向外暴露内部变量,module.exports既可以通过语法,也可以直接赋值一个对象
使用exports
let a = 'holle'
exports = {
a
}
const a_module = require('./a')
console.log(a_module)//{}
使用 module.exports
let a = 'holle'
module.exports = {
a
}
const a_module = require('./a')
console.log(a_module)//{a:'holle'}