如何将一些dependecies从require转移到require-dev与composer?

x-y*_*uri 11 php composer-php

一些依赖项被错误地添加到require而不是require-dev.我尝试手动更改composer.json和运行composer install,但composer.lock没有更改.所以我的猜测是,它忽略了变化composer.json,并确保安装的内容反映了composer.lock文件中的内容.我错了吗?如果没有错,我该怎么做?我想尽可能保留composer.lock文件中的软件包版本.

小智 15

我会做:

作曲家需要 --dev drupal/devel

或者你的例子

作曲家需要 --dev meenie/javascript-packer: 1.1

这让 composer 完成所有繁重的工作,并将这些依赖项移动到 require-dev 部分。


aod*_*aod 10

似乎composer update --lock可以解决您的问题。

  • 非常适合我!我刚刚更改了位置(在composer.json 中从 require-dev 移至 require)并运行了它。我认为这应该是公认的答案! (2认同)

Rus*_*nov 5

我重现了您的问题并找到了一个简单的解决方案:composer update。

以下是我已完成的步骤。

老的composer.json

{
  "require": {
    "meenie/javascript-packer": "1.1"
  }
}

$ composer install
Run Code Online (Sandbox Code Playgroud)

保存备份以供composer.lock进一步比较:

$ cp composer.lock composer.lock-prev
Run Code Online (Sandbox Code Playgroud)

新的composer.json

{
  "require-dev": {
    "meenie/javascript-packer": "1.1"
  }
}


$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Nothing to install or update
Run Code Online (Sandbox Code Playgroud)

我已经按照上面的输出建议更新了 Composer:

$ composer update

Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
Run Code Online (Sandbox Code Playgroud)

然后看了一下新旧版本的区别composer.lock:

$ diff -Nau composer.lock-prev composer.lock 
--- composer.lock-prev  2016-10-29 19:05:51.331588329 +0700
+++ composer.lock   2016-10-29 19:06:05.639809116 +0700
@@ -4,9 +4,10 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "f092e6d1418a7bb0db55b75f1099b4eb",
-    "content-hash": "774f074021977667a459f207616edfe2",
-    "packages": [
+    "hash": "0c81c48f9845635d47821bc0e965e4fe",
+    "content-hash": "cb194309c2a3fda3b07a46ed7ef36bdd",
+    "packages": [],
+    "packages-dev": [
         {
             "name": "meenie/javascript-packer",
             "version": "1.1",
@@ -45,7 +46,6 @@
             "time": "2013-03-25 21:54:33"
         }
     ],
-    "packages-dev": [],
     "aliases": [],
     "minimum-stability": "stable",
     "stability-flags": [],
Run Code Online (Sandbox Code Playgroud)

我们可以看到运行后实际应用了更改composer update。

  • @RuslanOsmanov,我的意思是我认为OP所问的问题是:问题是如何在不更改任何版本的情况下将依赖项从“require”转移到“require-dev”。我认为这个解决方案满足了第一部分,但不满足第二部分。 (3认同)
  • 这是否也会带来改变库版本的风险? (2认同)
  • 你在这里缺少的是,比方说,我一年前需要“phpunit”,让我们假设当时它是“phpunit-5.5.7”。在 `composer.json` 中,我有 `"phpunit/phpunit": "^5.5"`。现在我意识到它在“require”部分。我将其移至“require-dev”,运行“composer update”,现在我有了“phpunit-5.6.2”。不是吗?如果可能的话,这就是我想避免的。 (2认同)