Движок "узел" несовместим с этим модулем
Я получаю ниже ошибки пряжи при развертывании на AWS
error fs-extra@7.0.1: The engine "node" is incompatible with this module. Expected version ">=6 <7 || >=8". Got "7.0.0"
Любая идея, как это будет решено?
Будет ли это работать, если я укажу engine в package.json
{
"engines" : {
"node" : ">=8.0.0"
}
}
26 ответов
Вы можете попробовать игнорировать двигатели:
$ yarn install --ignore-engines
ИЛИ
$ yarn global add <your app> --ignore-engines
Вы можете увидеть все, что можно игнорировать, запустив:
$ yarn help | grep -- --ignore
--ignore-scripts don't run lifecycle scripts
--ignore-platform ignore platform checks
--ignore-engines ignore engines check
--ignore-optional ignore optional dependencies
Вам необходимо обновить вашу версию node.
Я столкнулся с этой же проблемой.
Если вы использовали Homebrew run:
brew update -This updates Homebrew to latest version
brew upgrade node
Если вы используете nvm run:
nvm current node -v Checks your current version
nvm install <version> Example: nvm install 12.14.1
Для вышеуказанного шага перейдите на https://nodejs.org/en/download/
Выберите версию, которая удовлетворяет условиям вашей ошибки, последняя версия должна работать.
Более подробное руководство: https://flaviocopes.com/how-to-update-node/
Исправление, которое является взломом, может быть
yarn config set ignore-engines true
Однако, если вам нужно постоянное решение, это:
- удалить node_modules/, package-lock.json и yarn.lock
- снова запустите yarn install или npm i.
Добавлять
--ignore-engines
к суффиксу при установке пакета следующим образом:
yarn add <package_name> --ignore-engines
Я НЕ рекомендую использовать это:
% yarn install --ignore-engines
Он избегает проблемы, а не решает ее.
Возможным решением было бы обновить ваш узел до
version > 8.0
.
% brew upgrade node
Или вы можете попробовать установить несколько версий узла с помощью nodenv, если они вам понадобятся для других проектов.
% brew install nodenv
% nodenv init
# Load nodenv automatically by appending
# the following to ~/.zshrc:
eval "$(nodenv init -)"
% nodenv install 6.0.0 //or some other version
Во многих ответах говорится, что нужно установить флаги, чтобы игнорировать ошибку версии.
Лучший вариант — использовать это как напоминание об обновлении версии вашего узла до чего-то более свежего и поддерживаемого пакетом, который вы хотите установить.
nvm install 16.16.0 # download & install locally on your system
nvm use 16.16.0 # update current project's .nvmrc file
Обратите внимание, что вторая команда обновит ваш локальный.nvmrc
который указывает версию узла для каждого проекта.
Экосистема узлов меняется быстро, даже выпуски с долгосрочной поддержкой (LTS) перестают получать поддержку примерно через 3 года. Используйте эту страницу, чтобы просмотреть последнюю версию выпуска LTS , а также убедитесь, что она соответствует версии узла, ожидаемой устанавливаемым пакетом, из сообщения об ошибке.
Моя проблема была решена с помощью yarn --ignore-engines
, но я не знаю, почему и как.
У меня была аналогичная проблема в Ubuntu даже после установки Nodejs много раз с последней версией, она показывала старую версию Nodejs, каждый раз устанавливая аналогичный старый пакет Debian, даже после команды обновления apt-get
Наконец, я заставил его работать, очистив старые nodeJ, затем добавив другой источник репозитория и установив nodeJ обычно следующим образом:
sudo apt-get purge --auto-remove nodejs
curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
список всех дистрибутивов NodeJa ниже https://github.com/nodesource/distributions/blob/master/README.md
Вы можете найти другие способы обновления, но этот сработал для меня.
Можешь попробовать:
- Открой тебя
package.json
- найти
"engines": { "node": "14.x" }
- сдача
14.x
->>=14.x
вам нужно запустить приведенную ниже команду, и ваша проблема будет решена
yarn install --ignore-engines
или
npm install --ignore-engines
Я рекомендую сделать то, что говорится в сообщении об ошибке, и проверить версию Node.js (
node -v
). Самый простой способ обновить Node.js — использовать
n
менеджер версий:
$ npm install -g n
Затем установите последнюю (
n latest
) или LTS (
n lts
) версия Node.
У меня сработало обновление Node до последней версии. Следуя любому руководству в зависимости от вашей ОС.
Обновите свой Node.js до последней версии.
Иногда вы не можете обновить движок Node (устаревшие проекты, требования клиента и т. д.). Решение, которое я нашел в этом случае, состояло в том, чтобы понизить проблемные версии с помощью «выборочного разрешения зависимостей», как описано в Yarn:
https://classic.yarnpkg.com/lang/en/docs/selective-version-resolutions/
{
"name": "project",
"version": "1.0.0",
"dependencies": {
"left-pad": "1.0.0",
"c": "file:../c-1",
"d2": "file:../d2-1"
},
"resolutions": {
"d2/left-pad": "1.1.1",
"c/**/left-pad": "^1.1.2"
}
}
Обратите внимание на часть «резолюции». Вы можете принудительно установить для этих пакетов более ранние версии (совместимые с вашим старым движком Node).
sudo npm cache clean -f
sudo npm install -g n
sudo n 10.22.1
node -v => Should be on 10.22.1
введите, какая версия узла вам нужна, поскольку я только что привел 10.22.1 в качестве примера
Только что обнаружил, что мне нужно не только обновить, но и установить его.
Это обновляет узел до последней версии:
brew upgrade node
Это устанавливает конкретную версию
node
:
nvm install 17.0.0
Это гораздо более проблематично, чем кажется на первый взгляд.
Если вы включаете модуль, для которого требуется узел 6, но у вас есть другие модули, использующие узел 11, вы получите эту ошибку!
Это проблематично, когда вы использовали сторонние модули nom/yarn/etc. для установки, так как у вас нет доступа к этим репозиториям пакетов без выполнения git fork.
В моем случае я использую рабочие области пряжи, и для некоторых модулей в файлах package.json в рабочих областях может потребоваться foo 1.0, в то время как для других требуется foo 2.0, а для версии 1.0 может потребоваться узел 6, а для версии 2.0 может потребоваться узел 14.
Единственное решение, которое я нашел, - это использовать --ignore-engines, хотя это явно то, что опубликовали другие - что это не устраняет проблему, а просто игнорирует ее, несмотря на любые проблемы, которые могут быть вызваны (код узла 6 может не работать на узле 14!).
Поэтому я считаю, что лучшим решением является обновление версии Node до рекомендованной версии следующим образом:
Удалите старую версию Node.js. Эта команда удалит старый пакет Node.js и все связанные с ним зависимости.
sudo apt autoremove nodejs
Добавьте другой источник репозитория. Это добавит репозиторий пакетов NodeSource в список источников системы.
curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
Установите Node.js из нового репозитория.
sudo apt-get install -y nodejs
Обновите версию узла в скрипте сборки. Мне удалось исправить это при развертывании с помощью действий GitHub. Я обновил версию узла с 16.x до 19.x, вот сборка действий GitHub https://github.com/maheshmnj/blog/actions/runs/6060258443 .
node-version: 19.x
Я получил эту ошибку при создании приложения NextJS с использованием Docker и Yarn . Ошибка, которую я получал:
ошибка [электронная почта защищена] : «Узел» движка несовместим с этим модулем. Ожидаемая версия «>=16.8.0». Получил "14.21.3"
Как я это решил :
Проблема заключалась в том, что версия узла, которую я использовал вDockerfile
было ниже, чем версия, ожидаемая проектом.
Мой Dockerfile имел следующий базовый образ:
FROM node:14-alpine
Мне пришлось изменить его сnode:14-alpine
кnode:lts-alpine
:
FROM node:lts-alpine
Yarn add <your_lib> — плохое решение, если библиотек много, которые не должны игнорировать движки, и при запуске:
yarn add <your_lib> --ignore-engines
некоторые библиотеки не будут работать в вашем проекте.
Для тех, кто используетasdf
и если у вас возникла эта проблема, вашnodejs
версию плагина следует обновить и/или установить.
Проверка версий плагина asdf:
▶ asdf current
nodejs 16.13.0 Not installed. Run "asdf install nodejs 16.13.0"
poetry 1.2.1 /Users/zack/.tool-versions
python 3.9.9 /Users/zack/.tool-versions
Убедитесь, что последний установлен:
▶ asdf install nodejs latest
nodejs 20.1.0 is already installed
Установите последнюю глобальную версию:
▶ asdf global nodejs latest
Проверьте набор:
▶ asdf current
nodejs 20.1.0 /Users/zack/.tool-versions
poetry 1.2.1 /Users/zack/.tool-versions
python 3.9.9 /Users/zack/.tool-versions
После этого у меня все заработало правильно.
Если вы получаете эту ошибку при развертывании веб-приложения expo в AWS ampify , вы можете попробовать обновить версию узла при развертывании .
Для этого нажмите на Build Settings в ampify, затем на Edit, чтобы изменить ampify.yml и найдите строку:
- nvm use XX
Вы можете попробовать изменить его на последнюю версию, поддерживаемую на ampify, и посмотреть, работает ли это. На момент написания было 12.
Я обнаружил эту проблему сейчас, со старым кодом, однако я решил ее с помощью:yarn upgrade
Ищи >=6 <7 || >=8
в базе кода (обычно в package.json). Измените это на>=6 <=7 || >=8
.