了解npm的文件結構(npm-folders)和配置文件(npm-mrc)


一、npm的文件結構

  npm的安裝:

    本地安裝

    • 1. 將安裝包放在 ./node_modules 下(運行 npm 命令時所在的目錄),如果沒有 node_modules 目錄,會在當前執行 npm 命令的目錄下生成 node_modules 目錄。
    • 2. 可以通過 require() 來引入本地安裝的包。

    全局安裝

    • 1. 將安裝包放在 /usr/local 下或者你 node 的安裝目錄。
    • 2. 可以直接在命令行里使用。

    如果你希望具備兩者功能,則需要在兩個地方安裝它或使用 npm link

  node目錄:

    安裝目錄默認為安裝目錄。

    在windows中,默認node目錄:/ usr / local。

    在Unix系統中,一般安裝在{node目錄} / bin /目錄下而不是{安裝目錄} / node.exe目錄下。

    全局安裝目錄:

      若設置了node目錄,就安裝到node目錄下,

      若沒設置node目錄則安裝到當前路徑目錄下

  Node_modules:

    在本地包在node_modules目錄下可以按package名稱進行加載主要模塊,或按package名稱/lib/path/to/sub/module目錄加載其他模塊。

  全局Node_modules:

    在Unix系統中{node目錄} / lib / node_modules。

    在Windows中{node目錄} / node_modules(即沒有lib文件夾。

    包的作用域:node_modules文件夾的子文件夾名與@包有相關作用域。

    例如npm install @myorg/package將包放到/node_modules/@myorg/package目錄下能看到所有范圍的細節。

    如果需要引入對應的包可以使用require() 引入到本地項目中。

  可執行文件:

    全局:Unix  / bin在目錄下引用可執行文件,或在Windows的目錄下引用可執行文件。

    本地:在/ node_modules /目錄下引用可執行文件。可以通過npm腳本運行。

  手冊頁:

    全局:在{prefix}/share/man目錄下.

    本地或windows不安裝npm手冊頁。

  緩存:

    查看命令:npm-cache(1),參數由緩存配置參數配置

    緩存存放目錄:在Posix npm的緩存文件存儲在~ /。,或者在Windows~ / npm-cache。

  臨時文件:

    臨時文件默認存儲在指定的文件夾中tmp配置,它的文件格式默認為TMPDIR,tmp,

    臨時環境變量:在Unix中為/ tmp。

           在windows中為c:\ windows \ TEMP。

    為每個運行程序目錄下分配一個臨時文件進行程序的記錄相關臨時信息。如程序的程序的運行、運行成功、運行錯誤、結束。

  更多信息:

    npm在本地首先會嘗試找到當前目錄下的根目錄尋找foo@1.2.3包。作用cd命令也能到相關目錄。

    npm將會從package.json文件或node_modules目錄查找包。使用npm命令進行查找包或模塊則被視為有效。(這種行為類似於git,使用git-folder進行運行工作目錄。)

    如果沒有找到包的根目錄,則使用當前文件夾。當您運行npm install foo@1.2.3,然后加載到包 緩存,然后打開./node_modules/foo。 然后,任何 foo的依賴性也同樣打開./node_modules/foo/node_modules/...

    在/ node_modules / bin目錄文件中被依賴。所以必要時通過npm腳本來查找他們。  

  全球安裝:如果全局配置被設置為true,那么npm將安裝“globally”包。全局安裝方式大致相同,但需使用上述"globally"目錄。

  生命周期:

    系統模塊循環使用模塊時會在不同的階段查找node_modules目錄,如果一個包存在node_modules目錄的根目錄上,則不會出現在當前位置。

    考慮上面的例子,如果在foo -> bar -> barz之外,由於barz依賴於bar,你會想目錄結構應是:foo -> bar -> baz -> bar -> baz ...,然而目錄結構卻是:foo/node_modules/bar/node_modules/barz,因為barz依賴於bar,你的目錄結構要是:foo -> bar -> baz -> bar -> baz,當它調用("bar"),它會獲得這個副本並代替foo/n ode_modules/bar。

    僅當在多個嵌套node_modules目錄中安裝完全相同的版本時,才使用此快捷方式。 如果兩個“a”包是不同的版本,仍然存在a/ node_modules / b / node_modules / a目錄。 然而沒有多次重復完全相同的包,將總是防止無限回歸。另一個優化可以通過在本地化的“目標”文件夾下安裝最高級別的依賴項。另一個優化可以通過安裝依賴在最高的層次上,在局部“目標”文件夾中。

    例如:以下這個依賴圖:

    

    在這種情況下,我們可能希望這樣的文件夾結構:

    

    因為foo直接取決於bar@1.2.3和baz@1.2.3,它們安裝在foo的node_modules文件夾中。即使blerg的最新副本是1.3.7,foo對版本1.2.5有特定的依賴。

    所以,安裝在[A]。 由於父安裝blerg滿足bar對blerg@1.x的依賴,它不會在[B]下安裝另一個副本。Bar [B]也依賴於baz和asdf,所以這些都安裝在bar的node_modules文件夾中。

    因為它取決於baz@2.x,它不能重復使用安裝在父節點node_modules文件夾[D]中的baz@1.2.3,並且必須安裝自己的副本[C]。

    在bar下面,baz - > quux - > bar依賴創建一個循環。 然而,因為bar已經在quux的祖先[B],它不解壓縮另一個bar副本到該文件夾。

    在foo - > baz [D]下,quux的[E]文件夾樹是空的,因為它對bar的依賴關系由安裝在[B]的父文件夾副本滿足。

    可以使用npm ls查看依賴樹的結構。

  項目發布:

  在發布npm node_modules文件夾中。如果任何物品沒有bundledDependencies數組中,然后他們將不會包含在包tarball。允許維護人員在本地(dev依賴性)使用這個包來安裝所有的依賴關系,但只有結集於那些無法找到其他地方的項目。

二、npm的配置文件

  描述:npm從命令行,環境變量和npmrc文件獲取其配置設置。npm config命令可用於更新和編輯用戶和全局npmrc文件的內容。

  配置文件介紹:

    項目配置文件(/path/to/my/project/.npmrc)
    用戶配置文件(〜/ .npmrc)
    全局配置文件($ PREFIX / etc / npmrc)
    npm內置配置文件(/ path / to / npm / npmrc)

    所有npm配置文件都是key = value參數的格式化列表。 環境變量可以使用$ {VARIABLE_NAME}替換。 例如:

    prefix = ${HOME}/.npm-packages

    加載這些文件中的每一個配置選項,並按優先級順序解析。 例如,userconfig文件中的設置將覆蓋globalconfig文件中的設置。

    通過在鍵名稱后面添加“[]”來指定數組值。 例如:

    key[] = "first value"

    key[] = "second value"

    注意:由於本地(每個項目或每個用戶).npmrc文件可以包含敏感憑據,它們必須只能由您的用戶帳戶讀取和寫入(即必須具有0600的模式),否則將被npm忽略! 

  項目配置文件:

    當在項目中本地工作時,項目根目錄中的.npmrc文件(即node_modules和package.json的兄弟節點)將設置特定於此項目的配置值。

    請注意,這僅適用於您運行npm的項目的根。它在您的模塊發布時沒有任何效果。 例如,您不能發布強制自己在全局或其他位置安裝的模塊。

    此外,此文件不是在全局模式下讀取,例如當運行npm install -g時。

  用戶配置文件:$HOME/.npmrc(或userconfig參數,如果設置環境 或在命令行上)

  全局配置文件:$ PREFIX / etc / npmrc(或globalconfig參數,如果設置如上):該文件是key = value參數的ini文件格式化列表。 環境變量可以如上替換。

  內置配置文件:path / to / npm / itself / npmrc 這是一個不可更改的“內置”配置文件,npm在更新中保持一致。 使用npm附帶的./configure腳本在此處設置字段。 這主要用於分發維護者以標准和一致的方式重寫默認配置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM