代码之家  ›  专栏  ›  技术社区  ›  Blankman

当两个库共享相同的依赖性并需要不同的版本时出现mix deps错误

  •  0
  • Blankman  · 技术社区  · 7 年前

    我在解决我的phoenix应用程序依赖项时遇到问题:

    我的混合exs文件包含:

    {:phoenix, "~> 1.4.0"},
    {:phoenix_pubsub, "~> 1.1"},
    {:phoenix_ecto, "~> 4.0"},
    {:ecto_sql, "~> 3.0"},
    {:postgrex, ">= 0.0.0"},
    {:phoenix_html, "~> 2.11"},
    {:phoenix_live_reload, "~> 1.2", only: :dev},
    {:gettext, "~> 0.11"},
    {:jason, "~> 1.0"},
    {:plug_cowboy, "~> 2.0"},
    {:redix, ">= 0.0.0"},
    {:extwitter, "~> 0.9.3"},      
    {:timex, "~> 3.0"},
    {:corsica, "~> 1.0"},
    {:cachex, "~> 3.1"},
    {:bamboo, "~> 1.1"},
    {:bamboo_ses, "~> 0.1.0"},
    {:comeonin, "~> 4.1"},
    {:bcrypt_elixir, "~> 1.1"},
    {:ex_machina, "~> 2.2", only: :test}
    
    I then added this stripe library:
    
     {:stripity_stripe, "~> 2.0.0"},
    

    现在当我表演部门获取我看到这个错误:

    (版本1.1.0和1.2.0)要求>=1.13.0条纹 (版本2.0.0和2.0.1)需要~>1.12.1

    **(Mix)十六进制依赖项解析失败,更改依赖项的版本要求或解除锁定(通过使用Mix 部门更新或混合解除锁定). 如果您无法解决

    我已经做到了:

    mix clean
    rm mix.lock
    mix deps.get
    

    0 回复  |  直到 7 年前
        1
  •  3
  •   Adam Millerchip    7 年前

    我找到一个 similar question on the elixir forum . 相关报价:

    不能同时运行同一应用程序的多个版本

    一个模块只能存在于虚拟机上的一个版本中。因此,这对应用程序结构造成了限制。这基本上意味着每个人都需要在一个版本上达成一致。

    也, the docs for :override 状态:

    true 依赖项将通过其他依赖项覆盖其自身的任何其他定义

    这听起来不像你想要的那样,因为你只会强迫stripity_Stripe2.0.0使用与预期不同的版本。

    看起来你需要找到 stripity_stripe 这取决于 hackney :bamboo, "~> 1.1" .

    所以,

    {:bamboo, "~> 1.1"},
    {:stripity_stripe, "~> 2.2.2"}
    

    mix deps.get 一切都很好。

        2
  •  0
  •   Aleksei Matiushkin    7 年前

    在您的场景中,如果可能,您可以使用

    {:stripity_stripe, "~> 2.2.2"}
    

    override: true .

    {:hackney, "~> 1.13", override: true}