Движок "узел" несовместим с этим модулем

Я получаю ниже ошибки пряжи при развертывании на 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

Однако, если вам нужно постоянное решение, это:

  1. удалить node_modules/, package-lock.json и yarn.lock
  2. снова запустите 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

Вы можете найти другие способы обновления, но этот сработал для меня.

Можешь попробовать:

  1. Открой тебя package.json
  2. найти "engines": { "node": "14.x" }
  3. сдача 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.js до последней версии.

https://nodejs.org/en/download/

Иногда вы не можете обновить движок 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!).

сообщает менеджеру пакетов, что при установке пакетов следует игнорировать механизмы, указанные в файле package.json. Поэтому, когда вы устанавливаете ignore-engine в значение true, вы по сути указываете Yarn игнорировать это поле и продолжить установку независимо от Node.js.

позволяет авторам пакетов указывать, какие узлы узлов необходимы для работы пакета. По сути, какая версия узла нужна. Если вы проигнорируете это руководство, вы рискуете установить пакет, который не будет работать с используемой вами версией узла, поскольку он использует функцию, не поддерживаемую вашей версией узла.

Поэтому я считаю, что лучшим решением является обновление версии 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.

Другие вопросы по тегам