Erros de tema do Discourse CLI com node_modules instalados pelo pnpm devido a symlinks

Ao executar o Discourse Theme CLI em um repositório de componente de tema com pnpm node_modules instalados, o comando discourse_theme watch . retornará erros sobre diretórios node_modules/.pnpm já estarem sendo monitorados. À primeira vista, isso ocorre porque os pacotes estão sendo vinculados simbolicamente.

Testei isso em um Codespace do GitHub recém-criado usando o TC oficial do mermaid, utilizando o discourse_theme v2.1.3.

Trecho dos logs de erro
** ERRO: diretório já está sendo monitorado! **

Diretório: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/ember-template-recast@6.1.5/node_modules/@glimmer/reference

já está sendo monitorado através de: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/@glimmer+reference@0.84.3/node_modules/@glimmer/reference

MAIS INFORMAÇÕES: https://github.com/guard/listen/blob/master/README.md
** ERRO: diretório já está sendo monitorado! **

Diretório: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/@humanwhocodes+retry@0.3.1/node_modules/@humanwhocodes/retry

já está sendo monitorado através de: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/@humanwhocodes+retry@0.3.1/node_modules/@humanwhocodes/retry

MAIS INFORMAÇÕES: https://github.com/guard/listen/blob/master/README.md

Suspeito que isso tenha a ver com o discourse_theme monitorar o diretório inteiro sem ignorar node_modules/.pnpm ou node_modules em geral.

Não é um problema grave, pois o discourse_theme watch parece funcionar bem após os erros, mas não estou vendo a mensagem "Watching for changes..." após os erros que deveria vir de https://github.com/discourse/discourse_theme/blob/main/lib/discourse_theme/watcher.rb#L45-L48, então isso pode causar alguma confusão. Além disso, não é uma boa sensação mudar de npm/yarn para pnpm apenas para ver o CLI lançar um monte de erros na tela.

3 curtidas

normalmente eu executo isso do diretório do discourse, mas observo a pasta de código do tema, então algo como:

discourse_theme watch ~code/my-new-theme

algum motivo pelo qual você está executando isso da mesma pasta?

Eu me pergunto se isso está causando seus problemas? :thinking:

Eu o uso de dentro do próprio diretório TC, já que geralmente estou desenvolvendo/testando o tema em minha instância de desenvolvimento local, uma cópia de desenvolvimento do fórum que não está em minha máquina ou no site Theme Creator (cujo gerador de chave de API parece não estar funcionando ultimamente). Tentando evitar confusão sobre em qual ambiente estou trabalhando.

Eu fiz git clone do TC do mermaid no mesmo codespace que uma instalação nova do codespace do discourse e tentei executar o discourse_theme watch do diretório do discourse em vez disso. Dá os mesmos erros.

tudo bem, mas nada impede você de executá-lo de outra aba do terminal… e do diretório do discourse?

Certamente é arbitrário, mas é um pouco ridículo ter que executar o discourse_theme a partir de um clone local do discourse quando a instância do discourse que está sendo testada não é a instância local.

De qualquer forma, fiz o que você sugeriu, tanto em um codespace recém-criado do github quanto em meu próprio ambiente de desenvolvimento, e ele ainda gera os mesmos erros.


Lendo todo o log (ou todos os que cabem no histórico do terminal), todos os diretórios em que ele está gerando erros são /node_modules/.pnpm. Testando e executando discourse_theme contra um TC diferente que ainda não foi atualizado para usar pnpm em vez de yarn, não vejo nenhum erro, então tenho quase 100% de certeza de que o problema está em observar .pnpm.

De Symlinked `node_modules` structure | pnpm, parece que a estrutura normal do node_modules é preservada movendo todo o código real para /node_modules/.pnpm e os demais diretórios em /node_modules/ são apenas links simbólicos para .pnpm. Portanto, ignorar .pnpm evita o erro “o diretório já está sendo observado!”.

Brinquei um pouco com a gema discourse_theme e adicionei listener.ignore /node_modules\\/\\.pnpm/ ao watcher.rb, e parece funcionar bem sem mensagens de erro. Ele até detectou uma nova instalação de pacote pnpm.

3 curtidas

Este PR aplicará a regra de ignorar e silenciar os avisos. Obrigado por criar o tópico e pela investigação @Alteras - esses avisos também estavam me incomodando! :sweat_smile:

4 curtidas

Este tópico foi automaticamente fechado 30 dias após a última resposta. Novas respostas não são mais permitidas.