npm ci виводить помилки з кутовим 8 та вузлом 12 у Windows: node-gyp rebuild


12

Моя установка:

  • Windows 10
  • NVM 1.1.7 для Windows
  • вузол 12.14.1 з npm 6.13.4
  • Кутовий 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а виконуваний файл python не знайдений. Правильно, у мене не встановлено python, але це не обов’язкова умова для кутового.

Команда насправді закінчується кодом 0 (що вказує на успіх - до того ж, ng build --prodпрацює після цього!), Але, безумовно, є багато помилок у виході.

Видалення node_modulesпапки вручну та запуск npm installзамість цього npm ciдає результат, який набагато коротший та без помилок. Крім того, він не змінює package-lock.jsonфайл, що вказує на те, що встановлені однакові версії залежностей.

Що відбувається? Чому так багато помилок при використанні, npm ciале жодних при використанні npm install?

Відповіді:


23

Здається, помилка пов'язана з цією проблемою та цією проблемою .

Кутова опосередковано залежить від fsevents1.2.11, який не слід компілювати в Windows (це модуль, пов'язаний з дарвіном). 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замість npm ci, який буде правильно обробляти osполе fseventsзалежностей файлу. Але це потенційно оновить ваші залежності, тому воно не дуже підходить для сценаріїв CI, оскільки може змінювати файли, що переглядаються, і не дає повторюваних результатів.
  • Заблокуйте fseventsверсію модуля на 1.2.9 замість 1.2.11 у вашому файлі залежностей, щоб npm ciзавантажувати двійкові файли, а не компілювати їх. Це не буде працювати при використанні вузла 13, оскільки для цієї версії вузла немає бінарних файлів для завантаження. Крім того, я не міг знайти, як слід оновити package.jsonфайл, щоб це зробити ( це не працювало для мене).
  • Використовуйте npm ci --no-optional. На жаль , це не працює, з - за ще однієї помилки в npm ci.

2
Фантастична детективна робота; дуже болісно останні кілька місяців.
Максиміліан Бурслі

1
дякую за це! Ця проблема все ще існує з кутовим 9, якщо хтось цікавиться.
ForestG

Відкат до Вузла 10.x працював для мене
ps2goat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.