2013-08-23 239 views
107

這對於我,包括父項目的模塊,我package.jsonNPM不安裝模塊依賴

{ 
    "version": "0.0.1", 
    "name": "module-name", 
    "dependencies": { 
    "express": "3.3.4", 
    "grunt": "0.4.1", 
    "grunt-contrib-compass": "0.4.0", 
    "grunt-contrib-copy": "0.4.1", 
    "grunt-contrib-cssmin": "0.4.1", 
    "grunt-contrib-jshint": "0.6.3", 
    "grunt-contrib-requirejs": "0.4.1", 
    "grunt-contrib-uglify": "0.2.2", 
    "grunt-contrib-watch": "0.5.1", 
    "grunt-express-server": "0.4.1", 
    "grunt-karma": "0.4.5", 
    "grunt-regex-replace": "0.2.5", 
    "request": "2.25.0" 
    }, 
    "scripts": { 
    "postinstall": "grunt install" 
    } 
} 

有一點要注意的是,該模塊包含在私人回購和我它包括在父package.json,如:"module-name": "git+ssh://[email protected]:user/module-name.git"

+0

你的package.json看起來不錯,就像你用來包含它的行一樣。你有錯誤信息嗎?在你的道路上是git嗎? – poida

+0

我沒有得到任何錯誤每sa,模塊安裝,但我的'postinstall'腳本失敗,因爲沒有找到本地'grunt'包,因爲它們不是由NPM安裝 –

+1

這個問題在2016年11月仍然存在。我做了一個乾淨的安裝一臺新電腦上的工作模塊。 @ Mohsen的答案解決了它。 –

回答

108

它看起來像你遇到了一個存在了很長一段時間的錯誤,並沒有解決方案。有在故宮庫對於這種情況的幾個開放式的問題:

在第一個人列出了幾種可能嘗試的解決方法。

一個替代解決方案可能(有點hackish)明確列出依賴關係作爲第一級依賴。這需要你維護清單,但實際上它必須很少進行。

+9

很高興知道這不只是我,有一些點! –

+1

它仍然不適合我。 –

+0

@ Flame2057很高興知道你運氣不佳,儘管信息量不大。你可以繼續並提出一個問題,希望社區有解決的知識。玩的開心! – allprog

3

您可能需要安裝咕嚕-CLI,做一個NPM之前嘗試此安裝:

sudo npm install -g grunt-cli 

修復了咕嚕聲不會退出我,你還需要一個有效的咕嚕聲文件。

來源:https://stackoverflow.com/a/16456467/241294

+0

嗯,這就是所有:http://pastebin.com/pZAcSQwi –

+0

當你在命令提示符下嘗試命令'grunt'時會發生什麼?它是否存在於你的道路上?你是對的,它看起來好像是從你的pastebin安裝的。你用sudo和-g安裝了嗎? – poida

+0

這不是一個與grunt的問題:'〜ᐅ哪個咕嚕 /opt/local/bin/grunt' –

10

我懷疑你正面臨在您package.json文件不在相同的目錄中Gruntfile.js問題。當你運行你的grunt xxx命令,你會得到錯誤,如一個消息:

Local Npm module "xxx" not found. Is it installed? 

目前,該解決方案是:

  • 在同一目錄下創建Gruntfile.js的package.json
  • 定義您的grunt項目所需的模塊
  • 執行npm install以在本地加載它們
  • 現在所需的grunt命令應該可以工作。

恕我直言,很遺憾,我們不能從父npm模塊(即同一個項目中的父目錄中的package.json)加載grunt解決模塊。討論here似乎表明它已完成避免加載「全局」模塊,但我認爲我們想要的是從「我的項目」模塊加載。

+0

所以這是我的父項目(這是導入子模塊項目的結構):http://cl.ly/image/020E0b3I0t1A和我的子模塊項目的結構:http://cl.ly/image/2q0L3l1v0s40;你可以看到兩者都包含'Gruntfile.js',並且都包含同一級別的'package.json'。 –

+0

這不是'grunt'的問題,這是'npm'的問題,而不是遞歸地在我的子模塊項目中安裝依賴項。 –

94

我有非常類似的問題,刪除整個node_modules文件夾和重新安裝爲我工作。從IT Crowd節目中學會了這個把戲!

rm -rf node_modules 
npm install 
+0

這實際上對我有用。我認爲這真的很奇怪 - 是什麼導致了這個小故障?無論如何,如果我刪除該文件夾並重新運行npm install,那麼它可以工作。之前,沒有任何東西會安裝在該子目錄中。現在,它全部安裝在那裏。 – CtheGood

+0

謝謝@Moshen。我已經刪除了舊版本的Node,並進行了全新安裝。我刪除了所有node_modules /全局,但忘記從一些現有的應用程序中刪除。我必須刪除每個現有應用程序目錄中的node_modules文件夾,然後運行'npm install'。 – wilblack

+0

古老的「你嘗試從_scratch_方法重新啓動嗎?」。這對我很好。 –

2

我在Windows上安裝了乾淨的Node dev環境時收到了這個錯誤。

爲了解決這個問題,我走進我的新項目目錄(即我只是yo angular腳手架),並輸入了兩個命令:

npm install -g grunt --save-dev

將安裝在本地咕嚕依賴於你的項目。下一頁:

npm install

這將確保所有的安裝(新)項目依賴。

田田!

3

爲了防止任何人遭受這種困境,並且恰好與我做了相同的茶氨酸錯誤,這裏就是我的情況。在將我的頭靠在牆上一個小時後,我意識到我的json被錯誤地嵌套了,關鍵的「依賴關係」在關鍵的「存儲庫」中。
不用說,沒有錯誤是明顯的,沒有安裝模塊。

13

如果您繼承了此代碼,則可能是因爲依賴項和版本已被鎖定,並且您有一個./npm-shrinkwrap.json文件。

如果您的依賴項沒有在該文件中列出,它將永遠不會與npm install命令一起安裝。

您需要手動安裝軟件包,然後運行npm shrinkwrap來更新shrinkwrap文件。

+2

我有一個問題,在更新到節點8.0.0和npm 5.0.0後,手動安裝包創建了一個'package-lock.json'文件。在那之後,運行'npm install'只會安裝那個包,而不是所有的依賴包。刪除'package-lock.json'並重新運行'npm install'解決了我的問題。 – Monkpit

+1

@Monkpit這也爲我解決了,謝謝! 'package-lock.json'正在妨礙中。 – VirtualWolf

6

OP可能適用於較舊版本的節點。但是,我也遇到了與節點4.4.1相同的情況。

很好,可能會鏈接到您正在使用的節點版本。嘗試升級到最新版本。如果某些依賴項與節點版本不兼容,則不會傳遞加載。我運行了npm update

升級到最新版本(4.4 - > 5.9)後;這已得到修復。

+2

這一個爲我'npm update'工作。謝謝!!!! – mike123

0

我有同樣的問題。但是在同一臺機器上,一個項目有很好的package.json,我所有的依賴項都安裝成功。而在另一個項目中,無論我做什麼,我的package.json依賴項都沒有安裝。 我剛剛複製了package.json並粘貼到另一個項目中。它的工作! 我發現的差異只是在文件開始處的空行。不知道或者它影響任何事情,也許還有其他一些問題。但問題只是package.json文件。

9

我正在使用Windows機器。

  1. 我刪除了node_modules文件夾。
  2. 不知何故,package.lock.json文件正在創建。我刪除了該文件。
  3. 然後npm安裝。
  4. 清潔版本。
  5. 運行。
+2

這個答案需要得到更多的愛。package.lock.json文件搞砸了我。 – mwilcox

0

在我的情況下,它有助於刪除node_modulespackage-lock.json

之後,只需重新安裝一切與npm install

+0

這不提供問題的答案。一旦你有足夠的[聲譽](https://stackoverflow.com/help/whats-reputation),你將可以[對任何帖子發表評論](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提問者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [來自評論](/ review/low-quality-posts/18613478) –