Corepack est un script Node.js sans dépendance d'exécution qui sert de pont entre les projets Node.js et les gestionnaires de packages avec lesquels ils sont destinés à être utilisés pendant le développement. Concrètement, Corepack vous permet d'utiliser Yarn, npm et pnpm sans avoir à les installer .
Corepack est distribué par défaut avec toutes les versions récentes de Node.js. Exécutez corepack enable
pour installer les binaires Yarn et pnpm requis sur votre chemin.
Désinstallez d’abord vos binaires globaux Yarn et pnpm (laissez simplement npm). En général, vous feriez cela en exécutant la commande suivante :
npm uninstall -g Yarn pnpm# Cela devrait suffire, mais si vous avez installé Yarn sans passer par npm, cela pourrait# être plus fastidieux - par exemple, vous devrez peut-être également exécuter `brew uninstall fil`.
Installez ensuite Corepack :
npm install -g corepack
Nous reconnaissons l'ironie et la surcharge liées à l'utilisation de npm pour installer Corepack, ce qui explique au moins en partie pourquoi l'option préférée consiste à utiliser la version Corepack distribuée avec Node.js lui-même.
Voir CONTRIBUTING.md
.
Utilisez simplement vos gestionnaires de paquets comme vous le feriez habituellement. Exécutez yarn install
dans les projets Yarn, pnpm install
dans les projets pnpm et npm
dans les projets npm. Corepack interceptera ces appels, et selon la situation :
Si le projet local est configuré pour le gestionnaire de packages que vous utilisez , Corepack téléchargera et mettra en cache la dernière version compatible.
Si le projet local est configuré pour un autre gestionnaire de packages , Corepack vous demandera d'exécuter à nouveau la commande en utilisant le bon gestionnaire de packages, évitant ainsi la corruption de vos artefacts d'installation.
Si le projet local n'est configuré pour aucun gestionnaire de packages , Corepack supposera que vous savez ce que vous faites et utilisera la version du gestionnaire de packages qui a été épinglée comme "bonne version connue". Consultez la section correspondante pour plus de détails.
Définissez le gestionnaire de votre package avec le champ packageManager
dans package.json
:
{ "packageManager": "[email protected]+sha224.953c8233f7a92884eee2de69a1b92d1f2ec1655e66d08071ba9a02fa"}
Ici, yarn
est le nom du gestionnaire de packages, spécifié dans la version 3.2.3
, accompagné du hachage SHA-224 de cette version pour validation. packageManager@xyz
est requis. Le hachage est facultatif mais fortement recommandé comme pratique de sécurité. Les valeurs autorisées pour le gestionnaire de packages sont yarn
, npm
et pnpm
.
Vous pouvez également fournir une URL vers un fichier .js
(qui sera interprété comme un module CommonJS) ou un fichier .tgz
(qui sera interprété comme un package, et le champ "bin"
du package.json
sera utilisé pour déterminer quel fichier utiliser dans l'archive).
{ "packageManager": "yarn@https://registry.npmjs.org/@yarnpkg/cli-dist/-/cli-dist-3.2.3.tgz#sha224.16a0797d1710d1fb7ec40ab5c3801b68370a612a9b66ba117ad9924b"}
Lors de l'exécution de Corepack dans des projets qui ne répertorient pas de gestionnaire de packages pris en charge, il utilisera par défaut un ensemble de bonnes versions connues.
S'il n'existe aucune bonne version connue pour le gestionnaire de packages demandé, Corepack recherche dans le registre npm la dernière version disponible et la met en cache pour une utilisation ultérieure.
Les bonnes versions connues peuvent être mises à jour à l'échelle du système à l'aide corepack install -g
. Lorsque Corepack télécharge une nouvelle version d'un gestionnaire de packages donné sur la même ligne principale que la bonne version connue, il la met automatiquement à jour par défaut.
Les commandes utilitaires détaillées dans la section suivante.
Soit vous pouvez utiliser le réseau lors de la création de votre image de conteneur, auquel cas vous exécuterez simplement corepack pack
pour vous assurer que votre image inclut la dernière bonne version connue pour le gestionnaire de packages spécifié.
Ou vous publiez votre projet sur un système où le réseau n'est pas disponible, auquel cas vous générerez de manière préventive une archive de gestionnaire de packages à partir de votre ordinateur local (en utilisant corepack pack -o
) avant de la stocker dans un endroit auquel votre conteneur pourra accéder. (par exemple au sein de votre référentiel). Après cela, il suffira d'exécuter corepack install -g --cache-only
pour configurer le cache.
corepack [@] [... args]
Cette méta-commande exécute le gestionnaire de packages spécifié dans le dossier local. Vous pouvez l'utiliser pour forcer l'exécution d'une installation avec une version donnée, ce qui peut être utile lors de la recherche de régressions.
Notez que ces commandes vérifient toujours si le projet local est configuré pour le gestionnaire de packages donné (c'est-à-dire que vous ne pourrez pas exécuter corepack yarn install
sur un projet où le champ packageManager
fait référence à pnpm
).
corepack cache clean
Efface le répertoire de cache local COREPACK_HOME
.
corepack cache clear
Efface le répertoire de cache local COREPACK_HOME
.
corepack enable [... name]
Option | Description |
---|---|
--install-directory | Ajoutez les cales à l'emplacement spécifié |
Cette commande détectera où Corepack est installé et créera des cales à côté pour chacun des gestionnaires de packages spécifiés (ou tous si la commande est appelée sans paramètres). Notez que les cales npm ne seront pas installées sauf demande explicite, car npm est actuellement distribué avec Node.js par d'autres moyens.
Si le système de fichiers où se trouve le binaire corepack
est en lecture seule, cette commande échouera. Une solution de contournement consiste à ajouter les binaires comme alias dans votre fichier de configuration shell (par exemple dans ~/.bash_aliases
) :
alias fil="corepack fil"alias filpkg="corepack filpkg"alias pnpm="corepack pnpm"alias pnpx="corepack pnpx"alias npm="corepack npm"alias npx="corepack npx"
Sous Windows PowerShell, vous pouvez ajouter des fonctions à l'aide de la variable automatique $PROFILE
:
echo "fonction fil { corepack fil `$args }" >> $PROFILEecho "fonction filpkg { corepack filpkg `$args }" >> $PROFILEecho "fonction pnpm { corepack pnpm `$args }" >> $PROFILEecho "fonction pnpx { corepack pnpx `$args }" >> $PROFILEecho "fonction npm { corepack npm `$args }" >> $PROFILEecho "fonction npx { corepack npx `$args }" >> $PROFILE
corepack disable [... name]
Option | Description |
---|---|
--install-directory | Retirez les cales à l'emplacement spécifié |
Cette commande détectera où Node.js est installé et en supprimera les cales.
corepack install
Téléchargez et installez le gestionnaire de packages configuré dans le projet local. Cette commande ne change pas la version globale utilisée lors de l'exécution du gestionnaire de packages depuis l'extérieur du projet (utilisez l'indicateur `-g,--global` si vous souhaitez faire cela).
corepack install <-g,--global> [... name[@]]
Installez les gestionnaires de packages sélectionnés et installez-les sur le système.
Les gestionnaires de packages ainsi installés seront configurés comme nouveaux paramètres par défaut lors de l'appel de leurs binaires respectifs en dehors des projets définissant le champ packageManager
.
corepack pack [... name[@]]
Option | Description |
---|---|
--json | Imprimer le dossier de sortie plutôt que les journaux |
-o,--output | Chemin où générer l'archive |
Téléchargez les gestionnaires de packages sélectionnés et stockez-les dans une archive tar adaptée à une utilisation avec corepack install -g
.
corepack use ]>
Une fois exécutée, cette commande récupérera la dernière version correspondant au descripteur fourni, l'attribuera au fichier package.json du projet et effectuera automatiquement une installation.
corepack up
Récupérez la dernière version disponible pour la ligne de version majeure actuelle du gestionnaire de packages utilisé dans le projet local et mettez à jour le projet pour l'utiliser.
Contrairement à corepack use
cette commande ne prend pas de nom de gestionnaire de packages ni de plage de versions, car elle sélectionnera toujours la dernière version disponible à partir de la même ligne principale. Si vous avez besoin de passer à une nouvelle majeure, utilisez un corepack use {name}@latest
call (ou simplement corepack use {name}
).
COREPACK_DEFAULT_TO_LATEST
peut être défini sur 0
afin d'indiquer à Corepack de ne pas rechercher dans le registre distant la dernière version du gestionnaire de packages sélectionné et de ne pas mettre à jour la dernière bonne version connue lorsqu'il télécharge une nouvelle version de la même ligne principale.
COREPACK_ENABLE_AUTO_PIN
peut être défini sur 0
pour empêcher Corepack de mettre à jour le champ packageManager
lorsqu'il détecte que le package local ne le répertorie pas. En général, nous vous recommandons de toujours répertorier un champ packageManager
(que vous pouvez facilement définir via corepack use [name]@[version]
), car il garantit que les installations de votre projet sont toujours déterministes.
COREPACK_ENABLE_DOWNLOAD_PROMPT
peut être défini sur 0
pour empêcher Corepack d'afficher l'URL lorsqu'il doit télécharger un logiciel, ou peut être défini sur 1
pour afficher l'URL. Par défaut, lorsque Corepack est appelé explicitement (par exemple corepack pnpm …
), il est défini sur 0
; lorsque Corepack est appelé implicitement (par exemple pnpm …
), il est défini sur 1
. Lorsque l'entrée standard est un TTY et qu'aucun environnement CI n'est détecté, Corepack demandera la saisie de l'utilisateur avant de démarrer le téléchargement.
COREPACK_ENABLE_UNSAFE_CUSTOM_URLS
peut être défini sur 1
pour permettre l'utilisation d'URL personnalisées pour charger un gestionnaire de packages connu par Corepack ( yarn
, npm
et pnpm
).
COREPACK_ENABLE_NETWORK
peut être défini sur 0
pour empêcher Corepack d'accéder au réseau (auquel cas vous serez responsable d'hydrater les versions du gestionnaire de packages qui seront requises pour les projets que vous exécuterez, en utilisant corepack install -g --cache-only
).
COREPACK_ENABLE_STRICT
peut être défini sur 0
pour empêcher Corepack de générer une erreur si le gestionnaire de packages ne correspond pas à celui défini pour le projet en cours. Cela signifie que si un utilisateur utilise le gestionnaire de packages spécifié dans le projet en cours, il utilisera la version spécifiée par le champ packageManager
du projet. Mais si l'utilisateur utilise un autre gestionnaire de packages différent de celui spécifié pour le projet en cours, il utilisera la version du gestionnaire de packages à l'échelle du système.
COREPACK_ENABLE_PROJECT_SPEC
peut être mis à 0
pour empêcher Corepack de vérifier si le gestionnaire de packages correspond à celui défini pour le projet en cours. Cela signifie qu'il utilisera toujours le gestionnaire de packages à l'échelle du système, indépendamment de ce qui est spécifié dans le champ packageManager
du projet.
COREPACK_HOME
peut être défini afin de définir où Corepack doit installer les gestionnaires de packages. Par défaut, il est défini sur %LOCALAPPDATA%nodecorepack
sous Windows et sur $HOME/.cache/node/corepack
partout ailleurs.
COREPACK_ROOT
n'a aucun impact fonctionnel sur Corepack lui-même ; il est automatiquement défini dans votre environnement par Corepack lorsqu'il est envoyé aux gestionnaires de packages sous-jacents, afin qu'ils puissent détecter sa présence (utile pour les commandes comme yarn init
).
COREPACK_NPM_REGISTRY
définit l'URL de base du registre utilisée lors de la récupération des gestionnaires de packages à partir de npm. La valeur par défaut est https://registry.npmjs.org
COREPACK_NPM_TOKEN
définit un en-tête d'autorisation de jeton Bearer lors de la connexion à un registre de type npm.
COREPACK_NPM_USERNAME
et COREPACK_NPM_PASSWORD
pour définir un en-tête d'autorisation de base lors de la connexion à un registre de type npm. Notez que les deux variables d'environnement sont obligatoires et sous forme de texte brut. Si vous souhaitez envoyer un mot de passe vide, définissez explicitement COREPACK_NPM_PASSWORD
sur une chaîne vide.
HTTP_PROXY
, HTTPS_PROXY
et NO_PROXY
sont pris en charge via node-proxy-agent
.
COREPACK_INTEGRITY_KEYS
peut être défini sur une chaîne vide ou 0
pour demander à Corepack d'ignorer les contrôles d'intégrité, ou sur une chaîne JSON contenant des clés personnalisées.
Il existe une grande variété de problèmes de réseau qui peuvent survenir lors de l'exécution de commandes corepack
. Choses à vérifier :
Assurez-vous que votre connexion réseau est active.
Assurez-vous que l'hôte de votre demande peut être résolu par votre DNS ; essayez d'utiliser curl [URL]
(ipv4) et curl -6 [URL]
(ipv6) depuis votre shell.
Vérifiez vos paramètres de proxy (voir Variables d'environnement).
Voir CONTRIBUTING.md
.
Voir LICENSE.md
.