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]
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"
]
}
-
--runInBandevita di parallelizzare i test tra più processi -
--no-cacheaiuta a prevenire problemi di caching
Testato con Visual Studio Code v1.19.3 e Jest v22.1.4.