【基础知识】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

浙公网安备 33010602011771号