# Discourse core passe à pnpm pour la gestion des packages JS

**URL:** https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521
**Category:** Development
**Tags:** dev-news
**Created:** [Septembre 3, 2024, 9:26 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521 "2024-09-03T09:26:41Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Septembre 3, 2024, 9:26 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/1 "2024-09-03T09:26:41Z")

</div>

Nous remplaçons le gestionnaire de paquets JS de Discourse core de [‘yarn classic’](https://classic.yarnpkg.com/) par [pnpm](https://pnpm.io/). Cela apportera des améliorations significatives en termes de vitesse d’installation et d’exigences de stockage.

## Production

Si vous utilisez un hébergement géré ou une installation standard, vous n’avez rien à faire. Le changement sera appliqué automatiquement lors de votre prochaine mise à jour.

Si vous avez un environnement de production personnalisé, vous devrez remplacer toutes les commandes `yarn ...` par `pnpm ...`.

## Développement

Après avoir récupéré la dernière version de Discourse core, vous pourriez voir une erreur comme celle-ci au démarrage du serveur :

```plaintext
pnpm n'est pas installé

```

ou, si vous exécutez une commande comme `yarn install`, vous verrez

```markdown
error discourse@: Le moteur "yarn" est incompatible avec ce module. Version attendue "please-use-pnpm". Obtenu "..."

```

Pour résoudre ce problème, vous devriez :

1. exécuter `npm install -g pnpm`

2. exécuter `pnpm install`

3. remplacer toutes les utilisations de `yarn ...` dans votre environnement de développement par `pnpm ...`

## Plugins / Thèmes

Nous avons fait passer nos plugins/thèmes officiels à l’utilisation de `pnpm` pour leurs dépendances de linting.

Pour le [`discourse_theme` CLI](https://meta.discourse.org/t/install-the-discourse-theme-cli-console-app-to-help-you-build-themes/82950), vous devrez mettre à jour votre version locale en exécutant `gem update discourse_theme`.

## Revenir à `yarn`

Si vous avez besoin de revenir à une version de Discourse basée sur `yarn` (par exemple, pour développer sur la branche stable), vous devrez supprimer manuellement tous les répertoires `node_modules` du core :

```plaintext
rm -rf node_modules app/assets/javascripts/*/node_modules

```

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [Septembre 3, 2024, 6:55 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/2 "2024-09-03T18:55:30Z")

</div>

Je peux signaler une expérience sans faille et fluide sur dev, qui fonctionne du premier coup, merci beaucoup ! :rocket:

---

<div class="post-metadata">

### Author: ![Heliosurge](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/heliosurge/32/571810_2.png) [@Heliosurge](https://meta.discourse.org/u/Heliosurge)
#### Post date: [Septembre 3, 2024, 7:12 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/3 "2024-09-03T19:12:54Z")

</div>

Si vous êtes auto-hébergé. Devrons-nous faire quelque chose si nous n’utilisons pas de composants et plugins personnalisés ?

Par exemple, certains plugins et composants ne sont pas officiels.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Septembre 3, 2024, 7:43 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/4 "2024-09-03T19:43:52Z")

</div>

En supposant que vous utilisez notre installation standard, vous n’avez rien à faire. Aucune modification n’est requise pour les plugins ou les thèmes.

---

<div class="post-metadata">

### Author: ![supermathie](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/supermathie/32/507518_2.png) [@supermathie](https://meta.discourse.org/u/supermathie)
#### Post date: [Septembre 3, 2024, 8:47 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/5 "2024-09-03T20:47:08Z")

</div>

> [@david](#):
>
> `Version attendue « please-use-pnpm ».`

Devrions-nous changer cette version attendue en, par exemple :

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

```

:smiley:

---

<div class="post-metadata">

### Author: ![TonyG](https://avatars.discourse-cdn.com/v4/letter/t/f14d63/32.png) [@TonyG](https://meta.discourse.org/u/TonyG)
#### Post date: [Septembre 4, 2024, 3:10 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/6 "2024-09-04T03:10:26Z")

</div>

Je contribue à un autre projet FOSS où j’ai récemment découvert PNPM pour la première fois. La transition a été une évidence, fluide, efficace et un vrai plaisir.

J’ai rédigé des notes très brèves dans la documentation de ce projet sur ce qu’est PNPM et comment l’utiliser. Bien que les moindres détails diffèrent pour chaque projet, j’espère que ce qui est là pourra fournir une introduction rapide à toute personne ici qui, comme moi, n’avait aucune idée avant qu’une annonce ne soit faite.

> **[PNPM Package Manager](https://mysql-to-zod.pages.dev/getting-started/pnpm/)**

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Septembre 4, 2024, 8:30 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/7 "2024-09-04T08:30:45Z")

</div>

Bonne ressource, merci @TonyG

Il convient de noter cependant que aucune des « notes de configuration » n’est requise pour Discourse. Je ne sais pas pourquoi ils en ont besoin… peut-être parce que c’est une application basée sur Windows ?

De plus, leur note concernant « Dans un projet existant, supprimez simplement le dossier ‘node\_modules’ » est gérée automatiquement dans Discourse [par ce script](https://github.com/discourse/discourse/blob/a2f625a0ef110acc35c1bbd7022f4e61ec60d7e8/.pnpmfile.cjs#L5-L13) :sunglasses:

Donc, pour nous, cela devrait vraiment être aussi simple que :

```plaintext
npm install -g pnpm
pnpm install

```

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [Septembre 4, 2024, 4:29 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/8 "2024-09-04T16:29:49Z")

</div>

Une question ici, David :

Comment exécuter le linting localement ?

c’est-à-dire par quoi remplacer, par exemple : `yarn prettier --write plugins/discourse-events`

J’ai essayé d’exécuter

`pnpm pprettier --write plugins/discourse-events `

mais cela génère une erreur :

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

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Septembre 4, 2024, 4:36 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/9 "2024-09-04T16:36:28Z")

</div>

> [@merefield](#):
>
> npnpm pprettier

Je pense que vous avez trop de `p` là ?

Donc vous voulez :

```plaintext
pnpm prettier --write plugins/discourse-events

```

`pprettier` est un outil pour exécuter prettier en parallèle, mais je suppose qu’il ne prend pas en charge l’exécution sur un seul répertoire comme celui-ci.

---

<div class="post-metadata">

### Author: ![TonyG](https://avatars.discourse-cdn.com/v4/letter/t/f14d63/32.png) [@TonyG](https://meta.discourse.org/u/TonyG)
#### Post date: [Septembre 4, 2024, 7:13 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/10 "2024-09-04T19:13:14Z")

</div>

> [@david](#):
>
> Il est intéressant de noter, cependant, qu’aucune des « notes de configuration » n’est requise pour Discourse. Je ne suis pas sûr pourquoi ils en ont besoin…

Merci pour votre contribution à la documentation FOSS @david :lol_: Il semble que la page soit orientée vers Windows, et que les informations qu’elle contient puissent être des connaissances requises pour utiliser pnpm. Je vais modifier et clarifier qu’il n’en est rien pour cet utilitaire.

Pour être clair, les informations sur le fonctionnement de pnpm sont là uniquement pour le confort de l’utilisateur/développeur, y compris ceux qui aimeraient comprendre ce nouvel outil qui remplace un outil important et souvent utilisé dans notre boîte à outils.

Pour les développeurs Discourse, ces informations expliquent où se trouvent les choses et comment modifier les emplacements par défaut. Ceci est destiné à répondre à une question comme « si tous mes node\_modules sont maintenant dans un seul endroit, où sont-ils ? » Dans le conteneur Discourse, vous, les développeurs, pourriez ne pas vouloir que les paquets soient à l’emplacement par défaut. Si, pour une raison quelconque, un développeur de plugin référence directement le dossier node\_modules et trouve des liens vers un autre emplacement plutôt que des fichiers, les informations sur cette page expliquent de manière concise comment cet emplacement est déterminé.

Voilà pour avoir essayé d’être bref. :facepalm: :lolsob:

Quoi qu’il en soit, bonne initiative pour pnpm, et merci.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [Septembre 5, 2024, 12:52 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/11 "2024-09-05T00:52:21Z")

</div>

Oui, `pprettier` n’était pas approprié, merci.

J’ai aussi résolu mon problème ultime.

Il faut apparemment exécuter `pnpm install` dans le répertoire du plugin avant de pouvoir exécuter les vérifications de linting (même depuis le répertoire discourse).

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Septembre 5, 2024, 10:12 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/12 "2024-09-05T10:12:14Z")

</div>

Hmm intéressant :thinking:

Avec notre squelette de plugin standard, chaque plugin a son propre fichier `package.json` avec ses dépendances de linting. Et pour l’instant, le squelette utilise toujours `yarn`.

Donc, pour linter un plugin spécifique, vous iriez dans le répertoire du plugin et exécuteriez

```plaintext
yarn install
yarn prettier --write

```

L’utilisation de la configuration de linting du cœur sur les plugins peut parfois fonctionner. Mais si la version/configuration diverge, cela peut devenir douloureux car la version d’eslint/prettier dans le cœur ne correspondra pas à la version exécutée dans la CI de votre plugin.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [Septembre 5, 2024, 12:05 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/13 "2024-09-05T12:05:03Z")

</div>

Devrions-nous envisager d’utiliser pnpm à partir du répertoire des plugins également ?

Je crois qu’il utilise toujours le package.json local, n’est-ce pas ?

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Septembre 5, 2024, 12:14 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/14 "2024-09-05T12:14:47Z")

</div>

> [@merefield](#):
>
> Envisagerions-nous également d’utiliser pnpm à partir du répertoire des plugins ?

Oui, absolument ! Laissons la poussière retomber sur le changement principal avant de nous lancer dans cette aventure

(fait amusant : CDCK maintient près de 600 dépôts de thèmes/plugins qui devront tous être mis à jour :sweat_smile:)

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [Septembre 5, 2024, 12:39 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/15 "2024-09-05T12:39:05Z")

</div>

Bien sûr, aucun problème !

---

<div class="post-metadata">

### Author: ![Architect](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/architect/32/520575_2.png) [@Architect](https://meta.discourse.org/u/Architect)
#### Post date: [Septembre 6, 2024, 12:48 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/16 "2024-09-06T00:48:02Z")

</div>

> [@david](#):
>
> Si vous utilisez l’hébergement géré ou une [installation standard](https://meta.discourse.org/t/142537?silent=true), alors vous n’avez rien à faire. Le changement sera appliqué automatiquement lors de votre prochaine mise à jour.

Cela semble avoir fonctionné correctement, mais j’ai été confus par un avis qui semble indiquer que cela doit être fait manuellement et n’est pas automatique pour les sites d’installation standard :

 ![update notice](https://global.discourse-cdn.com/meta/original/4X/1/a/d/1adc2e3448bcb21cb1913bd32c14d537e547291f.png)

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Septembre 6, 2024, 8:56 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/18 "2024-09-06T08:56:06Z")

</div>

Merci @Architect. Ces PR supprimeront les messages de mise à niveau&nbsp;:

- [UX: Suppress pnpm upgrade notifications in build logs by davidtaylorhq · Pull Request #240 · discourse/docker\_manager · GitHub](https://github.com/discourse/docker_manager/pull/240)

- [Suppress pnpm upgrade notices in logs by davidtaylorhq · Pull Request #866 · discourse/discourse\_docker · GitHub](https://github.com/discourse/discourse_docker/pull/866)

---

<div class="post-metadata">

### Author: ![alxndr](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alxndr/32/102300_2.png) [@alxndr](https://meta.discourse.org/u/alxndr)
#### Post date: [Septembre 7, 2024, 4:33 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/20 "2024-09-07T16:33:46Z")

</div>

J’ai rencontré un problème lors de la mise à niveau via l’outil web — la page de mise à niveau indiquait que la mise à niveau avait échoué, avec l’erreur `Expected version "please-use-pnpm"`, mais lorsque j’ai ensuite revisité la page Versions, il semblait que la mise à niveau avait réussi :

 ![Screenshot 2024-09-07 at 09.27.00](https://global.discourse-cdn.com/meta/original/4X/9/0/b/90b25dc348afb09b1b75150e30918e9084547bce.png)

…cependant, aucune des pages d’administration ne fonctionne maintenant :

 ![Screenshot 2024-09-07 at 09.31.55](https://global.discourse-cdn.com/meta/original/4X/9/9/d/99d935a19b84e5dd59d2c522c969bbddd16f5075.png)

_Mise à jour :_  
J’ai effectué une reconstruction en ligne de commande et cela a résolu le problème.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Septembre 7, 2024, 6:49 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/21 "2024-09-07T18:49:36Z")

</div>

Merci d’avoir signalé, @alxndr.

Je viens de pousser [cette correction](https://github.com/discourse/docker_manager/commit/652ba9f1ff2c6a6cd288a7df524270d2054461da) qui devrait empêcher que cela n’arrive à d’autres.

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [Septembre 7, 2024, 7:38 UTC](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521/22 "2024-09-07T19:38:54Z")

</div>

> [@david](#):
>
> améliorations significatives de la vitesse d’installation et des exigences de stockage.

C’est peut-être notre environnement Communiteq, mais pour être honnête, je ne constate aucune amélioration significative de la vitesse lors de l’installation ? Notre installation de test stable s’installe même 23 secondes plus rapidement que celle qui a passé les tests.

[Next page](https://meta.discourse.org/t/discourse-core-is-switching-to-pnpm-for-js-package-management/324521.md?page=2)
