ESLint: «типы реквизитов должны быть перечислены в зависимостях проекта», но «типы реквизитов» уже включены в пакет npm «следующий» (react/типы реквизитов)

#reactjs #next.js #eslint #react-proptypes

Вопрос:

Я использую next пакет npm, для которого уже требуется prop-types библиотека. prop-types работает так, как ожидалось, когда я его импортирую.

введите описание изображения здесь

Проблема в том, что ESLint говорит мне, что «типы реквизитов» должны быть перечислены в зависимостях проекта». Я попытался установить правило ESLint:

   "rules": {
    "react/prop-types": "off",
  },
 

тоже

 "rules": {
    ...
    "import/no-extraneous-dependencies": [
      "error", {
        "devDependencies": true,
        "optionalDependencies": true,
        "peerDependencies": true,
        "bundledDependencies": true
      }
    ]
}
 

Однако ошибка ESLint все еще обнаруживается. Я не хочу добавлять prop-types в свой package.json , потому что он уже включен next . Я видел, что эти попытки сработали для React.js приложения, но, похоже, это работает для моего Next.js приложение. Есть ли кто-нибудь, кто мог бы пролить больше света на этот вопрос, который у меня возник?

Комментарии:

1. ах. Хорошо. Спасибо @brc-dd!

Ответ №1:

Не имеет значения, какой пакет имеет ту или иную зависимость, если вы напрямую используете пакет, рекомендуется, чтобы он также был вашей зависимостью. Я не являюсь одним из разработчиков eslint-plugin-import , но вдохновение, лежащее в основе этого правила, вероятно, было бы примерно таким:

  • Может случиться так, что пакет foo может перестать связывать bar с ним определенный пакет или, возможно foo , изменить bar его версию. Но поскольку пакеты, используемые внутри пакета, не влияют на семантическое управление версиями до тех пор, пока доступные методы и поведение не станут одинаковыми, вы можете даже не получить основное обновление версии. Это означает , что у вас все еще будет "foo": "^a.b.c" в вашем package.json , но bar будет обновляться. И если вы используете bar его без явного указания в своих зависимостях, у вас остается код, который может работать не так, как задумывалось, или может вообще не работать.

Теперь, переходя к вашей проблеме, вам нужно отключить import/no-extraneous-dependencies , чтобы игнорировать это (линтер) предупреждение/ошибку. Для этого вы можете обратиться к документам: Отключение правил со встроенными комментариями и Настройка правил. Однако самым простым методом будет продолжать использовать правило и просто игнорировать его для строки:

 // eslint-disable-next-line import/no-extraneous-dependencies
import PropTypes from 'prop-types';