2013-06-26 3 views
17

Есть ли способ сказать композитору, что каждый раз, когда я делаю composer update, я хочу, чтобы он проигнорировал конкретный пакет?Не обновлять конкретный пакет

+0

IIRC флаг, чтобы делать такие вещи –

+0

надеюсь, что он придет ... –

ответ

5

На самом деле я не знаю, есть ли способ сказать composer исключить один конкретный пакет от обновления, но вы можете сказать, какие пакеты обновления, как

composer update <package> <package2>; // or 
php composer.phar update <package> <package2>; 

Например,

composer update foo/package1 bar/package2; // or 
php composer.phar update foo/package1 bar/package2; 

Кроме того, я думаю, если вы не перечислите их в composer.json (удалите после установки) самостоятельно, они не будут обновлены, если они также не указаны в списке.

От Композитор: Если вы хотите установить или обновить одну зависимость, вы можете их в белый список:

$ php composer.phar update monolog/monolog [...] 

Check this link, а также проверить Composer.

Update: (найдено в интернете, но не тестировалось)

Чтобы сделать это, просто удалите пакет из composer.lock

+0

Я попытался удалить пакет из composer.lock, но не работает. При запуске обновления композитор возвращает его. Обновляя все остальные пакеты вручную, это не то, что мне нужно (но если я не получу лучшего ответа/решения, я помету ваш ответ в качестве решения. Спасибо @ sheikh-heera –

+0

привет, привет человек, вы проверили на сайте композитора, как говорили, упоминаются пакеты, что-то вроде 'php composer.phar update monolog/monolog [...]', а также вы пытались удалить пакет из 'composer.json' тоже? –

+3

, если вы удалите пакет из composer.json, он будет удален, когда вы сделаете 'comper update' –

23

Рассматривали ли вы указать требуемую версию для пакета, который вы пытаетесь игнорировать? Например:

"require": { 
    "some/package": "~1.2" 
} 

Это может обновляться, потому что вы говорите любой версии> = 1,2, < 2.0, но если вы строго сказать, что вы хотите только версии 1.0, вы не должны видеть любые обновления этого пакета:

"require": { 
    "some/package": "1.2" 
} 
+0

, это должен быть принятый ответ. – Juan

2

Обновление: Доступно только для композиторов версий 1.0.0-alpha6 и ниже. Используя его в версии 1.0.0-alpha7 и выше, удалите все пакеты в «require-dev».

Я считаю, что в настоящее время вы можете обмануть композитора каким-то беспорядком, если вы можете себе это позволить в своем проекте. Что-то вроде: Сложите все пакеты, которые вы не хотите обновлять в "require-dev" и запускать обновления с composer update --no-dev

Только будьте осторожны, чтобы при запуске composer install, как я помню, они будут удалены из проекта.

Все это обман действительно противно, так что мы должны ждать официального способа делать такие вещи, как, что, лично я обновить пакеты явно указав их

+0

Это, в конце концов, сделало трюк для меня. Определенно единственное решение оставить отдельные пакеты нетронутыми. перед тем, как это сделать. – Conic

+0

«Обновление композитора --no-dev» удаляет все пакеты «require-dev», не используйте его. Я узнал его не так ... – Clyff

+0

@Clyff thats correct just checked, он работает для версий <1.0.0-alpha7. Он был переписан после включения/включения в 1.0.0-alpha7. – arma

0

Игнорирование определенный пакет, вы можете использовать provide (если это часть ваш собственный пакет) или replace. Это говорит Composer, что вы хотите предоставить/заменить определенный пакет, чтобы он не загружал его.

Вот composer.json пример файла, который должен работать:

{ 
    "require": { 
     "radic/tmp-underscore-php": "~1.2.0" 
    }, 
    "replace": { 
     "patchwork/utf8": "*" 
    } 
} 

В этом примере patchwork/utf8 пакет будет игнорироваться на composer install или update.

Для исключения конкретной версии см.: Composer exclude specific versions.