npm ci genera errori con 8 angolari e nodo 12 su Windows: ricostruzione di node-gyp


12

La mia configurazione:

  • Windows 10
  • NVM 1.1.7 per Windows
  • nodo 12.14.1 con npm 6.13.4
  • Angolare 8.2.14 con @ angular / cli 8.3.22

Sto solo cercando di eseguire il modello angolare predefinito:

> npm install -g @angular/cli # this installed the angular version mentioned above
> ng new test # Chose default options for the project
> cd test
> npm ci # lots of error messages

L'ultimo comando provoca molti errori nell'output (ma non fallisce il comando):

> fsevents@1.2.11 install C:\test\node_modules\@angular\compiler-cli\node_modules\fsevents
> node-gyp rebuild


C:\test\node_modules\@angular\compiler-cli\node_modules\fsevents>if not defined npm_config_node_gyp (node "C:\Users\foo\AppData\Roaming\nvm\v12.14.1\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  else (node "C:\Users\foo\AppData\Roaming\nvm\v12.14.1\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" rebuild )
gyp ERR! find Python
gyp ERR! find Python Python is not set from command line or npm configuration
gyp ERR! find Python Python is not set from environment variable PYTHON
gyp ERR! find Python checking if "python" can be used
gyp ERR! find Python - "python" is not in PATH or produced an error
gyp ERR! find Python checking if "python2" can be used
gyp ERR! find Python - "python2" is not in PATH or produced an error
gyp ERR! find Python checking if "python3" can be used
gyp ERR! find Python - "python3" is not in PATH or produced an error
gyp ERR! find Python checking if the py launcher can be used to find Python 2
gyp ERR! find Python - "py.exe" is not in PATH or produced an error
gyp ERR! find Python checking if Python is C:\Python27\python.exe
gyp ERR! find Python - "C:\Python27\python.exe" could not be run
gyp ERR! find Python checking if Python is C:\Python37\python.exe
gyp ERR! find Python - "C:\Python37\python.exe" could not be run
gyp ERR! find Python
gyp ERR! find Python **********************************************************
gyp ERR! find Python You need to install the latest version of Python.
gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
gyp ERR! find Python you can try one of the following options:
gyp ERR! find Python - Use the switch --python="C:\Path\To\python.exe"
gyp ERR! find Python   (accepted by both node-gyp and npm)
gyp ERR! find Python - Set the environment variable PYTHON
gyp ERR! find Python - Set the npm configuration variable python:
gyp ERR! find Python   npm config set python "C:\Path\To\python.exe"
gyp ERR! find Python For more information consult the documentation at:
gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
gyp ERR! find Python **********************************************************
gyp ERR! find Python
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Python installation to use
gyp ERR! stack     at PythonFinder.fail (C:\Users\foo\AppData\Roaming\nvm\v12.14.1\node_modules\npm\node_modules\node-gyp\lib\find-python.js:307:47)
gyp ERR! stack     at PythonFinder.runChecks (C:\Users\foo\AppData\Roaming\nvm\v12.14.1\node_modules\npm\node_modules\node-gyp\lib\find-python.js:136:21)
gyp ERR! stack     at PythonFinder.<anonymous> (C:\Users\foo\AppData\Roaming\nvm\v12.14.1\node_modules\npm\node_modules\node-gyp\lib\find-python.js:225:16)
gyp ERR! stack     at PythonFinder.execFileCallback (C:\Users\foo\AppData\Roaming\nvm\v12.14.1\node_modules\npm\node_modules\node-gyp\lib\find-python.js:271:16)
gyp ERR! stack     at exithandler (child_process.js:302:5)
gyp ERR! stack     at ChildProcess.errorhandler (child_process.js:314:5)
gyp ERR! stack     at ChildProcess.emit (events.js:223:5)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:270:12)
gyp ERR! stack     at onErrorNT (internal/child_process.js:456:16)
gyp ERR! stack     at processTicksAndRejections (internal/process/task_queues.js:81:21)
gyp ERR! System Windows_NT 10.0.18362
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\foo\\AppData\\Roaming\\nvm\\v12.14.1\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\foo\repos\POC\angular\test1\node_modules\@angular\compiler-cli\node_modules\fsevents
gyp ERR! node -v v12.14.1
gyp ERR! node-gyp -v v5.0.5
gyp ERR!

Tutti gli errori sono legati a fsevents, node-gype Python eseguibile non viene trovato. Esatto, non ho installato Python, ma non è un prerequisito per angolare.

Il comando in realtà termina con un codice 0 (che indica il successo - inoltre, ng build --prodfunziona dopo quello!) Ma sicuramente ci sono molti errori nell'output.

L'eliminazione node_modulesmanuale della cartella e l'esecuzione npm installanziché npm ciproduce un output che è molto più breve e senza errori. Inoltre, non modifica il package-lock.jsonfile, il che indica che sono installate le stesse versioni delle dipendenze.

Cosa sta succedendo? Perché tanti errori durante l'utilizzo npm cima nessuno durante l'utilizzo npm install?

Risposte:


23

Sembra che il bug sia correlato a questo problema e questo problema .

L'angolazione dipende indirettamente da fsevents1.2.11, che non dovrebbe essere compilato su Windows (è un modulo relativo al sistema operativo darwin). npm civiene intercettato e ignora il oscampo nel modulo package.json, quindi tenta comunque di compilare il modulo, il che non riesce su Windows.

L'errore non si è verificato nelle precedenti versioni angolari perché fsevents1.2.9 stava scaricando direttamente i binari da AWS invece di compilarli. Ma a causa della perdita di accesso dagli sviluppatori al bucket AWS, che ha comportato l'impossibilità di installare il modulo sul nodo 13, hanno rilasciato la patch 1.2.11 per consentire agli utenti del nodo 13 di installare il pacchetto.

Fino a quando non npm civiene risolto e / o fseventsaggiornato a 2.x in angolare, le soluzioni alternative su Windows sono:

  • Ignora l'errore. npm ciesce con il codice 0 perché la dipendenza è facoltativa, quindi non dovrebbe bloccare lo script di distribuzione (basta rallentarlo un po 'e renderlo più dettagliato). L'opzione meno negativa secondo me ...
  • Utilizzare npm installinvece di npm ci, che elaborerà correttamente il oscampo del fseventsfile delle dipendenze. Ma questo aggiornerà potenzialmente le tue dipendenze, quindi non è davvero adatto per gli script CI, poiché può cambiare i file con versione e non produce un output ripetibile.
  • Blocca la fseventsversione del modulo su 1.2.9 anziché 1.2.11 nel file delle dipendenze, in modo da npm ciscaricare i file binari invece di compilarli. Questo non funzionerà quando si utilizza il nodo 13, poiché non ci sono file binari da scaricare per questa versione del nodo. Inoltre, non sono riuscito a trovare come si dovrebbe aggiornare il package.jsonfile per farlo ( questo non ha funzionato per me).
  • Usa npm ci --no-optional. Purtroppo questo non funziona, a causa dell'ennesimo bug in npm ci.

2
Fantastico lavoro investigativo; molto doloroso negli ultimi mesi.
Maximilian Burszley,

1
grazie per questo! Questo problema esiste ancora con Angular 9, se qualcuno si chiede.
ForestG

Il rollback al Nodo 10.x ha funzionato per me
ps2goat il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.