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

解析Node.js基于模塊和包的代碼部署方式

 更新時間:2016年02月16日 15:02:00   投稿:goldensun  
這篇文章主要介紹了解析Node.js基于模塊和包的代碼部署方式,作為一個服務(wù)于本地操作系統(tǒng)的JavaScript解釋器,Node采用了簡潔的基于模塊和包概念的部署方式,需要的朋友可以參考下

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

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

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

內(nèi)置模塊

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

node_modules 目錄

NodeJS 定義了一個特殊的 node_modules 目錄用于存放模塊。例如某個模塊的絕對路徑是 /home/user/hello.js,在該模塊中使用 require('foo/bar') 方式加載模塊時,則 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)境變量中包含一到多個目錄路徑,路徑之間在 Linux 下使用:分隔,在 Windows 下使用;分隔。例如定義了以下 NODE_PATH 環(huán)境變量:

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

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

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

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

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

其中 cat 目錄定義了一個包,其中包含了 3 個子模塊。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()
  };
};

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

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

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

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

package.json
如果想自定義入口模塊的文件名和存放位置,就需要在包目錄下包含一個 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 會根據(jù)包目錄下的 package.json 找到入口模塊所在位置。

相關(guān)文章

  • node前端開發(fā)模板引擎Jade的入門

    node前端開發(fā)模板引擎Jade的入門

    這篇文章主要介紹了node前端開發(fā)模板引擎Jade的入門,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Node.js實(shí)現(xiàn)批量替換文件內(nèi)容示例

    Node.js實(shí)現(xiàn)批量替換文件內(nèi)容示例

    這篇文章主要為大家介紹了Node.js實(shí)現(xiàn)批量替換文件內(nèi)容示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 深入理解Node.js中通用基礎(chǔ)設(shè)計模式

    深入理解Node.js中通用基礎(chǔ)設(shè)計模式

    大家在談到設(shè)計模式時最先想到的就是 singletons, observers(觀察者) 或 factories(工廠方法)。本文重點(diǎn)給大家介紹Node.JS一些基礎(chǔ)模式的實(shí)現(xiàn)方法,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2017-09-09
  • 利用Node.js了解與測量HTTP所花費(fèi)的時間詳解

    利用Node.js了解與測量HTTP所花費(fèi)的時間詳解

    這篇文章主要給大家介紹了關(guān)于利用Node.js了解與測量HTTP所花費(fèi)的時間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • node.js中的fs.truncate方法使用說明

    node.js中的fs.truncate方法使用說明

    這篇文章主要介紹了node.js中的fs.truncate方法使用說明,本文介紹了fs.truncate的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Node.js pipe實(shí)現(xiàn)源碼解析

    Node.js pipe實(shí)現(xiàn)源碼解析

    這篇文章主要介紹了Node.js pipe實(shí)現(xiàn)源碼解析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • node指定內(nèi)存上限簡單代碼實(shí)例

    node指定內(nèi)存上限簡單代碼實(shí)例

    NodeJS啟動的應(yīng)用,內(nèi)存使用是有上限的,下面這篇文章主要給大家介紹了關(guān)于node指定內(nèi)存上限的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 解決node-sass偶爾安裝失敗的方法小結(jié)

    解決node-sass偶爾安裝失敗的方法小結(jié)

    這篇文章主要介紹了解決node-sass偶爾安裝失敗的方法小結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • node.js +mongdb實(shí)現(xiàn)登錄功能

    node.js +mongdb實(shí)現(xiàn)登錄功能

    這篇文章主要介紹了node.js +mongdb實(shí)現(xiàn)登錄功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 基于node.js實(shí)現(xiàn)微信支付退款功能

    基于node.js實(shí)現(xiàn)微信支付退款功能

    在微信開發(fā)中有有付款就會有退款,這樣的功能非常常見,這篇文章主要介紹了node.js實(shí)現(xiàn)微信支付退款功能,需要的朋友可以參考下
    2017-12-12

最新評論

元阳县| 翁源县| 三都| 竹山县| 怀远县| 利津县| 岳阳市| 高雄市| 阿图什市| 鞍山市| 临夏市| 洪泽县| 图们市| 黑河市| 琼中| 义马市| 三都| 扬中市| 类乌齐县| 兴和县| 定远县| 黔西县| 常熟市| 巴塘县| 兴宁市| 陆河县| 平安县| 尉氏县| 宁强县| 扎囊县| 黄石市| 柏乡县| 玉门市| 温泉县| 青龙| 凉山| 弥渡县| 博爱县| 成安县| 肇庆市| 门头沟区|