Passa al contenuto principale
Version: Prossimo

package.json

Il file manifesto di un pacchetto. Contiene tutti i metadati del pacchetto, comprese le dipendenze, il titolo, l'autore, eccetera. Questo è uno standard mantenuto in tutti i principali gestori di pacchetti Node.JS, incluso pnpm.

Campi#

engines#

Puoi specificare la versione di Node e pnpm su cui funziona il tuo software:

{    "engines": {        "node": ">=10",        "pnpm": ">=3"    }}

Durante lo sviluppo locale, pnpm fallirà sempre con un messaggio di errore se la sua versione non corrisponde a quella specificata nel campo engine.

A meno che l'utente non abbia impostato il flag di configurazione engine-strict (vedi .npmrc), questo campo è solo consultivo e produrrà avvisi solo quando il tuo pacchetto è installato come dipendenza.

peerDependenciesMeta#

Questo campo elenca alcune informazioni aggiuntive relative alle dipendenze elencate nel campo peerDependencies.

peerDependenciesMeta.*.optional#

Se questo è impostato su true, la dipendenza peer selezionata verrà contrassegnata come opzionale dal gestore pacchetti. Pertanto, il consumatore che lo omette non sarà più segnalato come errore.

Ad esempio:

{    "peerDependencies": {        "foo": "1"    },    "peerDependenciesMeta": {        "foo": {            "optional": true        },        "bar": {            "optional": true        }    }}

Si noti che anche se bar non è stato specificato in peerDependencies, è contrassegnato come facoltativo. pnpm quindi presumerà che qualsiasi versione di bar vada bene. Tuttavia, pippo è facoltativo, ma solo per la specifica della versione richiesta.

publishConfig#

Aggiunto nella versione: v3.4.0

È possibile sovrascrivere alcuni campi nel manifesto prima che il pacchetto sia impacchettato. I seguenti campi possono essere sovrascritti: bin, main, exports, types o typingx, module, browser, esnext, es2015, unpkg e umd:main.

Per sovrascrivere un campo, aggiungi la versione pubblica del campo in publishConfig.

Ad esempio, il seguente package.json:

{    "name": "foo",    "version": "1.0.0",    "main": "src/index.ts",    "publishConfig": {        "main": "lib/index.js",        "typings": "lib/index.d.ts"    }}

Verrà pubblicato come:

{    "name": "foo",    "version": "1.0.0",    "main": "lib/index.js",    "typings": "lib/index.d.ts"}

publishConfig.executableFiles#

Aggiunto nella versione: v6.11.5

Per impostazione predefinita, per motivi di portabilità, nessun file tranne quelli elencati nel campo bin verrà contrassegnato come eseguibile nell'archivio del pacchetto risultante. Il campo executableFiles consente di dichiarare campi aggiuntivi che devono avere il flag dell'eseguibile (+x) impostato anche se non sono direttamente accessibili tramite il campo bin.

{  "publishConfig": {    "executableFiles": [      "./dist/shim.js",    ]  }}

publishConfig.directory#

Aggiunto nella versione: v6.7.0

Puoi anche utilizzare il campo publishConfig.directory per personalizzare la sottocartella pubblicata relativa all'attuale package.json.

Dovrebbe avere una versione modificata del pacchetto corrente nella cartella specificata (di solito utilizzando strumenti di compilazione di terze parti).

In questo esempio la cartella "dist" deve contenere un package.json

{  "name": "foo",  "version": "1.0.0",  "publishConfig": {    "directory": "dist"  }}

pnpm.overrides#

Aggiunto nella versione: v5.10.1

Questo campo consente di indicare a pnpm di sovrascrivere qualsiasi dipendenza nel grafico delle dipendenze. Questo è utile per imporre a tutti i tuoi pacchetti di utilizzare una singola versione di una dipendenza, eseguire il backport di una correzione o sostituire una dipendenza con un fork.

Nota che il campo delle sostituzioni può essere impostato solo alla radice del progetto.

Un esempio del campo "pnpm"."overrides":

{  "pnpm": {    "overrides": {      "foo": "^1.0.0",      "[email protected]^2.1.0": "3.0.0",      "[email protected]>zoo": "2"    }  }}

Puoi specificare il pacchetto a cui appartiene la dipendenza sovrascritta separando il selettore del pacchetto dal selettore delle dipendenze con un ">", per esempio [email protected]>zoo sovrascriverà solo la dipendenza zoo di [email protected], non per altre dipendenze.

pnpm.packageExtensions#

Aggiunto nella versione: v6.9.0

I campi packageExtensions offrono un modo per estendere le definizioni dei pacchetti esistenti con informazioni aggiuntive. Ad esempio, se react-redux dovrebbe avere react-dom nelle sue peerDependencies ma non ce l'ha, è possibile patchare react-redux usando packageExtensions:

{  "pnpm": {    "packageExtensions": {      "react-redux": {        "peerDependencies": {          "react-dom": "*"        }      }    }  }}

Le chiavi in packageExtensions sono nomi di pacchetti o nomi di pacchetti e intervalli di semver, quindi è possibile correggere solo alcune versioni di un pacchetto:

{  "pnpm": {    "packageExtensions": {      "[email protected]": {        "peerDependencies": {          "react-dom": "*"        }      }    }  }}

I seguenti campi possono essere estesi utilizzando packageExtensions: dependencies, optionalDependencies, peerDependencies, e peerDependenciesMeta.

Un esempio più grande:

{  "pnpm": {    "packageExtensions": {      "expr[email protected]": {        "optionalDependencies": {          "typescript": "2"        }      },      "fork-ts-checker-webpack-plugin": {        "dependencies": {          "@babel/core": "1"        },        "peerDependencies": {          "eslint": ">= 6"        },        "peerDependenciesMeta": {          "eslint": {            "optional": true          }        }      }    }  }}

pnpm.neverBuiltDependencies#

Aggiunto nella versione: v5.16.0

Questo campo consente di ignorare le build di dipendenze specifiche.

Un esempio del campo "pnpm"."neverBuiltDependencies":

{  "pnpm": {    "neverBuiltDependencies": ["fsevents", "level"]  }}