npm install似乎没有获得所有依赖项

时间:2013-08-06 13:35:50

标签: node.js ubuntu npm

我的package.json看起来像这样(省略了名称/描述/等)。

{
    "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在部署应用程序时可用。

3 个答案:

答案 0 :(得分: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 :(得分:1)

我在为https://github.com/HenrikJoreteg/humanjs-sample-app/

安装npm时遇到了这个错误

我在Windows机器上,所以我怀疑这是一个问题,Windows对文件路径中的字符数有奇怪的限制。

我通过将我的基本路径缩短为根目录中的三个字符的文件夹名称(在这种情况下从C:\ projects \ humanjs-sample-app转到C:\ hjs)解决了这个问题。当我重新运行npm安装一切正常。我对这个决议不满意。我不应该担心我的基本路径名太长了。这是人们经常不在Windows机器上进行节点开发的原因之一。

另一种解决方案是在Linux或Mac上开发,如果你还没有。这可能是我的长期战略。

答案 2 :(得分:-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 }。