詳解在node.js中require方法的加載規(guī)則
require 方法的加載規(guī)則
- 優(yōu)先從緩存中加載
- 核心模塊
- 路徑形式的模塊
- 第三方模塊
一、優(yōu)先從緩存中加載
main.js:執(zhí)行加載a.js模塊
require('./a')
a.js:執(zhí)行加載b.js模塊,并輸出a被加載了
require('./b') console.log('a.js 被加載了')
b.js:輸出b被加載了
console.log('b.js 被加載了')
結(jié)果:
可以看出:main去加載a.js,然后a在去加載b.js過程中,并沒有打印兩次 a.js被加載,Node會直接從require.cache中根據(jù)傳入的id,取出該對象的exports值,不會再次執(zhí)行該模塊代碼。
二、核心模塊
核心模塊的本質(zhì)也是文件,核心模塊文件已經(jīng)被編譯到了二進(jìn)制文件中了,我們只需要按照名字來加載就可以了。如:
- require(‘fs')
- require(‘http')
三、路徑形式的模塊
我們說的路徑形式的模塊,其實就是加載自己寫的JS文件,有四種方式可以加載
var fooExports = require('./index') //相對路徑,常用 var fooExports = require('../index') //相對路徑,常用 var fooExports = require('/index') //根目錄,不常用 var fooExports = require('D:/demo/index') //根目錄,不常用
四、第三方模塊
- 凡是用到第三方模塊,都必須通過 npm 來下載
- 使用的時候就可以通過 require(‘包名') 的方式來進(jìn)行加載才可以使用
- 不可能有任何一個第三方包和核心模塊的名字是一樣的
既不是核心模塊、也不是路徑形式的模塊,就是第三方模塊。加載方式如下
以 var template = require(‘a(chǎn)rt-template') 為例:
- 先找到當(dāng)前文件所處目錄中的 node_modules 目錄
- 然后根據(jù)以下方式找到文件中的 main 屬性
- main 屬性中就記錄了 art-template 的入口模塊
- 然后加載使用這個第三方包,但是實際上最終加載的還是文件
- 如果 package.json 文件不存在或者 main 指定的入口模塊是也沒有
- 則 node 會自動找該目錄下的 index.js,也就是說 index.js 會作為一個默認(rèn)備選項
- 如果以上所有任何一個條件都不成立,則會進(jìn)入上一級目錄中的 node_modules 目錄查找
- 如果上一級還沒有,則繼續(xù)往上上一級查找
- 如果直到當(dāng)前磁盤根目錄還找不到,最后報錯: can not find module xxx
第三方模塊尋找順序: node_modules/art-template > package.json 文件 > main 屬性 > index.js
到此這篇關(guān)于詳解在node.js中require方法的加載規(guī)則的文章就介紹到這了,更多相關(guān)node.js require方法加載規(guī)則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nodejs 發(fā)送Post請求功能(發(fā)短信驗證碼例子)
這篇文章主要介紹了Nodejs 發(fā)送Post請求功能(發(fā)短信驗證碼例子),需要的朋友可以參考下2017-02-02用Nodejs實現(xiàn)在終端中炒股的實現(xiàn)
這篇文章主要介紹了用Nodejs實現(xiàn)在終端中炒股的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10nodejs使用http模塊發(fā)送get與post請求的方法示例
這篇文章主要介紹了nodejs使用http模塊發(fā)送get與post請求的方法,結(jié)合實例形式分析了nodejs基于http模塊實現(xiàn)發(fā)送get與post請求具體操作技巧,需要的朋友可以參考下2018-01-01如何在node.js中使用?JsonWebToken模塊進(jìn)行token加密
目前在web框架中最流行的身份驗證是使用jsonwebtoken,簡稱jwt.可以設(shè)置加密方式,過期時間,存放個人信息,逆解析,下面這篇文章主要給大家介紹了關(guān)于如何在node.js中使用?JsonWebToken模塊進(jìn)行token加密的相關(guān)資料,需要的朋友可以參考下2023-03-03