【问题标题】:npm install does not seem to get all dependenciesnpm install 似乎没有获得所有依赖项
【发布时间】:2013-08-07 13:19:07
【问题描述】:

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

【问题讨论】:

  • 但是 npm 确实递归安装。运行npm install后,有没有报错?如果有,请发布。
  • @gustavohenke 没有错误,不幸的是。它说一切都很好,但是当我尝试运行节点时,我得到了缺少模块的错误,直到我使用npm install <module-name>。我可能需要使用sudo npm 吗?
  • 你有 npm-shrinkwrap.json 吗?如果这样做,请检查是否列出了所需的模块。
  • @Fluffy 我遇到了同样的问题,一旦我删除/更新了 npm-shrinkwrap.json,它就会安装 package.json 中定义的所有依赖项。谢谢。
  • @Fluffy 我确认@tamsler 所说的话。检查您的文件夹中是否没有npm-shrinkwrap.json

标签: node.js ubuntu npm


【解决方案1】:

当您运行npm install <name-of-package> 时,它会将包安装到您的node_modules 文件夹中,但不会将其添加为依赖项。为了安装包并将其保存为package.json 中的依赖项,您必须使用--save 标志,如下所示:

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

npm documentation 提供了有关可以使用的其他标志的更多信息,例如用于保存开发依赖项的--save-dev 标志和用于将可选依赖项保存到package.json--save-optional 标志。

【讨论】:

    【解决方案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",
    

    如果您记得从最后一个条目中删除逗号,您可以复制并粘贴输出。

    【讨论】:

      【解决方案3】:

      我在为https://github.com/HenrikJoreteg/humanjs-sample-app/ 安装 npm 时遇到了这个确切的错误

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

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

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

      【讨论】:

      • 我刚刚注意到你的问题上有一个 Ubuntu 标签,所以这可能不是你的问题。不过,以防万一,我不会删除它。
      猜你喜欢
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      • 2018-05-02
      • 1970-01-01
      相关资源
      最近更新 更多