在NodeJs中,一般將代碼合理拆分到不同的JS文件中,每一個(gè)文件就是一個(gè)模塊,而文件路徑就是模塊名.
1.0 概念
- require
require函數(shù)用于在當(dāng)前模塊中加載和使用別的模塊,另外模塊中的.js擴(kuò)展名可以省略.
還可以使用以下方式加載和使用一個(gè)JSON文件
var data = require('./data.json')
- exports
exports對(duì)象是當(dāng)前模塊的導(dǎo)出對(duì)象.用于導(dǎo)出模塊公有方法和屬性.別的模塊通過(guò)require函數(shù)調(diào)用. - module
通過(guò)module對(duì)象可以訪問(wèn)到當(dāng)前模塊的一些相關(guān)信息. 但最多的用途是替換當(dāng)前模塊的導(dǎo)出對(duì)象.
模塊導(dǎo)出對(duì)象默認(rèn)是一個(gè)普通對(duì)象,如果想改成一個(gè)函數(shù)的話,使用如下方式
module.exports = function () { console.log('hello world') };
2.0 模塊初始化
一個(gè)模塊的JS代碼僅在模塊第一次被使用時(shí)執(zhí)行一次,并且在執(zhí)行過(guò)程中初始化模塊導(dǎo)出對(duì)象之后,緩存起來(lái)的導(dǎo)出對(duì)象被重復(fù)利用
3.0 模塊路徑解析規(guī)則
require函數(shù)支持(/)斜杠或盤(pán)符(C:)開(kāi)頭的絕對(duì)路徑,也支持(./)開(kāi)頭的相對(duì)路徑
另外還有一種路徑規(guī)則
- 內(nèi)置模塊
如果傳遞給require函數(shù)的事nodejs的內(nèi)置模塊名稱(chēng),不做路徑解析,直接返回內(nèi)部模塊的對(duì)象. eg: require('fs') - node_modules目錄
eg: 某個(gè)模塊的絕對(duì)路徑是/home/user/hello.js, 在該模塊中使用require('foo/bar')方式加載模塊時(shí),則nodehs依次嘗試使用以下路徑.
/home/user/node_modules/foo/bar
/home/node_modules/foo/bar
/node_modules/foo/bar