npm ci, Windows'ta açısal 8 ve düğüm 12 ile hatalar veriyor: düğüm-gyp yeniden oluşturma


12

Kurulumum:

  • Windows 10
  • Windows için NVM 1.1.7
  • npm 6.13.4 ile düğüm 12.14.1
  • @ Açısal / cli ile açısal 8.2.14 8.3.22

Sadece varsayılan açısal şablonu çalıştırmaya çalışıyorum:

> 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

Son komut, çıktıda çok sayıda hataya neden olur (ancak komutu başarısız olmaz):

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

Tüm hatalar ile ilgili fsevents, node-gypve piton yürütülebilir bulundu varlık değildir. Doğru, yüklü python yok, ama açısal için bir ön koşul değil.

Komut aslında bir 0 koduyla çıkar (başarıyı gösterir - ng build --prodbundan sonra çalışır!) Ancak çıktıda kesinlikle çok fazla hata var.

node_modulesKlasörü manuel olarak silmek ve çalıştırmak npm installyerine npm ciçok daha kısa ve hatasız bir çıktı üretir. Ayrıca, package-lock.jsonbağımlılıkların aynı sürümlerinin yüklendiğini gösteren dosyayı değiştirmez .

Ne oluyor? Neden kullanırken bu kadar çok hata var npm ciama kullanırken npm installhiç yok ?

Yanıtlar:


23

Hata bu sorun ve bu sorunla ilgili görünüyor .

Açısal dolaylı fseventsolarak, Windows'ta derlenmemesi gereken 1.2.11'e bağlıdır (darwin-OS ile ilgili bir modüldür). hata npm ciayıklanır ve osmodülün içindeki alanı yoksayar package.json, bu nedenle modülü yine de derlemeye çalışır, bu da Windows'ta başarısız olur.

fsevents1.2.9 ikili dosyaları AWS'den derlemek yerine doğrudan indirdiği için önceki açısal sürümlerde hata oluşmadı . Ancak, geliştiriciden AWS kovasına erişim kaybı nedeniyle, modülü düğüm 13'e kurmanın imkansızlığına yol açan, düğüm 13 kullanıcılarının paketi yüklemesine izin vermek için 1.2.11 düzeltme ekini yayımladılar.

Kadar npm cionarılır ve / veya fseventsaçısal içinde 2.x için güncellenir, Windows üzerinde geçici çözümler ya şunlardır:

  • Sadece hatayı yok sayın. npm cibağımlılık isteğe bağlı olduğu için wit kod 0'dan çıkar, bu nedenle dağıtım komut dosyanızı engellememelidir (sadece biraz yavaşlatın ve daha ayrıntılı hale getirin). Bence en az kötü seçenek ...
  • Bağımlılık alanı dosyasını doğru şekilde işleyecek npm installyerine kullanın . Ancak bu, bağımlılıklarınızı potansiyel olarak güncelleyecektir, bu nedenle sürümlenmiş dosyaları değiştirebileceğinden ve tekrarlanabilir bir çıktı üretmediğinden CI komut dosyaları için gerçekten uygun değildir.npm ciosfsevents
  • fseventsBağımlılık dosyanızdaki modül sürümünü 1.2.11 yerine 1.2.9'a kilitleyin , böylece npm ciikili dosyaları derlemek yerine indirir. Düğümün bu sürümü için indirilecek hiçbir ikili dosya olmadığından bu, düğüm 13 kullanılırken çalışmaz. Ayrıca, bunu package.jsonyapmak için dosyayı nasıl güncellemesi gerektiğini bulamadım ( bu benim için işe yaramadı).
  • Kullanın npm ci --no-optional. Ne yazık ki bu nedeniyle, çalışmıyor henüz başka hata içinde npm ci.

2
Fantastik dedektiflik çalışması; son birkaç aydır çok acı verici.
Maximilian Burszley

1
bunun için teşekkür ederim! Merak eden biri varsa, bu problem hala açısal 9'da mevcuttur.
ForestG

Düğüm
10.x'e
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.