Node.js里面的模块化

1. 啥是模块化?

一个js文件可以引入其他的js文件,能使用引入的js文件的中的变量、数据,这种特性就称为模块化。

使用模块化开发可以很好的解决变量、函数名冲突问题,也能灵活的解决文件依赖问题。

2. 模块化的发展

● 以前
es5不支持模块化,让前端人员很为难。为了让支持模块化,我们一般会借用第三方库来实现:
○ sea.js. https://www.zhangxinxu.com/sp/seajs/
○ require.js. https://requirejs.org/
● 现在
○ es6原生语法也支持模块化(并不表示浏览器也直接支持模块化 — 需要单独设置一下)
○ Nodejs内部也支持模块化(与es6的模块化有些不同之处),具体的语法在后面来介绍。

3. 常见的模块化规范有

● CommonJS 规范(nodejs 默认支持的)
● ES6 模块化规范
● CMD 和 AMD 模块化规范(不再推荐使用)

4.Node.js 中的 CommonJS 的模块化规范

CommonJS 规范
CommonJS 规范中主要规定了以下 3 项内容:

● 导入其它模块时,统一使用 require() 函数。
● 每个 .js 文件,都是一个独立的模块,模块内的成员都是私有的。
● 在每个 JS 模块中,使用 module.exports 向外共享成员。
在这里插入图片描述
在这里插入图片描述
右边的文件作为输出,左边到文件引入: 分别用到 module.exports={} 左边用到require()

注意

● module.exports 是固定写法,一般放在文件的最末尾,也只用一次。
● module.exports表示当前模块要暴露给其它模块的功能。
○ 它可以导出对象,数组,函数等等类型。为了方便组织代码,导出对象的情况比较多。
○ 不必要导出所有函数,对象,数组等。那些没有导出的部分就相当于这个模块的内部变量了。在下图中变量1,函数1,数组就是模块内部的数据,在外部无法别访问到。
在这里插入图片描述

导出模块有两种方式

● exports
● module.exports

// 定义方法,常量
const myPI = 3.14
const add = (a,b) => a + b;
// 导出,两种方法任意都可以
// 方法一:
exports.myPI = myPI
exports.add = add
// 方法二:
module.exports.myPI = myPI
module.exports.add = add
// 方法二(变形)
module.exports = {
myPI,
add
}

在阅读其它人的代码时,可能会遇到这两种不同的写法。所以我们还是有必要了解一下的。


两个对象的关系


● 初始exports和module.exports是指向同一块内存区域,其内容都是一个空对象。(exports是module.exports的别名)即:exports === module.exports // 输出是 true

所以下面两种写法的效果是一样的:

// 写法1 mymodule.js
exports.f = function(){ }
exports.pi = 3.1415926

// 写法2 mymodule.js
module.exports.f = function(){ }
module.exports.pi = 3.1415926

● 在定义模块时:

如果直接给exports对象赋值(例如:exports={a:1,b:2}),此时,exports就不会再指向module.exports,而转而指向这个新对象,此时,exports与module.exports不是同一个对象。

在引入某模块时:以该模块代码中module.exports指向的内容为准。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值