Windowsでnpm ciが角度8およびノー​​ド12でエラーを出力する:node-gyp rebuild


12

私のセットアップ:

  • ウインドウズ10
  • NVM 1.1.7 for Windows
  • ノード12.14.1とnpm 6.13.4
  • Angular 8.2.14と@ angular / cli 8.3.22

デフォルトの角度テンプレートを実行しようとしています:

> 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

最後のコマンドを実行すると、出力に多くのエラーが発生します(ただし、コマンドは失敗しません)。

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

すべてのエラーはに関連してfseventsおりnode-gyp、Python実行可能ファイルが見つかりません。そうです、私はpythonをインストールしていませんが、angularの前提条件ではありません。

コマンドは実際には0コードで終了します(成功したことを示します-さらに、ng build --prodその後に機能します)。しかし、出力には多くのエラーがあります。

node_modulesフォルダーを手動で削除し、npm install代わりに実行npm ciすると、出力ははるかに短くなり、エラーは発生しません。また、package-lock.json同じバージョンの依存関係がインストールされていることを示すファイルは変更されません。

何が起こっている?使用時にエラーが多いnpm ciのに、使用するとエラーが発生しないのはなぜnpm installですか?

回答:


23

バグはこの問題この問題に関連しているようです。

Angularはfsevents1.2.11に間接的に依存していますが、これはWindowsでコンパイルすることは想定されていません(これはdarwin-OS関連のモジュールです)。npm ciバグがありos、モジュールののフィールドを無視package.jsonするため、とにかくモジュールをコンパイルしようとしますが、Windowsでは失敗します。

fsevents1.2.9はバイナリをコンパイルする代わりにAWSから直接ダウンロードしていたため、以前の角度バージョンではエラーは発生しませんでした。しかし、開発者からAWSバケットへのアクセスが失われ、ノード13にモジュールをインストールできなくなったため、ノード13のユーザーがパッケージをインストールできるように1.2.11パッチをリリースしました。

まではnpm ci固定されますおよび/またはfsevents角度で2.xのに更新され、Windows上での回避策のいずれかです:

  • エラーを無視してください。npm ci依存関係はオプションであるため、ウィットコード0で終了します。したがって、展開スクリプトをブロックしないでください(少し遅くして、より冗長にします)。私の意見で最も悪いオプション...
  • npm install代わりに使用するとnpm ci、依存関係ファイルのosフィールドが正しく処理されfseventsます。ただし、これにより依存関係が更新される可能性があるため、バージョン付きファイルを変更する可能性があり、反復可能な出力が生成されないため、CIスクリプトにはあまり適していません。
  • fsevents依存関係ファイルでモジュールのバージョンを1.2.11ではなく1.2.9にロックしてnpm ci、コンパイルする代わりにバイナリをダウンロードするようにします。ノード13を使用している場合、このバージョンのノード用にダウンロードするバイナリがないため、これは機能しません。また、それpackage.jsonを行うためにファイルを更新する方法も見つかりませんでした(これは私にとっては機能しませんでした)。
  • を使用しnpm ci --no-optionalます。残念ながら、これは理由のため、動作しません。また別のバグの中でnpm ci

2
素晴らしい探偵の仕事; 過去数ヶ月間非常に痛い。
Maximilian Burszley

1
これありがとう!この問題は、誰かが疑問に思う場合でも、角度9でまだ存在します。
ForestG

ノード10.xへのロールバックは私のために働きました
ps2goat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.