Discourse core está cambiando a pnpm para la gestión de paquetes JS

Estamos cambiando el administrador de paquetes de JS del núcleo de Discourse de ‘yarn classic’ a pnpm. Esto traerá mejoras significativas en la velocidad de instalación y los requisitos de almacenamiento.

Producción

Si utiliza alojamiento administrado o una instalación estándar, no necesita hacer nada. El cambio se aplicará automáticamente en su próxima actualización.

Si tiene un entorno de producción personalizado, deberá cambiar cualquier comando yarn ... por pnpm ...

Desarrollo

Después de descargar la última versión del núcleo de Discourse, es posible que vea un error como este al iniciar el servidor:

pnpm no está instalado

o, si ejecuta un comando como yarn install, verá

error discourse@: El motor "yarn" es incompatible con este módulo. Versión esperada "please-use-pnpm". Obtenida "..."

Para resolver esto, debería:

  1. ejecutar npm install -g pnpm

  2. ejecutar pnpm install

  3. reemplazar cualquier uso de yarn ... en su entorno de desarrollo con pnpm ...

Plugins / Temas

Hemos cambiado nuestros plugins/temas oficiales para usar pnpm para sus dependencias de linting.

Para la discourse_theme CLI, necesitará actualizar su versión local ejecutando gem update discourse_theme.

Volver a yarn

Si necesita volver a una versión de Discourse basada en yarn (por ejemplo, desarrollando en la rama estable), deberá eliminar manualmente todos los directorios node_modules del núcleo:

rm -rf node_modules app/assets/javascripts/*/node_modules
24 Me gusta

¡Puedo informar de una experiencia impecable y fluida en el entorno de desarrollo, funcionando a la primera, ¡muchas gracias! :rocket:

7 Me gusta

Si lo alojas tú mismo. ¿Necesitaremos hacer algo si no usamos componentes y complementos personalizados?

Por ejemplo, algunos complementos y componentes no son oficiales.

3 Me gusta

Asumiendo que estás utilizando nuestra instalación estándar, no necesitas hacer nada. No se requieren cambios en los plugins ni en los temas.

5 Me gusta

¿Deberíamos cambiar esta versión esperada a, quizás:

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

:smiley:

6 Me gusta

Estoy contribuyendo a otro proyecto FOSS donde me presentaron PNPM por primera vez. La transición fue una decisión obvia, fluida, efectiva y un verdadero placer.

Escribí notas muy breves en la documentación de ese proyecto sobre Qué es PNPM y cómo usarlo. Si bien los pequeños detalles son diferentes para cada proyecto, espero que lo que está allí pueda proporcionar una introducción rápida a cualquiera que, como yo, no tenía ni idea antes de que se hiciera un anuncio.

5 Me gusta

Buen recurso, gracias @TonyG

Vale la pena señalar, sin embargo, que ninguna de las “notas de configuración” allí son necesarias para Discourse. No estoy seguro de por qué lo necesitan… ¿quizás porque es una aplicación basada en Windows?

Además, su nota sobre “En un proyecto existente, simplemente elimine la carpeta ‘node_modules’” se maneja automáticamente en Discourse con este script :sunglasses:

Así que para nosotros, realmente debería ser tan simple como:

npm install -g pnpm
pnpm install
1 me gusta

Una pregunta aquí, David:

¿Cómo ejecutar linting localmente?

es decir, ¿qué reemplaza, por ejemplo: yarn prettier --write plugins/discourse-events?

He intentado ejecutar

pnpm pprettier --write plugins/discourse-events

pero arroja un error:

Error: Archivo no encontrado con glob singular: /Users/blah/dev/disc/discourse/plugins/discourse-events (si esto fue intencional, use la opción allowEmpty)

Creo que tienes demasiadas p ahí.

Entonces quieres:

pnpm prettier --write plugins/discourse-events

pprettier es una herramienta para ejecutar prettier en paralelo, pero supongo que no admite la ejecución en un solo directorio de esa manera.

3 Me gusta

Gracias por tu contribución a la documentación FOSS @david :lol_: Parece que la página está orientada a Windows y que la información allí podría ser conocimiento requerido para usar pnpm. Editaré y aclararé que no es el caso para esa utilidad.

Para ser claro, la información sobre cómo funciona pnpm está ahí solo para la comodidad del usuario/desarrollador, incluidos aquellos que aquí podrían querer entender esta nueva herramienta que reemplaza una herramienta significativa y de uso frecuente en nuestro kit.

Para los desarrolladores de Discourse, esa información explica dónde se encuentran las cosas y cómo cambiar las ubicaciones predeterminadas. Esto está destinado a responder una pregunta como “¿si todos mis node_modules ahora están en una ubicación, dónde están?”. En el contenedor de Discourse, es posible que los desarrolladores no quieran los paquetes en la ubicación predeterminada. Si, por cualquier motivo, un desarrollador de complementos hace referencia directa a la carpeta node_modules y encuentra enlaces a otra ubicación en lugar de archivos, la información de esa página explica de manera concisa cómo se determina esa ubicación.

Mucho para intentar ser breve. :facepalm: :lolsob:

De todos modos, buena jugada a pnpm, y gracias.

2 Me gusta

Sí, pprettier no era apropiado, gracias.

También resolví mi problema final.

Aparentemente, necesitas ejecutar pnpm install en el directorio del plugin antes de poder ejecutar las verificaciones de linting (incluso desde el directorio de discourse).

2 Me gusta

Hmm interesante :thinking:

Con nuestro esqueleto de plugin estándar, cada plugin tiene su propio archivo package.json con sus dependencias de linting. Y por ahora, el esqueleto todavía usa yarn.

Entonces, para hacer el linting de un plugin específico, irías al directorio del plugin y ejecutarías

yarn install
yarn prettier --write

Usar la configuración de linting de core en los plugins puede funcionar a veces. Pero si la versión/configuración diverge, puede ser doloroso porque la versión de eslint/prettier en core no coincidirá con la versión que se ejecuta en la CI de tu plugin.

1 me gusta

¿Consideraríamos usar pnpm también desde el directorio del plugin?

Creo que todavía está usando el package.json local, ¿no?

3 Me gusta

¡Sí, definitivamente lo haremos! Solo dejaremos que el polvo se asiente en el cambio principal antes de comenzar esa aventura

(Dato curioso: CDCK mantiene casi 600 repositorios de temas/plugins que necesitarán ser actualizados :sweat_smile:)

2 Me gusta

¡Claro, sin problemas!

1 me gusta

Esto parece haber funcionado correctamente, pero me confundió el aviso que parece indicar que esto debe hacerse manualmente y no es automático para el sitio de instalación estándar:

2 Me gusta

Gracias @Architect. Estas PR suprimirán los mensajes de actualización:

6 Me gusta

Tuve un problema al actualizar a través de la herramienta web: la página de actualización dijo que la actualización falló, con el error Expected version "please-use-pnpm", pero cuando posteriormente volví a visitar la página de Versiones, parecía que la actualización se había realizado correctamente:

…sin embargo, ahora ninguna de las páginas de Administración funciona:

Actualización:
Hice una reconstrucción en la línea de comandos y eso solucionó las cosas.

3 Me gusta

Gracias por informar @alxndr.

Acabo de publicar esta corrección que debería evitar que esto le suceda a otros.

4 Me gusta

Quizás sea nuestro entorno Communiteq, pero, sinceramente, ¿no veo ninguna mejora significativa de velocidad durante la instalación? Nuestra instalación de prueba estable incluso se instala 23 segundos más rápido que la que pasó las pruebas.

1 me gusta