npm ci xuất ra lỗi với góc 8 và nút 12 trên Windows: xây dựng lại nút-gyp


12

Thiết lập của tôi:

  • Windows 10
  • NVM 1.1.7 cho Windows
  • nút 12,14.1 với npm 6.13.4
  • Góc 8.2,14 với @ góc / cli 8.3,22

Chỉ cần cố gắng chạy mẫu góc mặc định:

> 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ệnh cuối cùng dẫn đến rất nhiều lỗi trong đầu ra (nhưng không thất bại lệnh):

> 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ất cả các lỗi có liên quan đến fsevents, node-gypvà python thực thi không được tìm thấy. Đúng vậy, tôi không cài đặt python, nhưng nó không phải là điều kiện tiên quyết cho góc cạnh.

Lệnh thực sự thoát với mã 0 (biểu thị thành công - bên cạnh đó, ng build --prodhoạt động sau đó!) Nhưng chắc chắn có rất nhiều lỗi trong đầu ra.

Xóa node_modulesthư mục bằng tay và chạy npm installthay vì npm citạo ra một đầu ra ngắn hơn rất nhiều và không có bất kỳ lỗi nào. Ngoài ra, nó không sửa đổi package-lock.jsontệp, điều này chỉ ra rằng các phiên bản phụ thuộc tương tự đã được cài đặt.

Chuyện gì đang xảy ra vậy? Tại sao rất nhiều lỗi khi sử dụng npm cinhưng không có lỗi khi sử dụng npm install?

Câu trả lời:


23

Có vẻ như lỗi có liên quan đến vấn đề nàyvấn đề này .

Angular gián tiếp phụ thuộc vào fsevents1.2.11, không được cho là được biên dịch trên Windows (đây là mô-đun liên quan đến hệ điều hành darwin). npm cibị lỗi và bỏ qua ostrường trong mô-đun package.json, vì vậy nó cố gắng biên dịch mô-đun, dù không thành công trên Windows.

Lỗi không xảy ra trong các phiên bản góc trước vì fsevents1.2.9 đã trực tiếp tải xuống các tệp nhị phân từ AWS thay vì biên dịch chúng. Nhưng do mất quyền truy cập từ các nhà phát triển vào nhóm AWS, dẫn đến việc không thể cài đặt mô-đun trên nút 13, họ đã phát hành bản vá 1.2.11 để cho phép người dùng nút 13 cài đặt gói.

Cho đến khi npm ciđược sửa lỗi và / hoặc fseventsđược cập nhật lên 2.x ở góc, các cách giải quyết trên Windows là:

  • Chỉ cần bỏ qua lỗi. npm cithoát mã wit 0 vì phụ thuộc là tùy chọn, vì vậy nó không nên chặn tập lệnh triển khai của bạn (chỉ cần làm chậm nó một chút và làm cho nó dài dòng hơn). Theo tôi, lựa chọn ít tệ nhất ...
  • Sử dụng npm installthay vì npm ci, sẽ xử lý chính xác ostrường của fseventstệp phụ thuộc. Nhưng điều này sẽ có khả năng cập nhật các phụ thuộc của bạn, vì vậy nó không thực sự phù hợp với tập lệnh CI, vì nó có thể thay đổi các tệp được phiên bản và không tạo ra đầu ra lặp lại.
  • Khóa fseventsphiên bản mô-đun thành 1.2.9 thay vì 1.2.11 trong tệp phụ thuộc của bạn, để npm citải xuống các tệp nhị phân thay vì biên dịch chúng. Điều này sẽ không hoạt động khi sử dụng nút 13, vì không có tệp nhị phân nào để tải xuống cho phiên bản nút này. Ngoài ra, tôi không thể tìm thấy cách một người nên cập nhật package.jsontệp để làm điều đó ( điều này không hiệu quả với tôi).
  • Sử dụng npm ci --no-optional. Thật không may, điều này không hoạt động, vì một lỗi khác trong npm ci.

2
Công việc thám tử tuyệt vời; rất đau đớn trong nhiều tháng qua.
Maximilian Burszley

1
cảm ơn vì điều này! Vấn đề này vẫn tồn tại với góc 9, nếu có ai thắc mắc.
ForestG

Quay trở lại Node 10.x làm việc cho tôi
ps2goat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.