Passer au contenu principal
Version : 7.x

.pnpmfile.cjs

pnpm lets you hook directly into the installation process via special functions (hooks). Hooks can be declared in a file called .pnpmfile.cjs.

Par dĂ©faut, .pnpmfile.cjs doit ĂȘtre situĂ© dans le mĂȘme rĂ©pertoire que le fichier de verrouillage. Par exemple, dans un workspace avec un fichier de verrouillage partagĂ©, .pnpmfile.cjs doit ĂȘtre Ă  la racine du monorepo.

Hooks​

TL;DR​

Hook FunctionProcessusUses
hooks.readPackage(pkg, context): pkgAppelĂ© aprĂšs que pnpm ait analysĂ© le manifeste du paquet de la dĂ©pendancePermet de modifier le package.json d’une dĂ©pendance
hooks.afterAllResolved(lockfile, context): lockfileAppelé aprÚs que les dépendances aient été résolues.Permet de modifier le fichier lockfile

hooks.readPackage(pkg, context): pkg | Promise<pkg>​

Permet de modifier le package.json d’une dĂ©pendance aprĂšs l’analyse et avant la rĂ©solution. Ces mutations ne sont pas enregistrĂ©es dans le systĂšme de fichiers, cependant, elles affecteront ce qui est rĂ©solu dans le fichier lockfile et donc ce qui est installĂ©.

Notez que vous devrez supprimer le pnpm-lock.yaml si vous avez déjà résolu la dépendance que vous souhaitez modifier.

:::Astuce

Si vous avez besoin d'enregistrer les modificitions de package.json, vous devez utiliser la commande pnpm patch et patcher le fichier package.json. Cela peut ĂȘtre utile si vous souhaitez supprimer le champs bin d'une dĂ©pendance par exemple.

:::

Arguments​

  • pkg - Le manifeste du package. Soit la rĂ©ponse du registre, soit le contenu de package.json.
  • context - Objet de contexte pour l'Ă©tape. La mĂ©thode #log(msg) permet d'utiliser un journal de dĂ©bogage pour l'Ă©tape.

Utilisation​

Exemple .pnpmfile.cjs (change les dépendances d'une dépendance) :

function readPackage(pkg, context) {
// Override the manifest of foo@1.x after downloading it from the registry
if (pkg.name === 'foo' && pkg.version.startsWith('1.')) {
// Replace bar@x.x.x with bar@2.0.0
pkg.dependencies = {
...pkg.dependencies,
bar: '^2.0.0'
}
context.log('bar@1 => bar@2 in dependencies of foo')
}

// This will change any packages using baz@x.x.x to use baz@1.2.3
if (pkg.dependencies.baz) {
pkg.dependencies.baz = '1.2.3';
}

return pkg
}

module.exports = {
hooks: {
readPackage
}
}

Limitations connues​

Supprimer le champ scripts du manifeste d'une dĂ©pendance via readPackage n'empĂȘchera pas de construire la dĂ©pendance. Lors de la construction d'une dĂ©pendance, pnpm lit le package.json du package Ă  partir de l'archive du package, qui n'est pas affectĂ©e par le hook. Pour ignorer la construction d'un paquet, utilisez le champ pnpm.neverBuiltDependencies.

hooks.afterAllResolved(lockfile, context): lockfile | Promesse<lockfile>​

Vous permet de modifier la sortie du fichier de verrouillage avant qu’elle ne soit sĂ©rialisĂ©e.

Arguments​

  • lockfile - Le fichier de rĂ©solution lockfile sĂ©rialisĂ© dans pnpm-lock.yaml.
  • context - Objet de contexte pour l'Ă©tape. La mĂ©thode #log(msg) permet d'utiliser un journal de dĂ©bogage pour l'Ă©tape.

Exemple d'utilisation​

.pnpmfile.cjs
function afterAllResolved(lockfile, context) {
// ...
return lockfile
}

module.exports = {
hooks: {
afterAllResolved
}
}

Limitations connues​

Il n'y en a pas - tout ce qui peut ĂȘtre fait avec le fichier de verrouillage peut ĂȘtre via cette fonction, et vous pouvez mĂȘme Ă©tendre les fonctionnalitĂ©s du fichier de verrouillage.

Configuration associĂ©e​

ignore-pnpmfile​

  • Default: false
  • Type: Boolean

.pnpmfile.cjs sera ignoré. Utile avec --ignore-scripts lorsque vous voulez vous assurer qu'aucun script n'est exécuté pendant l'installation.

pnpmfile​

  • Par dĂ©faut : .pnpmfile.cjs
  • Type: path
  • Exemple : .pnpm/.pnpmfile.cjs

L'emplacement du pnpmfile local.

global-pnpmfile​

  • Default: null
  • Type: path
  • Exemple : ~/.pnpm/global_pnpmfile.cjs

L'emplacement du pnpmfile global. Un fichier pnpm global est utilisé par tous les projets lors de l'installation.

:::Remarque

Il est recommandé d'utiliser les fichiers pnpmfiles locaux. N'utilisez un pnpmfile global que si vous utilisez pnpm sur des projets qui n'utilisent pas pnpm comme gestionnaire de packages principal.

:::