2013-08-06 91 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

相关问题