【基础知识】Node入门之二-模块化

一、模块化

1、模块化概念

模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。

模块化规范:对代码进行拆分组合时,需要遵循的规则。好处:大家都遵守,降低沟通成本,方便各模块间调用。

2、Node.js模块分类

Node.js中模块分为内置模块(官方提供,如fs,http),自定义模块(自己写的),第三方模块(第三方公司开发,非官方,使用前在npm上下载)。

3、模块引入

require('模块名'),其中,.js后缀可省略。

4、模块作用域

和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问。模块作用域好处是防止了全局变量污染的问题。

5、模块作用域的成员

在自定义模块中,都有一个module对象,存储了和当前模块有关的信息。可以使用module.exports对象,将模块内的成员共享出去,供外界使用。导入自定义模块时,得到的就是module.exports指向的对象。

默认情况下,exports和module.exports指向同一个对象。最终共享的结果,以module.exports指向的对象为准。

6、CommonJS模块化规范(Node遵循了CommonJS规范)

CommonJS规定了模块的特性和各模块之间如何相互依赖。

每个模块内部,module变量代表当前模块;

module变量是一个对象,module.exports是对外的接口;

加载某个模块即加载该模块的module.exports属性,require()方法用于加载模块。

 

二、模块加载机制

模块第一次加载后会被缓存,即多次调用require()不会导致模块的代码被执行多次,提高模块加载效率。

1、内置模块加载

内置模块加载优先级最高。

2、自定义模块加载

加载自定义模块时,路径要以./或../开头,否则会作为内置模块或第三方模块加载。

导入自定义模块时,若省略文件扩展名,则Node.js会按顺序尝试加载文件:

按确切的文件名加载

补全.js扩展名加载

补全.json扩展名加载

补全.node扩展名加载

报错

3、第三方模块加载

若导入第三方模块,Node.js会从当前模块的父目录开始,尝试从/node_modules文件夹中加载第三方模块。

如果没有找到对应的第三方模块,则移动到再上一层父目录中,进行加载,直到文件系统的根目录。

4、目录作为模块加载

当把目录作为模块标识符进行加载的时候,有三种加载方式:

在被加载的目录下查找package.json的文件,并寻找main属性,作为require()加载的入口。

如果没有package.json文件,或者main入口不存在或无法解析,则Node.js将会试图加载目录下的index.js文件。

若失败则报错

 参考:https://blog.csdn.net/lxy95512/article/details/123458551

posted @ 2022-05-09 11:58  ouousan  阅读(108)  评论(0)    收藏  举报