2013-08-06 90 views
7

我的package.json看起來像這樣(name/description/etc。省略)。npm install似乎並沒有得到所有依賴關係

{ 
    "dependencies": { 
     "express": "3.3.4", 
     "jade": "0.34.x", 
     "mongoose": "3.6.x" 
    }, 
    "devDependencies": { 
     "vows": "0.7.x" 
    } 
} 

我在倉庫使用express就跑自動生成node app.js。這工作,但當我用curl http://localhost:port我得到了錯誤「找不到模塊字符分析器。」我跑了npm install character-parser,然後我得到了「找不到模塊變壓器」。這發生了幾次,但我安裝了所有的應用程序後開始工作。

我認爲npm install應該遞歸地安裝依賴關係。這也令我感到擔憂,因爲我明顯希望package.json在部署應用程序時可用。

+0

但npm確實遞歸安裝。運行'npm install'後,是否有錯誤?如果是這樣,請發佈。 – gustavohenke

+0

@gustavohenke不幸的是,沒有錯誤。它說一切正常,但是當我嘗試運行節點時,我得到缺少的模塊錯誤,直到我使用'npm install '。我是否需要使用'sudo npm'? –

+1

你有npm-shrinkwrap.json嗎?如果這樣做,請檢查是否列出了所需的模塊。 – Fluffy

回答

-1

當您運行npm install <name-of-package>時,它會將軟件包安裝到您的node_modules文件夾中,但不會將其作爲依賴項添加。爲了安裝包,將其保存爲一個依賴於你的package.json,你必須使用--save標誌,像這樣:

npm install <name-of-package> --save

npm documentation提供了可用於如--save-dev上附加標誌的更多信息標誌用於保存開發依賴項,--save-optional標誌用於將可選依賴項保存到您的package.json

2

這裏有一個簡單的腳本來收集依賴於./node_modules:

var fs = require("fs"); 

function main() { 
    fs.readdir("./node_modules", function (err, dirs) { 
    if (err) { 
     console.log(err); 
     return; 
    } 
    dirs.forEach(function(dir){ 
     if (dir.indexOf(".") !== 0) { 
     var packageJsonFile = "./node_modules/" + dir + "/package.json"; 
     if (fs.existsSync(packageJsonFile)) { 
      fs.readFile(packageJsonFile, function (err, data) { 
      if (err) { 
       console.log(err); 
      } 
      else { 
       var json = JSON.parse(data); 
       console.log('"'+json.name+'": "' + json.version + '",'); 
      } 
      }); 
     } 
     } 
    }); 

    }); 
} 

對於一個項目我工作,輸出看起來是這樣的:

"progress": "0.1.0", 
"request": "2.11.4", 

如果你還記得從最後一個條目中刪除逗號,可以複製並粘貼輸出。

1

我得到這個確切的錯誤,而我是故宮安裝了https://github.com/HenrikJoreteg/humanjs-sample-app/

我在Windows機器上,所以我懷疑這是與奇限制的問題,Windows有對人物的數量文件路徑。

我解決了這個問題,通過將我的基本路徑縮短爲我的根目錄中的三個字符文件夾名稱(在這種情況下從C:\ projects \ humanjs-sample-app切換到C:\ hjs)。當我重新運行npm安裝一切正常。我對這個決議不滿意。我不必擔心我的基路徑名稱太長。這是人們經常不在Windows機器上進行節點開發的原因之一。

備用解決方案是在Linux或Mac上開發,如果您還沒有開發。這可能是我的長期戰略。

+0

我剛剛注意到你的問題上有一個Ubuntu標籤,所以這可能不是你的問題。但我不會刪除這個,以防萬一。 – PureCognition

相關問題