Yarn: Обновление пряжи не обновляет должным образом package.json для зависимостей разработчиков

Созданный на 25 окт. 2016  ·  83Комментарии  ·  Источник: yarnpkg/yarn

Вы хотите запросить _функцию_ или сообщить _ об ошибке?

_bug_

Каково текущее поведение?

Запуск yarn upgrade для обновления зависимости разработчика, даже с флагом --dev , добавит обновленную версию зависимости к хешу dependencies в package.json а не devDependencies .

Это также может быть проблемой с другими типами зависимостей (например, одноранговым узлом), но я не тестировал.

Если текущее поведение является ошибкой, предоставьте шаги для воспроизведения.

$ mkdir foo && cd foo
$ yarn init
<snip>
$ yarn add lodash<strong i="19">@3</strong> --dev
<snip>

$ grep lodash package.json -C 1
  "devDependencies": {
    "lodash": "3"
  }

$ yarn outdated
yarn outdated v0.16.1
Package Current Wanted Latest
lodash  3.10.1  3.10.1 4.16.4

$ yarn upgrade lodash --dev
<snip>
success Saved 1 new dependency
└─ [email protected]

$ grep lodash package.json -C 1
  "devDependencies": {
    "lodash": "3"
  },
--
--
  "dependencies": {
    "lodash": "^4.16.4"
  }

Какое поведение ожидается?

yarn upgrade должен обновить строку версии записи в хеше devDependencies .

Было бы неплохо, если бы это можно было сделать без --dev с использованием текущего местоположения зависимости (обновление dev dep изменит devDependencies , обновление обычного dep изменит dependencies ) .

Пожалуйста, укажите ваш node.js, yarn и версию операционной системы.

$ node --version
v6.9.1
$ yarn --version
0.16.1
$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.12
BuildVersion:   16A323

Самый полезный комментарий

то же самое здесь с пряжей 1.3.2

Все 83 Комментарий

Я могу подтвердить, что наблюдаю, как это происходит с той же версией Yarn. Вместо обновления существующей зависимости разработки он добавляет новую запись в «зависимости» и оставляет там существующую зависимость разработки.

Подтвержденная ошибка и здесь.

Тоже самое. standard продолжает вставляться в dependencies даже если он находится в devDependencies .

Я пробовал как yarn upgrade standard и yarn upgrade standard -D . То же самое.

Хотя программа прекрасная! Спасибо, что построили!

Вот та же проблема, чуть раньше - # 1262

Тоже самое.

Тоже самое. Каждый модуль, обновленный с помощью yarn update добавляется в dependencies .
--dev или другие параметры не задокументированы для yarn update и явно игнорируются.

Обновление IMO должно либо принимать те же параметры, что и install либо, что еще лучше, обновить зависимость в категории, в которой оно находится в package.json

node --version
v6.9.0
yarn --version
0.16.1

1620 исправляет это, поэтому я собираюсь закрыть это и перенести обсуждение туда.

Все еще не исправлено, я использую последнюю версию Yarn, установленную через Homebrew.

@kube Не могли бы вы добавить более подробную информацию, если это все еще проблема? Версии для OS, Node, Yarn? package.json который можно использовать для воспроизведения?

λ yarn --version
0.16.1

Я нахожусь на macOS 10.12.1, установил Yarn с Homebrew.

А вот и package.json на котором я пробовал.

ts-loader и webpack-merge устарели, при обновлении их с помощью yarn они были добавлены в зависимости, а devDependencies остались устаревшими.

@kube Пожалуйста, попробуйте 0.17.0 который был выпущен только сегодня, это исправление было включено в этот выпуск, но не в 0.16.1 .

Конечно, но у Homebrew все еще 0,16,1

λ brew upgrade yarn
Error: yarn 0.16.1 already installed

Пытался установить с помощью NPM и только что установил последнюю версию, но кажется странным устанавливать Yarn с NPM.

Хорошо, все работает нормально при использовании 0.17.0, но, возможно, вам стоит обновить версию Brew.
Какой предпочтительный менеджер пакетов или способ установки Yarn?

Brew - предпочтительный метод установки для OSX. Это все еще ручной процесс для его обновления на Homebrew, поэтому кто-то должен будет запросить его обновление, как они сделали здесь: https://github.com/Homebrew/homebrew-core/pull/6060

Когда я запускаю yarn upgrade , он не обновляет никаких версий в package.json . Это довольно раздражает, исходя из NPM, в котором он автоматически обновляет числа.

Я использую пряжу 0.17.2 от homebrew.

@milesj , вероятно, это должна быть отдельная проблема, и, пожалуйста, предоставьте шаги по воспроизведению вместе с package.json которое мы могли бы использовать для воспроизведения.

Создаю новый выпуск.

В Debian Stable, yarn 0.17.4, эта проблема, по крайней мере, исправлена. Он правильно обновил lodash@3 до lodash@4 , так что можно было просто перейти на последнюю версию.

Я пытаюсь обновить grunt-sass с 1.1.0 до 2.0.0 (в моих __dev-dependencies__)
Я выполняю yarn upgrade [email protected] но добавляю grunt-sass в свои __dependencies__ и не обновляю тот, который находится в __dev-dependencies__

Я также пробовал yarn upgrade [email protected] --dev но проблема все еще остается

Используя yarn v0.18.1, я все еще не могу принудительно обновить подчиненную зависимость. yarn upgrade только добавляет новую запись в package.json и не обновляет подчиненную зависимость.

Проблема все еще существует в версии 0.19.1, обновление пряжи не обновило package.json.

@kittens это не исправлено # 1620

Я также могу подтвердить эту проблему в версии 0.19.1.

все - используя yarn add <package-name> вы обновите желаемый пакет на данный момент.

yarn upgrade у меня тоже не работает, v0.19.1

yarn upgrade в настоящее время обновляет только yarn.lock, а не package.json.

Можно подтвердить проблему в v0.20.3

У меня такая же проблема, когда я использую обновление пряжи, оно обновляет все пакеты, но не отражается в файле package.json. v0.20.3 .. реально напрягает. Я также заметил, что при использовании «yarn install» он устанавливает последние версии всех пакетов списка в package.json и не придерживается версий, упомянутых в нем, так что это похоже на то, что пряжа обновила их до последней версии, а также не отражает этого в package.json, но он показывает текущие версии yarn.lock, которые установлены

@kittens v0.20.3 @ Windows и все еще не обновляет package.json - только файл yarn.lock. Вы должны снова открыть это.

Я бросаю пряжу и переключаюсь обратно на npm из-за этой ошибки. Независимо от того, как я пытаюсь обновить свои пакеты, yarn будет загружать самые новые из них в кеш и сохранять старые версии в моем package.json и в папке node_modules. В чем смысл?..

Да! Я могу подтвердить, что Yarn v0.21.3 наконец обновляет package.json, по крайней мере, yarn upgrade-interactive command.

@alexdevero Я только что попробовал yarn upgrade на трех моих проектах: он не обновил ни один package.json ....

но я подтверждаю, что yarn upgrade-interactive работает ... для 1-го обновленного проекта
следующее использование yarn upgrade-interactive в других проектах, нуждающихся в таком же обновлении, не удастся, т. е. «успешно. Все ваши зависимости обновлены».

Я тестировал обновление сценариев реакции с 0.9.x до 0.9.3 в каждом из трех моих проектов. yarn upgrade-interactive работал над 1-м проектом, но затем проигнорировал обновление для других 2 проектов.

На сегодняшний день в версии 0.21.3 yarn upgrade прежнему ведет себя неправильно.

Вместо этого я использую yarn add package<strong i="7">@version</strong> --dev , и он обновляет пакет по желанию и правильно обновляет package.json.

Fwiw, я использовал upgrade-interactive который по какой-то причине, кажется, приносит больше удачи.

🍒 🍒 🍒

Было бы хорошо знать, каково ожидаемое поведение пряжи в этом случае. Может ли кто-нибудь из разработчиков пряжи сказать, должна ли пряжа обновлять package.json или нет?

Я только что сделал yarn upgrade babel-cli который был в моем devDependencies и он был добавлен как производственная зависимость (к dependencies ) ... что-то все еще полностью сломано. О, и я использую пряжу v 0.22.0, кстати!

РЕДАКТИРОВАТЬ: Оказывается, у меня NODE_ENV установлен на «производство» (из-за того, что мое приложение является приложением узла), и это портит такие вещи, как «установка пряжи» (которая будет действовать как yarn install --production и полностью пропустить devDependencies например).

Возможно, на yarn upgrade также влияет переменная среды узла.

Только что понял это:
image

Я не апологет или что-то в этом роде, я думаю, что это нужно снова открыть ... но святые шары. 720 выпусков достаточно, чтобы утопить круизный лайнер, набитый разработчиками пряжи.

Проблема +1 все еще присутствует в Yarn v0.21.3 в Windows 10 Pro и Node 6.10.0.

Это не исправлено. Я получаю его на macOS Sierra 10.12.4. У меня есть несколько devDependencies которые являются частными репозиториями git, и один стандартный dependency ( "jquery": "^3.1.1" ). Последняя версия jQuery - 3.2.1, и yarn upgrade видит это ( ├─ [email protected] ), но не обновляет package.json .

yarn --version
0.21.3
node --version
v7.7.4

Открыть заново.

Windows - v0.21.3 выдает ошибку yarn upgrade ... при указании пакета после обновления и package.json, и файла блокировки.

Windows - v0.22 -по-прежнему не обновляет package.json, но обновляет файл блокировки.
работал в каком-то смысле, но не идентифицировал все пакеты, которые следовало обновить, и, таким образом, нарушил различные зависимости одноранговых узлов.

К счастью, я использовал его только в одном проекте и смог исправить беспорядок. Мне нравится идея Yarn, но я не буду возиться с ней, пока она не будет решена.

Windows, Yarn v0.22 - не обновляет package.json при использовании yarn upgrade как упоминалось в @LaughingBubba . Папка node_modules обновляется, а package.json - нет, что создает беспорядок в версиях пакетов.

@kittens , похоже, это не было исправлено.

Я только что снова увидел это в 0.23.2.

В моем случае кажется, что если хотя бы одна из обновленных зависимостей в списке НЕ является devDep, тогда он помещает все обновления в зависимости в package.json.

Обновление: также вижу это с обновлением одного devDep. Он копируется в deps без обновления.

Это точно не исправлено. Потерял час на это. Разве пряжа не должна быть лучше, чем npm?

@ fab1an , на данный момент используйте yarn add package-name<strong i="6">@latest</strong> [--dev] для обновления пакета. Он ведет себя так, как ожидается, upgrade , правильно обновляя package.json.

@diegovilar Спасибо за подсказку, но это слишком громоздко для 25+ dev-зависимостей. Я просто вернулся к использованию npm-check -u для их обновления.

Все еще не работает в Windows x64, Yarn 0.23.2

Для всех, кто комментирует здесь, я предлагаю тем временем использовать yarn upgrade-interactive . Здесь неплохо работал.

Все еще не работает, и если вы используете yarn upgrade-iteractive и не знаете, от какой версии tslint, codelyzer, typescript и т.д., от которых зависят пакеты, такие как Angular или Angular CLI, вы можете и вызовете кучу ошибок, которые будут вас преследовать даже после того, как вы все откатите. Была ли эта проблема опубликована повторно?

@milesj НЕТ. Я здесь и использую ТОЛЬКО upgrade-interactive с точно такими же проблемами.

Не был уверен, есть ли у него какое-то время, так как он был закрыт в течение нескольких месяцев, поэтому создал новую проблему - # 3266

@ fab1an Жалко . У меня не было проблем с обновлением package.json: /

@ fab1an @milesj У меня тоже было upgrade-interactive not update package.json в одном из наших проектов. Похоже, если вы обновляете и package.json не имеет нужного номера, тогда все интерактивные обновления не обновляют package.json ... или что-то в этом роде ... в любом случае определенно могу согласиться с вами в том, что он иногда не работает.

Windows 10, yarn v0.23.4 по-прежнему не обновляет package.json при выполнении yarn upgrade

Изменить: Может быть, это намеренно?
Например: "semantic-ui-react": "^0.68.2" - уже есть новая версия (0.68.3), и эта версия установлена, а yarn.lock изменен на 0.68.3, но из-за ^ в версии (> = 0.68.2 <0.69.0) нет необходимости обновлять package.json до ^0.68.3 ?

@iamfreee Я запускаю Yarn v0.24.5 и запускаю yarn upgrade не обновляет package.json, а только yarn.lock. Это не может (или, по крайней мере, не должно) быть преднамеренным, потому что, прежде всего, управление версиями в package.json должно сначала установить фактическую версию пакета, а затем диктовать ограничения обновления, то есть ^ или ~ . Во-вторых, запуск yarn upgrade для отдельного пакета изменяет package.json, так почему же поведение при обновлении всех пакетов отличается? Почему должно быть несоответствие в поведении между запуском yarn upgrade и yarn upgrade-interactive это не имеет смысла?

Этот вопрос был закрыт на некоторое время, так что, откровенно говоря, он не получил никакой поддержки. Мы должны просто открыть новый выпуск. Даже если такое поведение является преднамеренным, я все равно не согласен с этим. yarn upgrade не следует даже обновлять до тега @latest, потому что что делать, если в вашем package.json указано другое ограничение версии? Смотрите здесь: https://docs.npmjs.com/cli/update#caret -dependencies

@leosco В моем случае npm update тоже не обновлял package.json а также yarn upgrade [package] не помогло. Вот почему я думаю, что проблема связана с ограничением версии ^ или с ожидаемым поведением.

@iamfreee Нет, вы должны сделать npm update --save что должно быть поведением Yarn по умолчанию.

Я опубликовал новый выпуск, подробно описывающий все это, см. Здесь https://github.com/yarnpkg/yarn/issues/3492 и, возможно, продолжу обсуждение там.

Я также хотел бы повторить, что у меня был успех с yarn interactive-upgrade тогда как yarn upgrade --latest у меня не сработал.
Использование пряжи v0.24.6 с узлом v7.10.0.

yarn upgrade --latest отлично работает: +1:

~> yarn -v
1.0.0
~> yarn upgrade --help | grep "\-\-latest" | head -n 1

  --latest       list the latest version of packages, ignoring version ranges in package.json

yarn interactive-upgrade похоже, теперь имеет проблемы в версии 1.

@milesj Можете попробовать ночные сборки? https://yarnpkg.com/en/docs/nightly Этот PR мог исправить это https://github.com/yarnpkg/yarn/commit/da2b9096057301273aa27336f70622dda09b6c33

@kaylieEB Я не уверен, но думаю, что yarn interactive-upgrade сейчас ведет себя иначе. Я только что запустил его в проекте с множеством мелких обновлений, и package.json не был изменен, просто yarn.lock . До 1.0.2 я думаю, что package.json синхронизировались бы с обновленными версиями, но я могу ошибаться насчет этого ... Последняя ночная сборка не изменила это поведение для меня.

yarn upgrade --latest теперь работает нормально, но я предпочел иметь возможность интерактивно выбирать, что обновлять, а затем соответствующим образом корректировать package.json .

@lehni Там же yarn interactive-upgrade --latest .

@milesj : ты имел ввиду yarn upgrade-interactive --latest ?
документы: https://yarnpkg.com/en/docs/cli/upgrade-interactive

Эээ, мозговой пердун. Благодарю.

то же самое здесь с пряжей 1.3.2

то же самое здесь с пряжей 1.5.1

Снова сломался в 1.5.1

сломан с -

$ node --version
v9.0.0
$ yarn --version
1.5.1

тот же узел выпуска v8.9.4
пряжа 1.5.1

Одно временное решение: используйте yarn add вместо yarn upgrade .

Коротко:

  • yarn upgrade : обновить пакеты до последнего возможного диапазона, указанного pacakge.json , но не перезаписывать
  • yarn add : обновите пакеты до последнего возможного диапазона и перепишите package.json
  • yarn update , например npm update : не существует

Однако в документе npm update говорится:

Начиная с [email protected] , обновление npm изменит package.json, чтобы сохранить новую версию как минимально необходимую зависимость. Чтобы получить старое поведение, используйте npm update --no-save.

Но на самом деле...

 y > npm -v
5.7.0
 y > cat package.json
{
  "dependencies": {
    "lodash": "^4.17.5"
  }
}
 y > npm update lodash
npm WARN y No description
npm WARN y No repository field.
npm WARN y No license field.

+ [email protected]
added 1 package from 2 contributors in 1.004s
 y > cat package.json
{
  "dependencies": {
    "lodash": "^4.17.5"
  }
} 

Не знаю, какой из них использовать :( Yarn добавил это поведение где-то в 2017 году, а затем молча сломал его. Npm утверждает, что имеет его, когда это тоже не работает.

@kittens Пожалуйста,

как сказал @octref yarn upgrade обновляет зависимости до их последней версии, но не перезаписывает package.json . yarn add <package> обновит пакет до последней версии, если он уже установлен, и перезапишет package.json . Есть ли причина, по которой yarn upgrade не перезаписывает package.json ? Если да, то, возможно, это можно добавить в качестве флага к yarn upgrade .

[email protected]
[email protected]
os: MacOS

редактировать

прочтите https://github.com/yarnpkg/yarn/issues/5602#issuecomment -377528617

Одно временное решение: используйте yarn add вместо yarn upgrade .

Работает как шарм. Необходимо обновить эти две страницы Документов, чтобы использовать yarn add вместо yarn upgrade .

Я уже довольно давно использую yarn upgrade-interactive --latest без каких-либо сбоев ...

Я уже довольно давно использую yarn upgrade-interactive --latest без каких-либо проблем ...

Кажется немного избыточным ... Почему бы просто не использовать самую простую из всех этих команд, yarn add ? Очень просто.

@ guylepage3, потому что я могу увидеть, какие обновления доступны в каких версиях с разной цветовой кодировкой на основе изменений патча / второстепенной / основной версии, выбрать те, которые я хочу обновить, и таким образом выполнить несколько обновлений одновременно. Ничего лишнего в этом нет?

@lehni, то документация на веб-сайте должна отражать это, а на следующих двух страницах должно быть указано, что используется метод yarn upgrade-interactive --latest .

@ guylepage3 этот разговор ни к чему не ведет и не помогает. Если вы хотите предложить обновление документации, возможно, лучше создать новую задачу специально для этого.

Извините, если вы так считаете @alexdevero. И да, уже было, если вы посмотрите выше .. https://github.com/yarnpkg/yarn/issues/1458#ref -issue-332178362

Мне это помогло: https://www.npmjs.com/package/syncyarnlock

$ yarn upgrade-interactive && syncyarnlock

У меня это не работает для рабочих пространств пряжи. Может кто-нибудь посмотреть?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги