最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node?文件查找優(yōu)先級(jí)及?Require?方法文件查找策略

 更新時(shí)間:2022年09月25日 08:36:37   作者:別救了這猴子廢了???????  
這篇文章主要介紹了Node文件查找優(yōu)先級(jí)及Require方法文件查找策略。文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

一、模塊規(guī)范

NodeJS對(duì)CommonJS進(jìn)行了支持和實(shí)現(xiàn),讓我們?cè)陂_發(fā)node的過程中可以方便的進(jìn)行模塊化開發(fā):

  • 在Node中每一個(gè)js文件都是一個(gè)單獨(dú)的模塊
  • 模塊中包括CommonJS規(guī)范的核心變量:exports、module.exports、require
  • 通過上述變量進(jìn)行模塊化開發(fā)

而模塊化的核心是導(dǎo)出與導(dǎo)入,在Node中通過exportsmodule.exports負(fù)責(zé)對(duì)模塊中的內(nèi)容進(jìn)行導(dǎo)出,通過require函數(shù)導(dǎo)入其他模塊(自定義模塊、系統(tǒng)模塊、第三方庫模塊)中的內(nèi)容

二、查找策略

require方法接收一下幾種參數(shù)的傳遞:

  • 原生模塊:http、fs、path等
  • 相對(duì)路徑的文件模塊:./mod或../mod
  • 絕對(duì)路徑的文件模塊:/pathtomodule/mod
  • 目錄作為模塊:./dirname
  • 非原生模塊的文件模塊:mod

require參數(shù)較為簡(jiǎn)單,但是內(nèi)部的加載卻是十分復(fù)雜的,其加載優(yōu)先級(jí)也各自不同,如下圖:

從上圖可以看見,文件模塊存在緩存區(qū),尋找模塊路徑的時(shí)候都會(huì)優(yōu)先從緩存中加載已經(jīng)存在的模塊

原生模塊

而像原生模塊這些,通過require方法在解析文件名之后,優(yōu)先檢查模塊是否在原生模塊列表中,如果在則從原生模塊中加載

絕對(duì)路徑、相對(duì)路徑

如果require絕對(duì)路徑的文件,則直接查找對(duì)應(yīng)的路徑,速度最快

相對(duì)路徑的模塊則相對(duì)于當(dāng)前調(diào)用require的文件去查找

如果按確切的文件名沒有找到模塊,則 NodeJs 會(huì)嘗試帶上 .js、.json或 .node拓展名再加載

目錄作為模塊

默認(rèn)情況是根據(jù)根目錄中package.json文件的main來指定目錄模塊,如:

{ "name" : "some-library",
  "main" : "main.js" }

如果這是在./some-library node_modules目錄中,則 require('./some-library') 會(huì)試圖加載 ./some-library/main.js

如果目錄里沒有 package.json文件,或者 main入口不存在或無法解析,則會(huì)試圖加載目錄下的 index.js 或 index.node 文件

非原生模塊

在每個(gè)文件中都存在module.paths,表示模塊的搜索路徑,require就是根據(jù)其來尋找文件

window輸出如下:

[ 'c:\nodejs\node_modules','c:\node_modules' ]

可以看出module path的生成規(guī)則為:從當(dāng)前文件目錄開始查找node_modules目錄;然后依次進(jìn)入父目錄,查找父目錄下的node_modules目錄,依次迭代,直到根目錄下的node_modules目錄

當(dāng)都找不到的時(shí)候,則會(huì)從系統(tǒng)NODE_PATH環(huán)境變量查找

舉個(gè)例子

如果在/home/ry/projects/foo.js文件里調(diào)用了 require('bar.js'),則 Node.js 會(huì)按以下順序查找:

  • /home/ry/projects/node_modules/bar.js
  • /home/ry/node_modules/bar.js
  • /home/node_modules/bar.js
  • /node_modules/bar.js

這使得程序本地化它們的依賴,避免它們產(chǎn)生沖突

三、總結(jié)

通過上面模塊的文件查找策略之后,總結(jié)下文件查找的優(yōu)先級(jí):

  • 緩存的模塊優(yōu)先級(jí)最高
  • 如果是內(nèi)置模塊,則直接返回,優(yōu)先級(jí)僅次緩存的模塊
  • 如果是絕對(duì)路徑 / 開頭,則從根目錄找
  • 如果是相對(duì)路徑 ./開頭,則從當(dāng)前require文件相對(duì)位置找
  • 如果文件沒有攜帶后綴,先從js、json、node按順序查找
  • 如果是目錄,則根據(jù) package.json的main屬性值決定目錄下入口文件,默認(rèn)情況為 index.js
  • 如果文件為第三方模塊,則會(huì)引入 node_modules 文件,如果不在當(dāng)前倉庫文件中,則自動(dòng)從上級(jí)遞歸查找,直到根目錄

到此這篇關(guān)于Node 文件查找優(yōu)先級(jí)及 Require 方法文件查找策略的文章就介紹到這了,更多相關(guān)Node 文件查找內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Node Sass依賴問題排查思路解析

    Node Sass依賴問題排查思路解析

    這篇文章主要為大家介紹了Node Sass依賴問題排查思路解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 詳解基于node的前端項(xiàng)目編譯時(shí)內(nèi)存溢出問題

    詳解基于node的前端項(xiàng)目編譯時(shí)內(nèi)存溢出問題

    本篇文章主要介紹了基于node的前端項(xiàng)目編譯時(shí)內(nèi)存溢出問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • node.js中TCP Socket多進(jìn)程間的消息推送示例詳解

    node.js中TCP Socket多進(jìn)程間的消息推送示例詳解

    這篇文章主要給大家介紹了關(guān)于node.js中TCP Socket多進(jìn)程間的消息推送的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 從零開始學(xué)習(xí)Node.js系列教程三:圖片上傳和顯示方法示例

    從零開始學(xué)習(xí)Node.js系列教程三:圖片上傳和顯示方法示例

    這篇文章主要介紹了Node.js圖片上傳和顯示方法,結(jié)合實(shí)例形式分析了nodejs基于http傳輸圖片文件及顯示圖片的相關(guān)實(shí)現(xiàn)步驟與操作技巧,需要的朋友可以參考下
    2017-04-04
  • Node.js API詳解之 querystring用法實(shí)例分析

    Node.js API詳解之 querystring用法實(shí)例分析

    這篇文章主要介紹了Node.js API詳解之 querystring用法,結(jié)合實(shí)例形式分析了Node.js API中querystring的基本功能、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • NodeJS實(shí)現(xiàn)單點(diǎn)登錄原理解析

    NodeJS實(shí)現(xiàn)單點(diǎn)登錄原理解析

    隨著公司業(yè)務(wù)的增多,必然會(huì)產(chǎn)生各個(gè)不同的系統(tǒng),如果每個(gè)系統(tǒng)都需要單獨(dú)登錄的話就會(huì)很不方便,所以這個(gè)時(shí)候單點(diǎn)登錄會(huì)很方便,今天通過本文給大家講解NodeJS實(shí)現(xiàn)單點(diǎn)登錄原理解析,感興趣的朋友一起看看吧
    2022-05-05
  • Node.js中http模塊和導(dǎo)出共享問題

    Node.js中http模塊和導(dǎo)出共享問題

    這篇文章主要介紹了Node.js中http模塊和導(dǎo)出共享,通過?http?模塊提供的?http.createServer()?方法,就能方便的把一臺(tái)普通的電腦,變成一臺(tái)?web?服務(wù)器,從而對(duì)外提供?web?資源服務(wù),本文給大家詳細(xì)講解,需要的朋友可以參考下
    2022-10-10
  • Node.js?連接?MySql?統(tǒng)計(jì)組件屬性的使用情況解析

    Node.js?連接?MySql?統(tǒng)計(jì)組件屬性的使用情況解析

    這篇文章主要為大家介紹了Node.js?連接?MySql?統(tǒng)計(jì)組件屬性的使用情況解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • centos 上快速搭建ghost博客方法分享

    centos 上快速搭建ghost博客方法分享

    本文給大家分享的是如何在centos上快速搭建基于Node.js 構(gòu)建的開源博客平臺(tái)ghost的方法,非常的實(shí)用,有需要的小伙伴可以參考下
    2018-05-05
  • Node.js?npm?安裝過程中EBUSY錯(cuò)誤的分析與解決方案

    Node.js?npm?安裝過程中EBUSY錯(cuò)誤的分析與解決方案

    使用?npm?進(jìn)行安裝是一個(gè)非常常見的操作,npm在安裝過程中可能出現(xiàn)EBUSY錯(cuò)誤,本文就來介紹一下如何解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-01-01

最新評(píng)論

西充县| 沙洋县| 开鲁县| 天等县| 博兴县| 全州县| 咸阳市| 长春市| 呼玛县| 阿拉善盟| 旺苍县| 搜索| 广平县| 丰原市| 柞水县| 澄江县| 赫章县| 收藏| 黄平县| 保靖县| 北海市| 华安县| 神池县| 紫阳县| 宁明县| 武安市| 绥阳县| 林西县| 田阳县| 大港区| 南召县| 静海县| 庆云县| 南江县| 阜阳市| 威远县| 永昌县| 乐山市| 玉溪市| 栾城县| 凤山市|