1、npm的文件結構node
npm的安裝:git
本地安裝npm
全局安裝json
若是你但願具有二者功能,則須要在兩個地方安裝它或使用 npm link。windows
node目錄:數組
安裝目錄默認爲安裝目錄。緩存
在windows中,默認node目錄:/ usr / local。優化
在Unix系統中,通常安裝在{node目錄} / bin /目錄下而不是{安裝目錄} / node.exe目錄下。ui
全局安裝目錄:spa
若設置了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依賴性)使用這個包來安裝全部的依賴關係,但只有結集於那些沒法找到其餘地方的項目。
2、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腳本在此處設置字段。 這主要用於分發維護者以標準和一致的方式重寫默認配置。