npm ci gibt unter Windows Fehler mit Winkel 8 und Knoten 12 aus: Node-Gyp-Neuerstellung

12

Mein Setup:

  • Windows 10
  • NVM 1.1.7 für Windows
  • Knoten 12.14.1 mit npm 6.13.4
  • Winkel 8.2.14 mit @ eckig / cli 8.3.22

Ich versuche nur, die Standard-Winkelvorlage auszuführen:

> 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

Der letzte Befehl führt zu vielen Fehlern in der Ausgabe (schlägt jedoch nicht fehl):

> 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!

Alle Fehler werden im Zusammenhang mit fsevents, node-gypund Python ausführbare Datei nicht gefunden werden. Das stimmt, ich habe kein Python installiert, aber es ist keine Voraussetzung für Winkel.

Der Befehl wird tatsächlich mit einem 0-Code beendet (was auf Erfolg hinweist - ng build --prodfunktioniert außerdem danach!), Aber es gibt sicherlich viele Fehler in der Ausgabe.

Wenn Sie den node_modulesOrdner manuell löschen und npm installstattdessen npm ciausführen, wird eine viel kürzere und fehlerfreie Ausgabe erstellt. Außerdem wird die package-lock.jsonDatei nicht geändert , was darauf hinweist, dass dieselben Versionen der Abhängigkeiten installiert sind.

Was ist los? Warum so viele Fehler bei der Verwendung, npm ciaber keine bei der Verwendung npm install?

Maxime Rossini
quelle

Antworten:

23

Es scheint, dass der Fehler mit diesem Problem und diesem Problem zusammenhängt .

Angular hängt indirekt von fsevents1.2.11 ab, das unter Windows nicht kompiliert werden soll (es handelt sich um ein Darwin-OS-Modul). npm ciist fehlerhaft und ignoriert das osFeld im Modul package.json, daher wird versucht, das Modul trotzdem zu kompilieren, was unter Windows fehlschlägt.

Der Fehler trat in früheren Winkelversionen nicht auf, da fsevents1.2.9 Binärdateien direkt von AWS herunterlud, anstatt sie zu kompilieren. Aufgrund eines Zugriffsverlusts der Entwickler auf den AWS-Bucket, der dazu führte, dass das Modul nicht auf Knoten 13 installiert werden konnte, wurde der Patch 1.2.11 veröffentlicht, mit dem Benutzer von Knoten 13 das Paket installieren können.

Bis es npm cirepariert und / oder fseventsim Winkel auf 2.x aktualisiert wird, sind die Problemumgehungen unter Windows entweder:

  • Ignorieren Sie einfach den Fehler. npm ciBeendet mit Code 0, da die Abhängigkeit optional ist, sodass Ihr Bereitstellungsskript nicht blockiert werden sollte (verlangsamen Sie es nur ein wenig und machen Sie es ausführlicher). Die am wenigsten schlechte Option meiner Meinung nach ...
  • Verwenden Sie npm installstattdessen npm ci, um das osFeld der fseventsAbhängigkeitsdatei korrekt zu verarbeiten . Dies aktualisiert jedoch möglicherweise Ihre Abhängigkeiten, sodass es für CI-Skripte nicht wirklich geeignet ist, da es versionierte Dateien ändern kann und keine wiederholbare Ausgabe erzeugt.
  • Sperren Sie die fseventsModulversion in Ihrer Abhängigkeitsdatei auf 1.2.9 anstelle von 1.2.11, damit npm cidie Binärdateien heruntergeladen werden, anstatt sie zu kompilieren. Dies funktioniert bei Verwendung von Knoten 13 nicht, da für diese Version des Knotens keine Binärdateien heruntergeladen werden müssen. Außerdem konnte ich nicht finden, wie man die package.jsonDatei aktualisieren sollte, um dies zu tun ( dies funktionierte bei mir nicht).
  • Verwenden Sie npm ci --no-optional. Leider funktioniert das nicht, weil noch andere Fehler in npm ci.
Maxime Rossini
quelle
2
Fantastische Detektivarbeit; sehr schmerzhaft in den letzten Monaten.
Maximilian Burszley
1
Danke dafür! Dieses Problem besteht immer noch mit Winkel 9, wenn sich jemand wundert.
ForestG
Das
Zurückrollen