[node.js] Windows에서 npm ci가 각도 8 및 노드 12와 함께 오류를 출력합니다. node-gyp rebuild

내 설정 :

  • 윈도우 10
  • Windows 용 NVM 1.1.7
  • npm 6.13.4의 노드 12.14.1
  • @ angular / cli를 사용한 Angular 8.2.14 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그리고 파이썬 실행 파일이 발견되지 않습니다. 맞습니다. 파이썬이 설치되어 있지는 않지만 각도의 전제 조건은 아닙니다.

실제로 명령은 0 코드로 종료 ng build --prod되지만 (성공을 나타냅니다- 그 이후에도 작동합니다!) 출력에는 많은 오류가 있습니다.

node_modules폴더를 수동으로 삭제하고 npm install대신 실행 npm ci하면 출력이 훨씬 짧아지고 오류는 없습니다. 또한 package-lock.json파일을 수정하지 않으므로 동일한 버전의 종속성이 설치되어 있음을 나타냅니다.

무슨 일이야? 왜 이렇게 사용할 때 오류를 많이 npm ci사용하는 경우 그러나 아무도 npm install?



답변

버그 가이 문제이 문제 와 관련이있는 것 같습니다 .

각도는 간접적으로 fsevents1.2.11에 의존하며 Windows에서는 컴파일되지 않아야합니다 (darwin-OS 관련 모듈입니다). npm ci버그 os가 발생하여 모듈의 필드를 무시 package.json하므로 Windows에서 실패하는 어쨌든 모듈을 컴파일하려고 시도합니다.

fsevents1.2.9가 바이너리를 컴파일하는 대신 AWS에서 직접 다운로드 하기 때문에 이전 각도 버전에서는 오류가 발생하지 않았습니다 . 그러나 개발자가 AWS 버킷에 액세스 할 수 없어 노드 13에 모듈을 설치할 수 없게되어 1.2.11 패치를 릴리스하여 노드 13 사용자가 패키지를 설치할 수있게했습니다.

까지 npm ci고정됩니다 및 / 또는 fsevents각도에서 2.X로 업데이트됩니다, Windows의 해결 방법 중 하나입니다 :

  • 오류를 무시하십시오. npm ci종속성은 선택 사항이므로 코드 0으로 종료되므로 배포 스크립트를 차단해서는 안됩니다 (비트 속도를 늦추고 더 자세하게 만듭니다). 내 생각에 가장 나쁜 옵션은 …
  • 종속성 파일 필드를 올바르게 처리하는 npm install대신 대신 사용하십시오 . 그러나 이것은 잠재적으로 종속성을 업데이트하므로 버전이 지정된 파일을 변경할 수 있고 반복 가능한 출력을 생성하지 않으므로 CI 스크립트에는 적합하지 않습니다.npm ciosfsevents
  • 이진 파일을 컴파일하는 대신 다운로드 fsevents하도록 종속성 파일에서 모듈 버전을 1.2.11 대신 1.2.9로 잠급니다 npm ci. 이 버전의 노드에 다운로드 할 바이너리가 없기 때문에 노드 13을 사용할 때는 작동하지 않습니다. 또한 package.json파일을 업데이트 해야하는 방법을 찾을 수 없었습니다 ( 이 기능 은 작동하지 않았습니다).
  • 사용하십시오 npm ci --no-optional. 불행히도의 다른 버그 로 인해 작동하지 않습니다 npm ci.

답변