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

Node.js中的模塊路徑解析規(guī)則和子模塊包

 更新時(shí)間:2023年11月18日 09:22:50   投稿:yin  
NodeJS特性如事件驅(qū)動(dòng)、異步編程、無(wú)阻塞IO,這些特性為它帶來了高效的性能和更少的代碼,require函數(shù)支持斜杠(/)或盤符(C:)開頭的絕對(duì)路徑,也支持./開頭的相對(duì)路徑,為了便于管理和使用,我們可以把由多個(gè)子模塊組成的大模塊稱做包,并把所有子模塊放在同一個(gè)目錄里

Node.js 是一個(gè)基于Google V8引擎建立的一個(gè)平臺(tái), 用來方便地搭建快速、易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。第一版由Ryan Dahl于2009年2月發(fā)布,之后獲得了迅猛的發(fā)展,截止至2014年3月,雖然版本仍未到1.0正式版,但已經(jīng)在商業(yè)環(huán)境中得到很多應(yīng)用。

對(duì)于開發(fā)者來說,NodeJS有很多吸引人的特性,如事件驅(qū)動(dòng)、異步編程、無(wú)阻塞IO,這些特性為它帶來了高效的性能和更少的代碼,因此受到眾多開發(fā)者青睞。

有經(jīng)驗(yàn)的C程序員在編寫一個(gè)新程序時(shí)首先從make文件寫起。同樣的,使用NodeJS編寫程序前,為了有個(gè)良好的開端,首先需要準(zhǔn)備好代碼的目錄結(jié)構(gòu)和部署方式,就如同修房子要先搭腳手架。

模塊路徑解析規(guī)則

require函數(shù)支持斜杠(/)或盤符(C:)開頭的絕對(duì)路徑,也支持./開頭的相對(duì)路徑。但這兩種路徑在模塊之間建立了強(qiáng)耦合關(guān)系,一旦某個(gè)模塊文件的存放位置需要變更,使用該模塊的其它模塊的代碼也需要跟著調(diào)整,變得牽一發(fā)動(dòng)全身。因此,require函數(shù)支持第三種形式的路徑,寫法類似于foo/bar,并依次按照以下規(guī)則解析路徑,直到找到模塊位置。

  • 內(nèi)置模塊

    如果傳遞給require函數(shù)的是NodeJS內(nèi)置模塊名稱,不做路徑解析,直接返回內(nèi)部模塊的導(dǎo)出對(duì)象,例如require('fs')。

  • node_modules目錄

    NodeJS定義了一個(gè)特殊的node_modules目錄用于存放模塊。例如某個(gè)模塊的絕對(duì)路徑是/home/user/hello.js,在該模塊中使用require('foo/bar')方式加載模塊時(shí),則NodeJS依次嘗試使用以下路徑。

     /home/user/node_modules/foo/bar
     /home/node_modules/foo/bar
     /node_modules/foo/bar
    
  • NODE_PATH環(huán)境變量

    與PATH環(huán)境變量類似,NodeJS允許通過NODE_PATH環(huán)境變量來指定額外的模塊搜索路徑。NODE_PATH環(huán)境變量中包含一到多個(gè)目錄路徑,路徑之間在Linux下使用:分隔,在Windows下使用;分隔。例如定義了以下NODE_PATH環(huán)境變量:

     NODE_PATH=/home/user/lib:/home/lib
    

    當(dāng)使用require('foo/bar')的方式加載模塊時(shí),則NodeJS依次嘗試以下路徑。

     /home/user/lib/foo/bar
     /home/lib/foo/bar

包(package)

我們已經(jīng)知道了JS模塊的基本單位是單個(gè)JS文件,但復(fù)雜些的模塊往往由多個(gè)子模塊組成。為了便于管理和使用,我們可以把由多個(gè)子模塊組成的大模塊稱做,并把所有子模塊放在同一個(gè)目錄里。

在組成一個(gè)包的所有子模塊中,需要有一個(gè)入口模塊,入口模塊的導(dǎo)出對(duì)象被作為包的導(dǎo)出對(duì)象。例如有以下目錄結(jié)構(gòu)。

- /home/user/lib/
    - cat/
        head.js
        body.js
        main.js

其中cat目錄定義了一個(gè)包,其中包含了3個(gè)子模塊。main.js作為入口模塊,其內(nèi)容如下:

var head = require('./head');
var body = require('./body');

exports.create = function (name) {
    return {
        name: name,
        head: head.create(),
        body: body.create()
    };
};

在其它模塊里使用包的時(shí)候,需要加載包的入口模塊。接著上例,使用require('/home/user/lib/cat/main')能達(dá)到目的,但是入口模塊名稱出現(xiàn)在路徑里看上去不是個(gè)好主意。因此我們需要做點(diǎn)額外的工作,讓包使用起來更像是單個(gè)模塊。

index.js

當(dāng)模塊的文件名是index.js,加載模塊時(shí)可以使用模塊所在目錄的路徑代替模塊文件路徑,因此接著上例,以下兩條語(yǔ)句等價(jià)。

var cat = require('/home/user/lib/cat');
var cat = require('/home/user/lib/cat/index');

這樣處理后,就只需要把包目錄路徑傳遞給require函數(shù),感覺上整個(gè)目錄被當(dāng)作單個(gè)模塊使用,更有整體感。

package.json

如果想自定義入口模塊的文件名和存放位置,就需要在包目錄下包含一個(gè)package.json文件,并在其中指定入口模塊的路徑。上例中的cat模塊可以重構(gòu)如下。

- /home/user/lib/
    - cat/
        + doc/
        - lib/
            head.js
            body.js
            main.js
        + tests/
        package.json

其中package.json內(nèi)容如下。

{
    "name": "cat",
    "main": "./lib/main.js"
}

如此一來,就同樣可以使用require('/home/user/lib/cat')的方式加載模塊。NodeJS會(huì)根據(jù)包目錄下的package.json找到入口模塊所在位置。

到此這篇關(guān)于Node.js中的模塊路徑解析規(guī)則和子模塊包的文章就介紹到這了,更多相關(guān)Node.js的模塊路徑和子模塊包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你了解Node.js有哪些架構(gòu)模式

    一文帶你了解Node.js有哪些架構(gòu)模式

    Node.js 憑借其非阻塞、事件驅(qū)動(dòng)的架構(gòu),已成為構(gòu)建各種應(yīng)用程序的流行選擇,使用 Node.js 進(jìn)行開發(fā)時(shí),選擇正確的架構(gòu)模式來滿足項(xiàng)目需求至關(guān)重要,在本文中,我們將探討幾種 Node.js 架構(gòu)模式并提供示例來說明它們的用法,需要的朋友可以參考下
    2023-09-09
  • 基于Node.js實(shí)現(xiàn)圖像與文件的上傳下載功能

    基于Node.js實(shí)現(xiàn)圖像與文件的上傳下載功能

    在Web應(yīng)用中,文件與圖片上傳下載幾乎是必備功能,從用戶頭像、附件上傳,到后臺(tái)報(bào)表導(dǎo)出、圖片資源分發(fā),都離不開穩(wěn)定可靠的文件處理能力,Node.js天然適合I/O密集型任務(wù),在文件傳輸和流式處理方面具有明顯優(yōu)勢(shì),所以本文介紹了Node.js中文件與圖片的上傳與下載
    2025-12-12
  • 使用express獲取微信小程序二維碼小記

    使用express獲取微信小程序二維碼小記

    這篇文章主要介紹了使用express獲取微信小程序二維碼小記,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Node.js環(huán)境下Koa2添加travis ci持續(xù)集成工具的方法

    Node.js環(huán)境下Koa2添加travis ci持續(xù)集成工具的方法

    這篇文章主要給大家介紹了在Node.js環(huán)境下Koa2添加travis ci持續(xù)集成工具的方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • 初探nodeJS

    初探nodeJS

    本文主要介紹了nodeJS的基礎(chǔ)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • 淺談在node.js進(jìn)入文件目錄的問題

    淺談在node.js進(jìn)入文件目錄的問題

    今天小編就為大家分享一篇淺談在node.js進(jìn)入文件目錄的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • node連接mysql查詢事務(wù)處理的實(shí)現(xiàn)

    node連接mysql查詢事務(wù)處理的實(shí)現(xiàn)

    本文主要介紹了node連接mysql查詢事務(wù)處理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • node.js中實(shí)現(xiàn)GET和POST請(qǐng)求的代碼示例

    node.js中實(shí)現(xiàn)GET和POST請(qǐng)求的代碼示例

    在很多場(chǎng)景中,我們的服務(wù)器都需要跟用戶的瀏覽器打交道,如發(fā)送驗(yàn)證碼、登錄表單提交,請(qǐng)求服務(wù)器數(shù)據(jù)一般都使用GET請(qǐng)求,表單提交到服務(wù)器一般都使用POST請(qǐng)求,本文詳細(xì)介紹了在Node.js中如何處理GET和POST請(qǐng)求,需要的朋友可以參考下
    2024-12-12
  • 前端如何更好的展示后端返回的十萬(wàn)條數(shù)據(jù)

    前端如何更好的展示后端返回的十萬(wàn)條數(shù)據(jù)

    這篇文章主要為大家介紹了前端如何更好的展示后端返回的十萬(wàn)條數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-11-11
  • node.js 動(dòng)態(tài)執(zhí)行腳本

    node.js 動(dòng)態(tài)執(zhí)行腳本

    其中的Script對(duì)象,就與require('vm')返回的對(duì)象很相似,而實(shí)質(zhì)上,vm模塊就是對(duì)Script對(duì)象的封裝。
    2016-06-06

最新評(píng)論

维西| 喀喇| 内黄县| 积石山| 绍兴市| 葫芦岛市| 民县| 遵化市| 江川县| 易门县| 郸城县| 永年县| 华宁县| 石城县| 高邑县| 西安市| 云和县| 澄迈县| 寿阳县| 阳江市| 甘泉县| 海伦市| 淅川县| 阿瓦提县| 镇平县| 潼关县| 华安县| 阿勒泰市| 宝清县| 林西县| 乌拉特后旗| 岳阳县| 德昌县| 西昌市| 勐海县| 高台县| 嘉荫县| 吴桥县| 贵港市| 南陵县| 满城县|