Al ejecutar Discourse Theme CLI en un repositorio de componentes temáticos con pnpm instalado en node_modules, el comando discourse_theme watch . devolverá errores sobre directorios node_modules/.pnpm que ya se están observando. A primera vista, esto se debe a que los paquetes están enlazados simbólicamente.
He probado esto en un nuevo GitHub Codespace utilizando el componente temático oficial de mermaid, usando discourse_theme v2.1.3.
Extracto de los registros de error
** ERROR: ¡el directorio ya se está observando! **
Directorio: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/ember-template-recast@6.1.5/node_modules/@glimmer/reference
ya se está observando a través de: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/@glimmer+reference@0.84.3/node_modules/@glimmer/reference
MÁS INFORMACIÓN: https://github.com/guard/listen/blob/master/README.md
** ERROR: ¡el directorio ya se está observando! **
Directorio: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/@humanwhocodes+retry@0.3.1/node_modules/@humanwhocodes/retry
ya se está observando a través de: /workspaces/discourse-mermaid-theme-component/node_modules/.pnpm/@humanwhocodes+retry@0.3.1/node_modules/@humanwhocodes/retry
MÁS INFORMACIÓN: https://github.com/guard/listen/blob/master/README.md
Sospecho que tiene que ver con que discourse_theme observa todo el directorio sin ninguna exclusión para node_modules/.pnpm o node_modules en general.
No es un problema importante, ya que discourse_theme watch parece funcionar bien después de los errores, pero no veo el mensaje "Watching for changes..." después de los errores que se supone que proviene de https://github.com/discourse/discourse_theme/blob/main/lib/discourse_theme/watcher.rb#L45-L48, por lo que podría causar cierta confusión. Además, no se siente bien pasar de npm/yarn a pnpm solo para ver que la CLI muestra un montón de errores en la pantalla.
Lo uso desde dentro del propio directorio TC ya que normalmente estoy desarrollando/probando el tema contra mi instancia de desarrollo local, una copia de desarrollo del foro que no está en mi máquina, o el sitio Theme Creator (cuya API key generator no parece funcionar últimamente). Intento evitar confundirme sobre en qué entorno estoy trabajando.
He hecho git clone del mermaid TC en el mismo codespace que una instalación fresca de discourse codespace e intenté ejecutar discourse_theme watch desde el directorio discourse en su lugar. Da los mismos errores.
Ciertamente es arbitrario, pero es un poco ridículo tener que ejecutar discourse_theme desde una clonación local de discourse cuando la instancia de discourse que se está probando no es la instancia local.
De todos modos, he hecho lo que sugeriste, tanto en un codespace de GitHub recién creado como en mi propio entorno de desarrollo, y todavía lanza los mismos errores.
Leyendo todo el registro (o todos los que caben en el historial de la terminal), todos los directorios en los que falla son /node_modules/.pnpm. Probando y ejecutando discourse_theme contra otro TC que aún no se ha actualizado para usar pnpm en lugar de yarn, no veo ningún error, así que estoy casi 100% seguro de que el problema está en que observa .pnpm.
De Symlinked `node_modules` structure | pnpm, parece que la estructura normal de node_modules se conserva moviendo todo el código real a /node_modules/.pnpm y el resto de los directorios en /node_modules/ son solo enlaces simbólicos a .pnpm. Por lo tanto, ignorar .pnpm evita el error “¡el directorio ya está siendo observado!”.
He jugado un poco con la gema discourse_theme y he añadido listener.ignore /node_modules\\/\\.pnpm/ a watcher.rb, y parece que funciona bien sin ningún mensaje de error. Incluso detectó una nueva instalación de paquete pnpm.
Esta PR aplicará la regla de ignorar y silenciará las advertencias. Gracias por crear el tema y la investigación @Alteras - ¡estas advertencias también me estaban molestando!