• 我转过几个弯 绕过那个小雨楼
  • 拿着蒲扇摆着衣衫渡着紧箍咒
  • 不问天涯不停留 喝过几壶酒
  • 不过年少白头道义放胸口
  • 倘若明天之后 遥看前尘剑封侯
  • 似那天上神仙无所求
  • 朝朝暮暮君如梦醒十分不为何理由
  • 是真是假是惶恐是无休
  • 路过这风雨花满楼 片刻都不停留
  • 我本这书生进京赶考留下许多愁
  • 你问有没有时候 我叹这天道默悠悠
  • 能否与我一醉方休
  • 又过了几个弯 算尽天量道莫慌
  • 踏这田园闻这芳草香
  • 跌跌撞撞仗剑天涯折煞不枉无笔良
  • 是梦是幻是温柔是家乡
  • 路过这风雨花满楼 片刻都不停留
  • 我本这书生进京赶考留下许多愁
  • 你问有没有时候 我叹这天道默悠悠
  • 能否与我一醉方休
  • 路过这风雨花满楼 片刻都不停留
  • 我本这书生进京赶考留下许多愁
  • 你问有没有时候 我叹这天道默悠悠
  • 能否与我一醉方休
  • 谁能与我一醉方休

koa框架4 基础入门之node.js模块系统

149 0

node模块有三个语法:

  1. exports
  2. module
  3. require

require

其中require就是一个引入模块的方法,他有两个路径写法,如果你引入的是系统模块,那么直接写模块名,不需要加路径,如果你引入一个自己的模块,需要加上当前路径,或者你自己的模块丢在当前目录的node_modules目录下,你也可以省略路径。

require("http");

require("./my_http");

require("my_http");

node的模块都是js文件,所以我们可以省略这个后缀名不写

还有一种省略就是省略引入的js文件,node他支持默认引入index.js文件,有点像html的index.html,浏览器会默认读取这个index.html文件,在node里面,如果你没有指定要引入的文件名,他也会默认去找目录下的index.js文件。

假设我有一个目录为test,在test目录下有一个index.js文件,我们引入这个模块就可以这样写:

require("./test");

module和exports

注意exports是node语法,export是es6的语法,两个不一样的

其中exports就是module.exports的引用:

console.log(exports === module.exports);

//true

其原理如下:

let my_module = {
    exprots: {}
}

let my_exprots = my_module.exprots;

exports是一个变量名,他引用了module.exports对象,但是也正因为js的引用类型,导致他们俩个的用法不同,我们可以理解,node最终导入模块的是module.exports对象,所以,如果module.exports在随后代码里重新赋值了,exports导出的任何东西都会不见,因为之前的引用对象不见了,

exports.a = 1;
exports.b = 2;

module.exports = {
    c: 3
}

我们引入这个模块只能得到{c:3}

所以,这样就导致了两种导出方式,exports只能通过exports.xxx=xxx;的方式每次导出一个内容,而module.exports可以一次导出多个。

模块规则

js在最开始是没有所谓的模块化的,他就是一个js文件,直接script引入就行了。

但是后来项目的复杂,script引入很多不便,文件名还有可能相同导致冲突,于是出现了命名空间,但是这个也不能很好解决开发上的问题。

然后出现了民间的cmd规则,这也是node所使用的规则。

但是cmd在后来又发下引入太慢了,于是有了amd,异步模块规范,但是现在也用的不多,虽然很强。

amd规范不久后官方也出了自己的规范esm,但是这种规范浏览器目前还不支持,需要webpack协助编译,所以目前也不是很通用,但是node作者说以后会更换为esm,但是目前还没消息,估计要等一段时间了,因为换的话是一次较大的改动。

1
  • 本文分类:Node
  • 本文标签:nodekoaexportsmodule
  • 流行热度:已超过 149 人围观了本文
  • 最后更新:2020年08月12日 - 18时20分54秒
  • 发布日期:2020年08月12日 - 18时20分54秒
  • 版权申明:本文系作者@木灵鱼儿原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。

相关文章

微信收款码
微信收款码