【问题标题】:NPM doesn't install module dependenciesNPM 不安装模块依赖项
【发布时间】:2013-08-26 10:23:18
【问题描述】:

这是我的 package.json 用于我包含在父项目中的模块:

{
  "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://git@myserver:user/module-name.git"

【问题讨论】:

  • 您的 package.json 看起来不错,您用来包含它的行也是如此。您收到错误消息吗? git 在你的路上吗?
  • 我没有收到每个 sa 的错误,模块安装但我的 postinstall 脚本失败,因为找不到本地 grunt 包,因为它们不是由 NPM 安装的
  • 这个问题在 2016 年 11 月仍然存在。我在新计算机上完成了一个工作模块的全新安装。 @Mohsen 的回答修复了它。

标签: npm


【解决方案1】:

您似乎遇到了一个已经存在很长时间但还没有解决方案的错误。在 npm 存储库中有几个未解决的问题:

在第一个中,人们列出了您可以尝试的几种解决方法。

另一种解决方案可能是(有点老套)将依赖项明确列为第一级依赖项。这需要您维护列表,但实际上必须很少这样做。

【讨论】:

  • @Flame2057 很高兴知道你运气不好,虽然信息量不是很大。您可以继续提出一个问题,希望社区有知识可以解决。玩得开心!
  • 我还需要一个额外的步骤。在执行此处提到的其他步骤(删除 node_modules 和 package.lock.json,然后 npm 安装)后,我必须右键单击项目中的“依赖项”并选择“恢复包”。
【解决方案2】:

我遇到了非常相似的问题,删除整个 node_modules 文件夹并重新安装对我有用。从IT Crowd 节目中学到了这个技巧!

rm -rf node_modules
npm install

【讨论】:

  • 这实际上对我有用。我认为这真的很奇怪——是什么导致了这个故障?无论如何,如果我删除该文件夹并重新运行 npm install,那么它可以工作。事先,不会在该子目录中安装任何内容。现在,一切都安装在那里。
  • 谢谢@Moshen。我删除了旧版本的 Node 并进行了全新安装。我全局删除了所有 node_modules/ 但忘记从一些现有应用程序中删除。我必须删除每个现有应用程序目录中的 node_modules 文件夹,然后运行 ​​npm install
  • “您是否尝试过从 scratch 方法重新启动?”。这对我很有用。
  • 你先生,是个传奇
  • 这对我有用。如果我可以再次为 IT 人群参考 +1,我会的。
【解决方案3】:

我正在使用 Windows 机器。

  1. 我删除了 node_modules 文件夹。
  2. 不知何故,package.lock.json 文件正在创建中。我删除了那个文件。
  3. 然后 npm 安装。
  4. 干净的构建。
  5. 运行。

【讨论】:

  • 这个答案需要得到更多的爱。 package.lock.json 文件搞砸了我。
  • 删除 package.lock.json 也为我做了。保留它会导致相同的行为(不安装依赖项)。
【解决方案4】:

如果您继承了此代码,则可能是依赖项和版本被锁定,并且您有一个 ./npm-shrinkwrap.json 文件。

如果您的依赖项未在该文件中列出,它将永远不会使用npm install 命令安装。

您需要手动安装软件包,然后运行 ​​npm shrinkwrap 来更新收缩包装文件。

【讨论】:

  • 我遇到了一个问题,在更新到节点 8.0.0 和 npm 5.0.0 后,手动安装软件包会创建一个 package-lock.json 文件。在那之后,运行npm install 只会安装那个包,而不是我的所有依赖项。删除package-lock.json 并重新运行npm install 为我解决了这个问题。
  • @Monkpit 这也为我解决了,谢谢! package-lock.json 碍事了。
【解决方案5】:

同时检查您的包名是否被正确接受:

错误:

{
    "name": "My Awesome Package"
}

正确的:
{
    "name": "my-awesome-package-name"
}

【讨论】:

  • 是的,我的名称中有空格,但没有正确安装。
  • 不仅是空间,还有他在名字中使用的'-',我也遇到过同样的问题,在名字中加上 - 或 _,它会起作用。
  • 您能否编辑以在错误示例中的 : 之后添加一个空格,因为我认为特定的空格无关紧要,但它与下面的不同 - 所以它会分散注意力。
【解决方案6】:

就我而言,它有助于删除 node_modulespackage-lock.json

之后,只需使用 npm install 重新安装所有内容。

【讨论】:

    【解决方案7】:

    对于旧版本的节点,OP 可能是正确的。但是,我在节点 4.4.1 上也遇到了同样的问题。

    它很可能与您正在使用的节点版本相关联。尝试升级到最新版本。如果某些依赖项与节点版本不兼容,则它们不会传递加载。

    我通过运行npm update 找到了这个。

    升级到最新版本后(4.4 -> 5.9);这已经解决了。

    【讨论】:

      【解决方案8】:

      我怀疑您遇到的问题是您的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 resolve 模块。 here 的讨论似乎表明这样做是为了避免加载“全局”模块,但我认为我们想要的是从“我的项目”模块加载。

      【讨论】:

      • 所以这是我的父项目的结构(即导入子模块项目的那个):cl.ly/image/020E0b3I0t1A和我的子模块项目的结构:cl.ly/image/2q0L3l1v0s40;您可以看到两者都包含Gruntfile.js,并且都包含同一级别的package.json
      • 这不是grunt 的问题,而是npm 没有在我的子模块项目中递归安装依赖项的问题。
      【解决方案9】:

      你可能需要安装 grunt-cli,在安装 npm 之前试试这个:

      sudo npm install -g grunt-cli
      

      这修复了 grunt 不为我退出的问题,您还需要一个有效的 grunt 文件。

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

      【讨论】:

      • 当您在命令提示符下尝试“grunt”命令时会发生什么?它存在于你的路径上吗?你是对的,它看起来确实是从你的 pastebin 安装的。你是用 sudo 和 -g 安装的吗?
      • 这不是 grunt 的问题:~ ᐅ which grunt /opt/local/bin/grunt
      • 另外,当我克隆 repo 本身,而不是通过 NPM 并运行 npm installgrunt install 时,它工作正常。问题是 NPM 似乎没有安装 package.json 中指定的 repo 依赖项
      • 您在哪个目录中查找包依赖项?它们不应该在顶层,而是在:top-level-package / node_modules / module-name / node_modules。会不会是 grunt 没有找到 grunt 文件,因为它在错误的目录中工作?
      • grunt 不是问题,当您使用 NPM 安装模块时,它通常会在该模块已安装的任何依赖项结束时提供摘要;当我安装有问题的模块时,我没有收到任何已安装依赖模块的摘要。
      【解决方案10】:

      以防万一有人遭受这种困境,并且碰巧犯了与我一样的 asanine 错误,这就是我的情况。在将头撞到墙上一个小时后,我意识到我的 json 嵌套不正确,并且关键的“依赖项”位于关键的“存储库”中。
      不用说,没有明显的错误,也没有安装任何模块。

      【讨论】:

        【解决方案11】:

        值得一提的是,确保您的依赖项应位于您的package.jsondependencies 部分(而不是devDependencies)。

        我的问题和OP基本一样:

        • 通过"module-name": "git+ssh://git@myserver:user/my-repo-name.git"在其他repo中安装一个私有repo(我们称之为repo1)(我们称之为repo2),
        • repo2node_modules 中,没有来自repo1 的一个包依赖项。
        • 我的愚蠢错误!..repo1devDependencies 中列出了该依赖项而不是dependencies
        • 将我的repo1package.json 中的依赖关系从devDependencies 移动到dependencies
        • 在我的repo2 中,我删除了我的node_modulespackage-lock.json,删除了npm install,瞧!... 存在依赖!

        【讨论】:

        • 我在 npm install 命令上方的 Dockerfile 中声明了 NODE_ENV=production 环境变量,这导致 devDependencies 无法安装
        【解决方案12】:

        解决此问题的另一种方法是将其添加到您的模块 package.json 脚本部分

        "preinstall": "npm install {Packages You depend on}"
        

        这会做的是,它将安装模块所需的所有包,并且您不会收到该错误。

        【讨论】:

          【解决方案13】:

          发生在旧节点版本上。像这样使用最新版本的节点:

          $ nvm use 8.0
          $ rm -rf node_modules
          $ npm install
          $ npm i somemodule

          编辑:还要确保你save
          例如:npm install yourmoduleName --save

          【讨论】:

            【解决方案14】:

            我在 Windows 上安装干净的 Node 开发环境时收到此错误。

            为了解决这个问题,我进入了我的新项目目录(我刚刚用yo angular 搭建了这个目录)并输入了两个命令:

            npm install -g grunt --save-dev

            这会将本地 grunt 依赖项安装到您的项目中。下一个:

            npm install

            这将确保安装所有(新)项目依赖项。

            多田!

            【讨论】:

              【解决方案15】:

              我遇到了同样的问题。但是在同一台机器上,一个项目具有良好的 package.json,我的所有依赖项都已成功安装。在另一个项目中,无论我做什么,我的 package.json 依赖项都没有安装。 我只是复制了 package.json 并粘贴到另一个项目中。它奏效了! 我发现的区别只是文件开头的空行。不知道或它会影响任何东西,也许是其他一些问题。但问题只是 package.json 文件。

              【讨论】:

                【解决方案16】:

                我认为我也遇到了这个问题,我找到的最佳解决方案是查看我的控制台并找出引发的错误。所以,我仔细阅读,发现问题是我没有在我的package.json 中指定我的repo、描述和有效名称。我添加了这些信息,一切正常。

                【讨论】:

                  【解决方案17】:

                  我花了几个小时试图调试这个问题,最后是我将 NODE_ENV= 环境变量设置为“生产”。

                  来自https://riptutorial.com/node-js/example/10101/setting-node-env--production- “当 NODE_ENV 环境变量设置为 'production' 时,运行 npm install 时 package.json 文件中的所有 devDependencies 将被完全忽略。”

                  【讨论】:

                    【解决方案18】:

                    我在尝试创建第一个 Angular 应用程序时遇到了这个问题。

                    ng new angular-tour-of-heroes
                    cd angular-tour-of-heroes
                    ng serve --open
                    

                    所以每次我尝试编译应用程序时,都会出现依赖错误。运行后终于能够解决问题

                    npm install -g @angular/cli@latest
                    

                    当我复制上述步骤新项目时,ng serve 命令可以正常工作。

                    【讨论】:

                      猜你喜欢
                      • 2014-02-17
                      • 2019-12-03
                      • 1970-01-01
                      • 2016-03-14
                      • 2016-09-16
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2020-12-28
                      相关资源
                      最近更新 更多