Yarn: A atualização do Yarn não atualiza corretamente `package.json` para dependências de dev

Criado em 25 out. 2016  ·  83Comentários  ·  Fonte: yarnpkg/yarn

Você deseja solicitar um _feature_ ou denunciar um _bug_?

_erro_

Qual é o comportamento atual?

Executar yarn upgrade para atualizar uma dependência dev, mesmo com a sinalização --dev , adicionará a versão atualizada da dependência ao hash dependencies em package.json vez de devDependencies .

Isso também pode ser um problema com outros tipos de dependência (como peer), mas não testei.

Se o comportamento atual for um bug, forneça as etapas para reproduzir.

$ 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"
  }

Qual é o comportamento esperado?

yarn upgrade deve atualizar a string de versão da entrada no hash devDependencies .

Seria bom se isso pudesse ser feito sem --dev usando a localização atual da dependência (atualizar um dep dev modificaria devDependencies , atualizar um dep normal modificaria dependencies ) .

Mencione seu node.js, yarn e versão do sistema operacional.

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

Comentários muito úteis

o mesmo aqui com o fio 1.3.2

Todos 83 comentários

Posso confirmar que estou vendo isso acontecer exatamente na mesma versão do Yarn. Em vez de atualizar a dependência de desenvolvimento existente, ele adiciona uma nova entrada a "dependências" e deixa a dependência de desenvolvimento existente lá.

Bug confirmado aqui também.

O mesmo aqui. standard continua sendo inserido em dependencies , embora viva em devDependencies .

Tentei yarn upgrade standard e yarn upgrade standard -D . Mesma coisa.

Um programa adorável! Obrigado por construí-lo!

Aqui está o mesmo problema, um pouco antes - # 1262

O mesmo aqui.

O mesmo aqui. Cada módulo atualizado por meio de yarn update é adicionado a dependencies .
--dev ou outras opções não estão documentadas para yarn update e aparentemente são ignoradas.

A atualização IMO deve aceitar as mesmas opções de install - ou ainda melhor atualizar a dependência na categoria em que se encontra em package.json

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

1620 corrige isso, então vou fechar isso e mover a discussão para lá.

Ainda não corrigido, estou usando o Yarn mais recente instalado via Homebrew.

@kube Você poderia adicionar mais detalhes se ainda for um problema? Versões para SO, Node, Yarn? Um package.json que pode ser usado para reproduzir?

λ yarn --version
0.16.1

Estou no macOS 10.12.1, instalei o Yarn com o Homebrew.

E aqui está o package.json que experimentei.

ts-loader e webpack-merge estão desatualizados, atualizando-os com o yarn adicionado às dependências, deixando devDependencies desatualizado.

@kube Por favor, experimente 0.17.0 que acabou de ser lançado hoje, esta correção foi incluída nesse lançamento, mas não em 0.16.1 .

Claro, mas o Homebrew ainda tem 0.16.1

λ brew upgrade yarn
Error: yarn 0.16.1 already installed

Tentei instalar com NPM e só tinha a versão mais recente, mas parece estranho instalar o Yarn com NPM.

Ok, tudo funciona bem ao usar 0.17.0, mas talvez você deva atualizar a versão do Brew.
Qual é o gerenciador de pacotes preferido ou forma de instalar o Yarn?

Brew é o método preferido de instalação para OSX. Ainda é um processo manual para atualizá-lo no Homebrew, então alguém terá que solicitar que seja atualizado como fez aqui: https://github.com/Homebrew/homebrew-core/pull/6060

Quando executo yarn upgrade , ele não atualiza nenhuma versão em package.json . Isso é muito chato vindo do NPM, no qual ele atualizaria automaticamente os números.

Estou usando o fio 0.17.2 do homebrew.

@milesj , este provavelmente deve ser um problema separado e forneça as etapas para reproduzir junto com package.json que poderíamos usar para reproduzir.

Vou criar um novo problema.

No Debian Stable, yarn 0.17.4, esse problema parece estar corrigido, pelo menos. Ele atualizou lodash@3 para lodash@4 adequada, então poderia ser apenas uma questão de ir para a versão mais recente.

Estou tentando atualizar o grunt-sass de 1.1.0 para 2.0.0 (em meu __dev-dependencies__)
Eu executo yarn upgrade [email protected] mas adiciono grunt-sass em minhas __dependencies__ e não atualizo aquele em __dev-dependencies__

Eu também tentei yarn upgrade [email protected] --dev mas o problema ainda persiste

Usando o yarn v0.18.1, ainda não consigo forçar uma atualização de uma subdependência. yarn upgrade apenas adiciona uma nova entrada ao package.json e não atualiza a subdependência.

O problema ainda existe no 0.19.1, a atualização do yarn não atualizou o package.json.

@kittens isto não foi corrigido por # 1620

Posso confirmar esse problema no 0.19.1 também.

todos - usando yarn add <package-name> você atualizará o pacote desejado por enquanto.

yarn upgrade também não está funcionando para mim, v0.19.1

A atualização do yarn atualmente atualiza apenas o yarn.lock, não atualiza o package.json.

Pode confirmar o problema na v0.20.3

Eu tenho o mesmo problema, ao usar o yarn upgrade, ele atualiza todos os pacotes, mas não reflete no arquivo package.json. v0.20.3 .. realmente irritante. Também percebi que, ao usar "yarn install", ele instala as versões mais recentes de todos os pacotes de lista em package.json e não se mantém com as versões mencionadas nele, então é como se o yarn os atualizasse para a versão mais recente e também não reflete isso em package.json, mas mostra em yarn.lock as versões atuais que instalaram

@kittens v0.20.3 @ Windows e ainda não atualiza o package.json - apenas o arquivo yarn.lock. Você deve reabrir isso.

Estou deixando de lado o fio e voltando para o npm por causa desse bug. Não importa como eu tento atualizar meus pacotes, o yarn vai buscar os mais novos no cache e manter as versões antigas em meu package.json e na pasta node_modules. Qual é o ponto? ..

Sim! Posso confirmar que o Yarn v0.21.3 finalmente atualiza o package.json, pelo menos yarn upgrade-interactive comando.

@alexdevero acabei de tentar yarn upgrade em 3 projetos meus: não atualizou nenhum package.json ....

mas eu confirmo que yarn upgrade-interactive funciona ... para o primeiro projeto atualizado
a próxima utilização de yarn upgrade-interactive em outros projetos que precisam da mesma atualização falhará, ou seja, "sucesso Todas as suas dependências estão atualizadas."

Eu testei com a atualização de react-scripts de 0.9.x para 0.9.3 em cada um dos meus 3 projetos. yarn upgrade-interactive trabalhou no primeiro projeto, mas ignorou a atualização em outros 2 projetos.

A partir de hoje, na versão 0.21.3, yarn upgrade ainda se comporta incorretamente.

Estou usando yarn add package<strong i="7">@version</strong> --dev vez disso, e ele atualiza o pacote conforme desejado e atualiza o package.json corretamente.

Fwiw, tenho usado upgrade-interactive que, por algum motivo, parece render mais sorte.

🍒 🍒 🍒

Seria bom saber, qual é o comportamento esperado do fio neste caso. Algum dos desenvolvedores do yarn pode dizer se o yarn deve atualizar o package.json ou não?

Acabei de fazer um yarn upgrade babel-cli que estava em meu devDependencies e foi adicionado como uma dependência de produção (para dependencies ) ... algo ainda está completamente quebrado. Ah, e eu uso yarn v 0.22.0 btw!

EDIT: Acontece que eu tinha NODE_ENV definido como "produção" (devido ao meu aplicativo ser um aplicativo de nó) e isso bagunça coisas como "instalação do yarn" (que agirá como yarn install --production e pulará devDependencies por exemplo).

Talvez yarn upgrade também seja afetado pela variável de ambiente do nó.

Acabei de perceber isso:
image

Não sou um apologista nem nada, acho que deveria ser reaberto ... mas bolas sagradas. 720 edições é o suficiente para afogar um navio de cruzeiro cheio de desenvolvedores de fios.

O problema +1 ainda está presente no Yarn v0.21.3 no Windows 10 Pro e no Node 6.10.0.

Isso não foi corrigido. Estou recebendo no macOS Sierra 10.12.4. Eu tenho alguns devDependencies que são repositórios git privados e um padrão dependency ( "jquery": "^3.1.1" ). A última versão do jQuery é 3.2.1, e yarn upgrade vê isso ( ├─ [email protected] ), mas não atualiza package.json .

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

Reabrir.

Windows - v0.21.3 falha com yarn upgrade ... ao especificar um pacote depois de atualizar o package.json e o arquivo de bloqueio.

Windows - v0.22 -ainda não atualiza o package.json, mas atualiza o arquivo de bloqueio.
funcionou de certa forma, mas não identificou todos os pacotes que deveriam ter sido atualizados e, portanto, quebrou várias dependências de pares.

Felizmente, só usei em um projeto e consegui reverter a bagunça. Adoro a ideia por trás do Yarn, mas não vou me preocupar com isso até que isso seja resolvido.

Windows, Yarn v0.22 - não atualiza package.json ao usar yarn upgrade como @LaughingBubba mencionado. A pasta node_modules é atualizada, mas package.json não, o que cria uma confusão nas versões dos pacotes.

@kittens , não parece que isso foi corrigido.

Acabei de ver isso novamente no 0.23.2.

No meu caso, parece que se pelo menos 1 das dependências atualizadas em uma lista NÃO for um devDep, ele coloca todas as atualizações em dependências em package.json.

Update: Também vendo isso com a atualização de um único devDep. Ele é copiado para o deps sem ser atualizado.

Isso definitivamente não foi corrigido. Perdi uma hora nisso. O fio não deveria ser melhor do que o npm?

@ fab1an , por enquanto use yarn add package-name<strong i="6">@latest</strong> [--dev] para atualizar um pacote. Ele se comporta como upgrade deve, atualizando o package.json corretamente.

@diegovilar Obrigado pela npm-check -u para atualizá-los.

Ainda quebrado no Windows x64, Yarn 0.23.2

Para todos que comentam aqui, sugiro usar yarn upgrade-interactive nesse meio tempo. Tem funcionado muito bem aqui.

Ainda quebrado e se você usar yarn upgrade-iteractive e não souber de qual versão do tslint, codelyzer, typescript, etc, os pacotes dependem, como Angular ou Angular CLI, você pode e irá causar um monte de erros que irão assombrá-lo mesmo depois de reverter tudo. Este problema foi publicado novamente?

@milesj NO. Estou aqui e tenho usado SOMENTE upgrade-interactive exatamente com os mesmos problemas.

Não tinha certeza se isso estava acontecendo, já que estava fechado há meses, então criei um novo problema - # 3266

@ fab1an Isso é lamentável. Não tive problemas com a atualização do package.json: /

@ fab1an @milesj upgrade-interactive não atualizou o package.json em um de nossos projetos também. Parece que se você atualizar e o package.json não tiver o número certo, então todas as atualizações interativas não atualizam o package.json ... ou algo assim ... de qualquer forma, definitivamente posso concordar com você que às vezes não funciona.

O Windows 10, yarn v0.23.4 ainda não atualiza o package.json ao fazer yarn upgrade

Edit: Talvez isso seja intencional?
Por exemplo: "semantic-ui-react": "^0.68.2" - já existe uma nova versão (0.68.3) e essa versão está instalada e yarn.lock foi alterado para 0.68.3 mas devido a ^ na versão (> = 0.68.2 <0.69.0) não há necessidade de atualizar package.json para ^0.68.3 ?

@iamfreee Estou executando o Yarn v0.24.5 e executando yarn upgrade não atualiza package.json, apenas yarn.lock. Isso não pode (ou pelo menos não deveria) ser intencional, porque em primeiro lugar, o controle de versão em package.json é definir a versão real do pacote primeiro e, em seguida, ditar as restrições de atualização, ou seja, ^ ou ~ . Em segundo lugar, executar yarn upgrade em um pacote individual muda o package.json, então por que o comportamento ao atualizar todos os pacotes é diferente? Por que deveria haver uma discrepância no comportamento entre executar yarn upgrade e yarn upgrade-interactive isso não faz sentido?

Este problema foi resolvido por um tempo, então francamente não está ganhando força. Devíamos apenas abrir uma nova edição. Mesmo que esse comportamento seja intencional, ainda discordo dele. yarn upgrade não deve nem mesmo atualizar para a tag @latest, porque e se você tiver uma restrição de versão diferente listada em seu package.json? Veja aqui: https://docs.npmjs.com/cli/update#caret -dependencies

@leosco No meu caso, npm update não atualizou package.json também e também yarn upgrade [package] não resolveu o problema. É por isso que acho que o problema está relacionado à restrição de versão ^ ou é o comportamento esperado.

@iamfreee Não, você tem que fazer npm update --save que é suposto ser o comportamento padrão do Yarn.

Publiquei um novo problema detalhando tudo isso, veja aqui https://github.com/yarnpkg/yarn/issues/3492 e talvez continue a discussão lá.

Também gostaria de repetir que tive sucesso com yarn interactive-upgrade enquanto yarn upgrade --latest não funcionou para mim.
Usando o yarn v0.24.6 com o nó v7.10.0.

yarn upgrade --latest funciona bem: +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 parece estar tendo problemas agora na v1.

@milesj Você pode tentar as compilações noturnas? https://yarnpkg.com/en/docs/nightly Este PR pode ter corrigido https://github.com/yarnpkg/yarn/commit/da2b9096057301273aa27336f70622dda09b6c33

@kaylieEB Não tenho certeza, mas acho que yarn interactive-upgrade se comporta de maneira diferente agora. Acabei de executá-lo em um projeto com várias atualizações menores, e package.json não foi modificado, apenas yarn.lock . Antes de 1.0.2, acho que package.json teria sido mantido em sincronia com as versões atualizadas, mas posso estar errado sobre isso ... A última compilação noturna não mudou esse comportamento para mim.

yarn upgrade --latest agora funciona bem, mas eu preferia poder escolher interativamente o que atualizar e, em seguida, ter package.json ajustado de acordo.

@lehni Também há yarn interactive-upgrade --latest .

@milesj : você quis dizer yarn upgrade-interactive --latest ?
documentos: https://yarnpkg.com/en/docs/cli/upgrade-interactive

Err, sim, cérebro peido. Obrigado.

o mesmo aqui com o fio 1.3.2

o mesmo aqui com o fio 1.5.1

Quebrado em 1.5.1 novamente

quebrado com -

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

mesmo nó de problema v8.9.4
fio 1.5.1

Uma solução alternativa: use yarn add vez de yarn upgrade .

Em resumo:

  • yarn upgrade : atualize os pacotes para a faixa mais recente possível especificada por pacakge.json , mas não substitua
  • yarn add : atualize os pacotes para a faixa mais recente possível e reescreva package.json
  • yarn update , como npm update : não existe

No entanto, o documento de atualização do npm diz:

A partir de [email protected] , a atualização do npm mudará o package.json para salvar a nova versão como a dependência mínima necessária. Para obter o comportamento antigo, use npm update --no-save.

Mas de fato...

 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"
  }
} 

Não sei qual usar :( O Yarn adicionou esse comportamento em algum momento de 2017 e depois o quebrou silenciosamente. O npm afirma ter o mesmo quando também não funciona.

@kittens Por favor, reabra este problema.

como dito por @octref yarn upgrade atualiza as dependências para sua versão mais recente, mas não sobrescreve o package.json . yarn add <package> atualizará o pacote para sua versão mais recente se já estiver instalado e sobrescreverá package.json . Existe um motivo para yarn upgrade não substituir o package.json ? Nesse caso, talvez isso possa ser adicionado como um sinalizador a yarn upgrade .

[email protected]
[email protected]
os: MacOS

Editar

leia https://github.com/yarnpkg/yarn/issues/5602#issuecomment -377528617

Uma solução alternativa: use yarn add vez de yarn upgrade .

Funciona como um encanto. É necessário atualizar essas duas páginas do Google Docs para usar yarn add vez de yarn upgrade .

Estou usando yarn upgrade-interactive --latest há um bom tempo sem soluços ...

Eu tenho usado o yarn upgrade-interativo - o mais recente por um bom tempo sem soluços ...

Parece um pouco redundante .. Por que não usar o mais fácil de todos esses comandos, yarn add ? Super simples.

@ guylepage3 porque consigo ver quais atualizações estão disponíveis em quais versões com diferentes códigos de cores com base nas alterações de patch / menor / principal, escolho as que desejo atualizar e faço várias atualizações de uma vez dessa maneira. Nada de redundante nisso?

@lehni então a documentação no site deve refletir isso e as duas páginas seguintes devem indicar o uso do método yarn upgrade-interactive --latest .

@ guylepage3 esta conversa não está levando a lugar nenhum e nem ajuda. Se você quiser sugerir atualização de documentos, pode ser melhor criar um novo problema especificamente para isso.

Desculpe se você se sente assim @alexdevero. E sim, se você olhar acima .. https://github.com/yarnpkg/yarn/issues/1458#ref -issue-332178362

Isso me ajudou: https://www.npmjs.com/package/syncyarnlock

$ yarn upgrade-interactive && syncyarnlock

Isso não funciona para mim em áreas de trabalho de fios. Alguém pode dar uma olhada?

Esta página foi útil?
0 / 5 - 0 avaliações