2015-12-21 161 views
0

本地NPM模塊不再爲我正確安裝在我的項目中node_modules dir。這剛剛開始發生。本地NPM模塊未正確安裝

我成立了一個測試目錄與的package.json

{ 
    "name": "test", 
    "version": "0.0.0" 
} 

然後運行這個命令:

npm install grunt --save-dev 

這是我在node_modules得到目錄:

enter image description here

打開咕嚕目錄,你可以看到有沒有node_modules

enter image description here

一些出現在根的NPM模塊都似乎是屬於咕嚕NPM模塊 NPM模塊,有些我不知道他們來自哪裏?例如。 縮寫esprima優美-FS

我曾經得到這樣的:

project 
│ 
└───node_modules 
| │ 
| └───grunt 
| 
└───package.json 

我已經試過完全從我的機器中取出的Node.js和NPM(的Mac OS X 10.10.5)遵循這些instructions。然後將其重新安裝在Homebrew(以前安裝的位置)之外,這並沒有改變任何東西。然後再次完全刪除Node.js和NPM並重新安裝它 Homebrew,但這次我申請了this。這再次沒有解決任何問題。

不確定發生了什麼事?

回答

1

這是預期的行爲。當你安裝grunt時,npm遞歸地安裝它的所有依賴關係。這些可能會被放到grunt/node_modules中,或者可能放在與grunt相同的級別上(直接在頂層node_modules中)。這兩個選項都可以工作,這是因爲節點的工作原理:如果grunt需要某些包(例如顏色),並且節點在grunt的node_modules目錄中找不到它,節點會嘗試在父目錄的目錄中找到該包,然後在祖父母目錄等。

在這兩個選項中,較老的npm版本更喜歡第一個選項,較新的版本更喜歡第二個選項(即更平坦的依賴關係樹),這正是您的情況。在你的情況下,'async'或'colors'等軟件包是grunt依賴項(檢查它的package.json),'abbrev'不是grunt的直接依賴項,但可能它是其他依賴項的依賴項。

更多閱讀:

https://docs.npmjs.com/cli/dedupe

https://github.com/alexanderGugel/ied

https://docs.npmjs.com/cli/shrinkwrap

+0

OK感謝您的解釋。我想我不明白這個部分:_「'abbrev'不是grunt的直接依賴,但可能它是一些其他依賴的依賴。」_如果我只有** grunt **,那麼可以使用這些依賴呢?這只是讓我感覺破了。 – crite

+0

不,它肯定沒有壞:)咕嚕依賴'nopt'包依賴'abbrev'包。由於現代npm更加依賴於平面依賴樹,所以你最終將所有這些依賴關係放在一個目錄中。 OTOH,如果使用較舊的npm,您最終會在./node_modules/grunt/nopt中找到'nopt',並在./node_modules/grunt/nopt/node_modules/abbrev中找到'abbrev' –