写在前面
众所周知,node应用是由模块组成的;而nodejs的模块分为三大类——全局模块、系统模块和自定义模块。
NodeJS遵循CommonJS模块规范,翻译成人话就是:
模块必须用module.exports导出(暴露)想要被外界获取的内容(比如变量或函数,当然其他的比如class之类的也是可以的);必须通过require() 来导入其他模块导出的内容。
CommonJS模块有以下特点:
- 所有代码都运行在自己的模块作用域中,不会污染全局作用域。
- 模块加载的顺序取决于它们在代码中出现的顺序。
- 模块可以多次加载,但只在第一次加载时运行一次,然后运行结果就会被缓存下来;后续的加载都会直接读取缓存结果,如果想要再次运行,就必须要清除相应的缓存。
全局模块(也称全局对象)
定义
何时何地都可以访问,不需要引用。
node中有一个全局对象global,是node中最大的一个对象,相当于浏览器中的window对象,global中的成员在使用时,可以省略global ,以下是常用的一些全局变量:
- console,打印
- process,和进程相关的对象
- setInterval,同理,也是node中的,不是浏览器中的
- require(),它是全局对象global中的一个方法,用于在js文件中引入另外的文件
- __dirname,当前执行文件的绝对路径(在js文件中使用)
- __filename,当前执行文件的绝对路径,包含文件名(在js文件中使用)
系统模块
定义
需要用require()引入,但是不需要单独下载,是node内置的模块。
许多核心常用操作都通过引入系统模块来完成;最常用的系统模块有:
- path模块:处理路径的模块
- fs模块:文件操作模块
- http模块:http服务器处理模块,可以使用http模块搭建服务器
自定义模块
定义
自己写或者自己下载一个模块,然后通过require()引入。
require的引入顺序(优先级)
- 如果括号中包含了路径,就去找对应的路径;
- 如果没有包含路径,默认会去node_module文件里找;
- 如果1和2都没找到,就会去node安装目录下找。