【问题标题】:Peer dependency issue in npm Node modulesnpm Node 模块中的对等依赖问题
【发布时间】:2016-08-13 17:10:22
【问题描述】:

我在为我的项目安装 grunt 相关节点模块依赖项时遇到了一些问题,

我想使用一个命令安装选定的依赖项,所以我在下面使用,

npm install grunt grunt-contrib-jshint grunt-cli grunt-contrib-watch grunt-exec grunt-contrib-symlink grunt-contrib-clean grunt-contrib-copy grunt-text-replace grunt-git --save-dev

出现类似“grunt-exec@0.4.6 需要一个 grunt@~0.4 的对等体,但没有安装”之类的错误。 所以根据谷歌搜索的反馈,发现我们可以硬编码依赖版本,如下面的修复,

npm install grunt@~0.4  grunt-contrib-jshint grunt-cli grunt-contrib-watch grunt-exec grunt-contrib-symlink grunt-contrib-clean grunt-contrib-copy grunt-text-replace grunt-git --save-dev

它已经暂时解决了一段时间的问题,但现在我收到一个错误,例如 'grunt-git@1.0.0 需要 grunt@~1.0.1 的对等体,但没有安装。'

所以看起来 grunt 插件需要不同版本的相同依赖项 - grunt(在我的情况下)。一个一个地安装插件而不是集群也不能解决问题

【问题讨论】:

    标签: node.js npm gruntjs node-modules


    【解决方案1】:

    更新

    由于人们想在不阅读 cmets 的情况下从这个答案中拿走分数以查看是否找到了解决方案,因此我们得出了以下结论:

    像这样的实例,您应该查看以前发布的 grunt-git 版本,找到满足您的要求的旧版本 (v0.3.8) 并仔细检查您要与插件一起使用的功能是否可用。如果是,请尝试npm install grunt-git@0.3.8 --save-dev。可以在here 找到版本。

    原始解决方案

    首先,您需要通过运行命令npm init 创建一个package.json 文件来初始化您的项目。系统将提示您回答几个问题,您可以根据需要更改默认值。

    项目初始化后,一次安装一个依赖项并包含标志--save--save-dev。这会将依赖项添加到 package.json 清单中。示例:npm install grunt-contrib-jshint --save-dev

    在您的 package.json 文件中列出所有依赖项后,您可以使用 npm install 实现单命令安装。

    如果您想了解更多信息,NPM 注册表有一个 very detailed article 使用 package.json

    【讨论】:

    • 我知道 npm install 如何与 package.json 一起工作。我请求我的问题可能会有所不同。如果假设我有一个如下所示的 package.json,并且我的 grunt 插件需要不同版本的 grunt 依赖项,那么我们有什么方法可以提及不同的版本依赖项。 “devDependencies”:{ “grunt”:“^0.4.5”,“grunt-contrib-clean”:“^0.7.0”,“grunt-contrib-copy”:“^0.8.2”,“grunt-contrib -jshint": "^0.11.3", "grunt-contrib-symlink": "^0.3.0" }
    • 我认为让所有插件都使用单一版本的核心 grunt 依赖项是一种更明智的方法。尝试在单个项目中管理多个 grunt 实例会产生大量开销
    • 如果您在两个单独的 grunt 实例上死心塌地,您需要维护两个单独的 gruntfiles 并想办法在 node_modules 中拥有两个版本的依赖项。然后,您可以使用--gruntfile 标志来指定应该运行哪个 gruntfile。参考:gruntjs.com/using-the-cli
    • 是的,你是对的,这是我同意使用的理想方法。但问题是 grunt-exec 期望 0.4 版本,而 grunt-git 期望更高版本,例如 1.0.0
    • 这样的实例,您应该查看以前发布的 grunt-git 版本,找到满足您要求的旧版本 (v0.3.8) 并仔细检查您要使用的功能是否与插件是否可用。如果是,请尝试npm install grunt-git@0.3.8 --save-dev。可以在这里找到版本:github.com/rubenv/grunt-git/releases
    【解决方案2】:

    我今天在尝试安装 grunt-exec 时遇到了类似的问题。

    npm ERR! peerinvalid The package grunt@1.0.1 does not satisfy its siblings' peerDependencies requirements!
    npm ERR! peerinvalid Peer grunt-exec@0.4.6 wants grunt@~0.4
    

    从这个线程中的一些线索我修复它...

    npm uninstall grunt
    

    在我的项目的根文件夹中,我编辑了 package.json 以从 devDependencies 中删除 grunt。

    我已经全局安装了 grunt,所以在项目中也不需要它。

    跑步

    npm install -D grunt-exec

    第二次为我工作,我更新的 devDependencies 现在看起来像这样:

      "devDependencies": {
        "chai": "^3.5.0",
        "grunt": "^0.4.5",
        "grunt-contrib-clean": ">0.4.0",
        "grunt-contrib-concat": "^1.0.0",
        "grunt-contrib-jshint": "~1.0.0",
        "grunt-contrib-uglify": "^1.0.1",
        "grunt-exec": "^0.4.6",
        "grunt-mocha-test": "^0.12.7",
        "mocha": "^2.4.5"
      },
    

    新行是 grunt 和 grunt-exec。

    到目前为止,我的项目与添加 grunt-exec 之前的工作方式相同。看来我刚刚找到了一种简单的方法来降级到早期版本的 grunt。

    这是来自全局安装的版本信息:

    >grunt -V
    grunt-cli v1.2.0
    grunt v0.4.5
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      我已根据协议中的建议解决了我的问题。

      只有最新版本的 grunt-git(1.0.0) 存在依赖问题,所以我安装了不需要特定版本的 grunt 的旧版本 0.3.7。

      npm install grunt@0.4.5  grunt-contrib-jshint grunt-cli grunt-contrib-watch grunt-exec grunt-contrib-symlink grunt-contrib-clean grunt-contrib-copy grunt-text-replace grunt-git@0.3.7 --save-dev
      

      【讨论】:

        【解决方案4】:

        使用全局标志安装 grunt

        npm install -g grunt
        

        【讨论】:

        • 所以你的意思是在安装 grunt 插件集群之前,我需要全局安装 grunt 依赖项?
        • grunt 模块应该在全局和本地都存在
        • 在全局和本地安装时,我们不应该提及任何版本的 grunt 吗?
        • 不提版本时,会安装最新发布的版本
        猜你喜欢
        • 1970-01-01
        • 2018-04-22
        • 1970-01-01
        • 2016-12-25
        • 2016-09-08
        • 2017-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多