Vai al contenuto principale
Traduzione Beta Non Ufficiale

Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →

Risoluzione dei problemi

Questo documento contiene soluzioni per alcuni problemi riscontrati in passato dagli utenti durante l'utilizzo di Lerna.

Comando Import

Problemi di buffer durante l'importazione

Quando si tenta di importare un repository con molti commit, può capitare di ricevere errori come:

DeprecationWarning: Unhandled promise rejections are deprecated

o

Error: spawnSync /bin/sh ENOBUFS during ImportCommand.execute

Soluzione:

Esegui lerna import con il flag --max-buffer specificando un numero sufficientemente grande (in byte). Al momento della stesura di questa documentazione, il valore predefinito sottostante è 10MB, quindi tieni presente questo limite.

Impossibilità di importare commit di merge con conflitti

Quando si tenta di importare un repository contenente commit di merge che hanno richiesto risoluzioni di conflitti, il comando d'importazione fallisce con un errore:

lerna ERR! execute Error: Command failed: git am -3
lerna ERR! execute error: Failed to merge in the changes.
lerna ERR! execute CONFLICT (content): Merge conflict in [file]

Soluzione

Esegui lerna import con il flag --flatten per importare la cronologia in modalità "piatta", dove ogni commit di merge viene rappresentato come singola modifica introdotta dal merge.

Fallimento in presenza di modifiche non committate

Riceverai l'errore fatal: ambiguous argument 'HEAD': quando il progetto corrente contiene modifiche non committate.

Soluzione

Assicurati di committare tutte le modifiche presenti nel tuo progetto Lerna prima di importare pacchetti con lerna import.

Comando Publish

Publish non rileva tag creati manualmente in modalità fixed con Github/Github Enterprise

Github e Github Enterprise utilizzano tag Git lightweight quando una release viene creata tramite l'interfaccia web, mentre Lerna utilizza tag annotati.

Ciò può causare un problema in cui Lerna ignorerà le release pubblicate manualmente e taggate tramite l'interfaccia web di Github.

Ad esempio, se la cronologia di pubblicazione fosse la seguente:

  • v1.1.0 pubblicata e taggata con lerna publish

  • v1.2.0 pubblicata manualmente e taggata con l'interfaccia web di Github

  • v1.2.1 pubblicata manualmente e taggata con l'interfaccia web di Github

L'esecuzione di lerna publish rileverebbe v1.1.0 invece di v1.2.1 come ultimo tag rilasciato.

Le implicazioni dipendono dall'utilizzo di lerna publish:

  • Il prompt di pubblicazione userebbe v1.1.0 come base per suggerimenti major/minor/patch.

  • Utilizzando il flag --conventional-commits:

    • Suggerirebbe un incremento semver basato su tutti i commit da v1.1.0 (inclusi quelli di v1.2.0, v1.2.1 ecc.)
    • I file CHANGELOG.md generati ripeterebbero tutti i commit già rilasciati in v1.2.0, v1.2.1 ecc.

Soluzione:

Se possibile, utilizza lerna publish invece delle release manuali.

Per nuove release manuali, usa git tag -a -m <version> invece dell'interfaccia web di Github.

Per tag lightweight esistenti, è possibile convertirli in tag annotati con un comando simile a:

GIT_AUTHOR_NAME="$(git show $1 --format=%aN -s)"
GIT_AUTHOR_EMAIL="$(git show $1 --format=%aE -s)"
GIT_AUTHOR_DATE="$(git show $1 --format=%aD -s)"
GIT_COMMITTER_NAME="$(git show $1 --format=%cN -s)"
GIT_COMMITTER_EMAIL="$(git show $1 --format=%cE -s)"
GIT_COMMITTER_DATE="$(git show $1 --format=%cD -s)"

git tag -a -m $1 -f $1 $1

git push --tags --force

Consulta questo post su Stackoverflow per maggiori dettagli

Pubblicazione su registro npm privato (Artifactory, npm Enterprise, ecc.)

Se lerna publish fallisce, verifica di avere quanto segue nel tuo package.json:

	"publishConfig": {
"registry": "https://[registry-url]"
}

Potrebbe anche essere necessario aggiungere quanto segue al file .npmrc dei singoli pacchetti:

registry = https://[registry-url]
informazioni

Lerna utilizza sempre lo strumento npm per pubblicare i pacchetti, indipendentemente dal npmClient impostato nel file lerna.json. Ciò significa che qualsiasi configurazione di yarn o pnpm non verrà rilevata. Per garantire una pubblicazione corretta su un registro privato, assicurati che npm sia configurato correttamente con variabili d'ambiente o un file .npmrc.

Debugging con Jest / Visual Studio Code

È possibile eseguire il debug dei test Jest in un pacchetto gestito da Lerna utilizzando Visual Studio Code. Il debug con punti di interruzione funziona con la configurazione di lancio di vscode riportata di seguito nel file <root>/.vscode/launch.json del monorepo. Questo esempio avvia Jest per un singolo pacchetto my-package situato nel monorepo.

{
"name": "Jest my-package",
"type": "node",
"request": "launch",
"address": "localhost",
"protocol": "inspector",
"runtimeExecutable": "${workspaceRoot}/node_modules/.bin/lerna",
"runtimeArgs": [
"exec",
"--scope",
"my-package",
"--",
"node"
],
"args": [
"${workspaceRoot}/node_modules/jest/bin/jest.js",
"--runInBand",
"--no-cache",
"packages/my-package"
]
}
  • --runInBand evita di parallelizzare i test tra più processi

  • --no-cache aiuta a prevenire problemi di caching

Testato con Visual Studio Code v1.19.3 e Jest v22.1.4.