Node.js中利用CommonJS模块化

无论是什么语言,代码的规模达到一定程度,为了优化都会对其进行模块化

js本身没有模块系统。前端开发的系统规模对比其他也没有那么庞大,将就将就也能完事,可是当把js迁移到服务器以后,服务器的代码规模很大,如果不进行模块化会很难维护,经过jQuery封装后的js,引入jQuery的文件和相关的库属于模块化,但并不属于模块化系统

利用jQ插件举例,必须要引入jQ文件以后才能使用插件,存在先后顺序,如果引入多个模块,它必须符合这个先后顺序,过程繁琐且不好维护

——————————————————————————————————

因此,在Node.js下诞生了 CommonJS 规范

其对模块的定义分为:

——模块引用

——模块定义

——模块标识

从架构的角度来看,CommonJS模块是一个可以复用的Javascript块,它出口对任何独立代码都起作用的特定对象

在Node中,一个js文件就是一个模块

 如上图,index模块和index02模块的运行结果同时显示

---------------------------------------------------------------------------------------------------------------------------------引入其他的模块

利用 " require("路径"); " 方法,该方法为函数

【注:这里的路径如果使用相对路径,必须以 ./ 或 ../ 开头】

例如我想在index模块中引入index02模块

【二者是同级目录,使用 ./】

 可以看到在index中并没有打印70,可是在输出结果中index这个模块里却有70

---------------------------------------------------------------------------------------------------------------------------------

ps:引入的模块为一个整体,不会与其他模块偶合

这里举个例子,为 index02 中添加变量x,继续打印index

 

可以看到,报错后提示 ”x is not defined“,即x未定义。因为x只在 index02 中声明,算作index02的内容,不会与其他模块偶合,所以在 index 打印时显示x为定义

那么问题来了,有的同学可能就说,欸不行,我就必须要x在别的模块里也能用,那这种问题该怎么解决呢,那就不得不提 require()函数 的另一用法:

---------------------------------------------------------------------------------------------------------------------------------使用require()函数后,会返回一个对象,这个对象代表的是引入的变量

那么我们可以进行如下操作

将引入的模块定义为 变量a,之后打印 变量a

 可以看到不报错了,30和70正常显示,但是x却变成了 { }

这就涉及到一个知识点:

在 Commonjs 规范下的模块中,会形成一个包装函数,使用的 require,exports,module本质上是通过形参的方式传递到包装函数中的。

因此,在Node中,每一个js文件中的js代码都独立运行在一个函数中,而不是全局作用域,所以一个模块中的变量和函数在其它模块中无法访问

说白了,因为每一个模块都是包装函数,所以它们相对彼此都是封闭的,如果想要互相调用,就需要就彼此暴露出来

这么暴露呢

可以使用 " exports " 方法向外部暴露

exports.变量名=值

 这里我用该方法定义了x,将x暴露出来,再执行index后x正常显示,接下来提取x

 

 以上,就是模块化的一些简单介绍,接下来举个简单的例子

定一个加法运算的模板,调用这个模板求值

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值