即本身写的功能模块文件,一个js文件即表明一个自定义的文件模块。node
const calc = require('./modules/calculator.js');
Node平台自带一套基本的功能模块,也有人称之为Node平台的API。mysql
const path = require('path'); const fs = require('fs');
社区或第三方开发的功能模块,这种模块在Node自己没有,须要经过NPM的方式下载以后再引入。好比要操做mysql数据库,则须要引入mysql这个模块。c++
const express = require('express');
即建立一个js文件,由于一个模块一般对应着一个js文件。能够在该文件当中封装几个内部函数,以下所示。sql
Node采用的模块化结构遵循CommonJS规范。模块与文件是一一对应的,加载一个模块实际上就是加载一个js模块文件。数据库
在模块文件内部用module.exports = {};
来导出成员。以下所示。express
可使用ES6当中的“自动属性”的语法,则上述导出成员的代码能够用
module.exports = {add,subtract};
来代替。在调用时,使用“模块名.add”即表明这个模块文件当中的add这个属性值所对应函数。json
使用相对路径,用require的方式来载入在自定义的模块文件。模块化
一、当require当中的参数字符串以./
(从当前目录出发)或../
(从上一级目录出发)开头:表示按照相对路径,从当前文件所在的文件夹开始寻找要载入的模块文件。函数
二、当require当中的参数字符串以/
开头:则表示从系统根目录开始寻找该模块文件。ui
三、若是参数字符串不以./
或/
或../
开头,说明要加载的不是一个文件,而是一个默认提供的核心模块。此时则先在node平台所提供的核心模块当中找,而后再寻找NPM模块(即第三方模块包,或本身写的模块包)。在寻找NPM模块包时,会从当前目录出发,向上搜索各级当中的node_modules
文件夹当中的文件,但如有两个同名文件,则遵循就近原则。
一、node的系统模块的优先级最高,一旦有第三方模块包与系统模块重名,则以系统模块为准。
二、以前在使用require的方式来加载一个文件时,若是该文件在当前目录当中,则参数字符串当中必须以./
开头,不能直接写文件名。若在参数字符串当中直接写文件名,则表明载入的是一个模块包,模块包必须放在一个特定名字的文件夹当中,即node_modules
。
四、使用require来加载文件时能够省略扩展名。好比require('./module')
,则对应的加载顺序为,
module.js
文件来加载)module.json
文件来加载)module.node
文件来加载)package.json
文件,而后再再加载该文件当中main字段所指定的入口文件。(若package.json
文件当中没有main
字段,或者根本没有package.json
文件,则再默认查找该文件夹下的index.js
文件做为模块来载入。)