Discourse core está mudando para pnpm na gestão de pacotes JS

Estamos mudando o gerenciador de pacotes JS do Discourse core de ‘yarn classic’ para pnpm. Isso trará melhorias significativas na velocidade de instalação e nos requisitos de armazenamento.

Produção

Se você usa hospedagem gerenciada ou uma instalação padrão, não precisa fazer nada. A mudança será aplicada automaticamente na sua próxima atualização.

Se você tem um ambiente de produção personalizado, precisará mudar todos os comandos yarn ... para pnpm ...

Desenvolvimento

Após baixar a versão mais recente do Discourse core, você poderá ver um erro como este ao iniciar o servidor:

pnpm não está instalado

ou, se você executar um comando como yarn install, verá

erro discourse@: O motor "yarn" é incompatível com este módulo. Versão esperada "please-use-pnpm". Obtido "..."

Para resolver isso, você deve:

  1. executar npm install -g pnpm

  2. executar pnpm install

  3. substituir todos os usos de yarn ... em seu ambiente de desenvolvimento por pnpm ...

Plugins / Temas

Mudamos nossos plugins/temas oficiais para usar pnpm para suas dependências de linting.

Para a CLI discourse_theme, você precisará atualizar sua versão local executando gem update discourse_theme.

Voltar para yarn

Se você precisar voltar para uma versão do Discourse baseada em yarn (por exemplo, desenvolvendo no branch estável), precisará excluir manualmente todos os diretórios node_modules do core:

rm -rf node_modules app/assets/javascripts/*/node_modules
24 curtidas

Posso relatar uma experiência impecável e tranquila no dev, funcionando de primeira, muito obrigado! :rocket:

7 curtidas

Se você estiver auto-hospedado. Precisaremos fazer algo se não estivermos usando componentes e plugins personalizados?

Ou seja, alguns plugins e componentes não são oficiais.

3 curtidas

Assumindo que você esteja usando nossa instalação padrão, você não precisa fazer nada. Nenhuma alteração é necessária em plugins ou temas.

5 curtidas

Devemos alterar essa versão esperada para, talvez:

please-use-pnpm-see-https://meta.discourse.org/t/324521

:smiley:

6 curtidas

Estou contribuindo para outro projeto FOSS onde fui recentemente apresentado ao PNPM pela primeira vez. A transição foi um completo “no-brainer”, suave, eficaz e um verdadeiro prazer.

Escrevi notas muito breves na documentação desse projeto sobre o que é o PNPM e como usá-lo. Embora os pequenos detalhes sejam diferentes para cada projeto, espero que o que está lá possa fornecer uma introdução rápida para qualquer pessoa aqui que, como eu, não tinha ideia antes de um anúncio ser feito.

5 curtidas

Bom recurso, obrigado @TonyG

Vale a pena notar, no entanto - nenhuma das “notas de configuração” lá são necessárias para o Discourse. Não tenho certeza por que eles precisam disso… talvez porque seja um aplicativo baseado em Windows?

Além disso, a nota deles sobre “Em um projeto existente, basta excluir a pasta ‘node_modules’” é tratada automaticamente no Discourse por este script :sunglasses:

Então, para nós, realmente deve ser tão simples quanto:

npm install -g pnpm
pnpm install
1 curtida

Uma pergunta aqui, David:

Como executar linting localmente?

ou seja, o que substitui, por exemplo: yarn prettier --write plugins/discourse-events

Tentei executar

pnpm pprettier --write plugins/discourse-events

mas ele lança um erro:

Error: File not found with singular glob: /Users/blah/dev/disc/discourse/plugins/discourse-events (if this was purposeful, use allowEmpty option)

Acho que você tem muitos p aí?

Então você quer:

pnpm prettier --write plugins/discourse-events

pprettier é uma ferramenta para executar o prettier em paralelo, mas acho que ela não suporta a execução em um único diretório como esse.

3 curtidas

Obrigado pela sua contribuição para a documentação FOSS, @david :lol_: Parece que a página é voltada para o Windows e que as informações lá podem ser conhecimento necessário para usar o pnpm. Editarei e esclarecerei que nenhuma das duas coisas é o caso para essa utilidade.

Para ser claro, as informações sobre como o pnpm funciona estão lá apenas para o conforto do usuário/desenvolvedor, incluindo aqueles aqui que podem gostar de entender essa nova ferramenta que substitui uma ferramenta significativa e frequentemente usada em nosso kit.

Para os desenvolvedores do Discourse, essas informações explicam onde as coisas estão localizadas e como alterar os locais padrão. Isso se destina a responder a uma pergunta como “se todos os meus node_modules agora estão em um local, onde eles estão?” No contêiner do Discourse, vocês, desenvolvedores, podem não querer pacotes no local padrão. Se, por qualquer motivo, um desenvolvedor de plugin estiver referenciando diretamente a pasta node_modules e encontrar links para outro local em vez de arquivos, as informações nessa página explicam de forma concisa como esse local é determinado.

É isso para tentar ser breve. :facepalm: :lolsob:

De qualquer forma, boa mudança para o pnpm e obrigado.

2 curtidas

Sim, pprettier não foi apropriado, obrigado.

Resolvi meu problema final também.

Aparentemente, você precisa executar pnpm install no diretório do plugin antes de poder executar verificações de linting (mesmo do diretório do discourse).

2 curtidas

Hmm interessante :thinking:

Com nosso esqueleto de plugin padrão, cada plugin tem seu próprio arquivo package.json com suas dependências de linting. E, por enquanto, o esqueleto ainda usa yarn.

Portanto, para fazer o linting de um plugin específico, você entraria no diretório do plugin e executaria

yarn install
yarn prettier --write

Usar a configuração de linting do core em plugins pode funcionar às vezes. Mas se a versão/configuração divergir, pode ser doloroso porque a versão do eslint/prettier no core não corresponderá à versão em execução no CI do seu plugin.

1 curtida

Consideraríamos usar o pnpm também do diretório do plugin?

Acredito que ele ainda esteja usando o package.json local, certo?

3 curtidas

Sim, com certeza! Apenas vamos deixar a poeira baixar na mudança principal antes de começarmos essa aventura

(fato divertido: a CDCK mantém quase 600 repositórios de temas/plugins que precisarão ser atualizados :sweat_smile:)

2 curtidas

Sem problemas!

1 curtida

Isso parece ter funcionado corretamente, mas fiquei confuso com o aviso que parece afirmar que isso precisa ser feito manualmente e não é automático para sites de instalação padrão:

2 curtidas

Obrigado @Architect. Estes PRs suprimirão as mensagens de atualização:

6 curtidas

Encontrei um problema ao atualizar pela ferramenta web — a página de atualização informou que a atualização falhou, com o erro Expected version "please-use-pnpm", mas quando subsequentemente visitei a página Versions novamente, pareceu que a atualização foi bem-sucedida:

…no entanto, nenhuma das páginas de Admin está funcionando agora:

Atualização:
Fiz uma reconstrução na linha de comando e isso corrigiu as coisas.

3 curtidas

Obrigado por relatar, @alxndr.

Acabei de enviar esta correção que deve impedir que isso aconteça com outras pessoas.

4 curtidas

Talvez seja o nosso ambiente Communiteq, mas, para ser honesto, não vejo nenhuma melhoria significativa de velocidade durante a instalação? Nossa instalação de teste estável até instala 23 segundos mais rápido do que a que passou nos testes.

1 curtida