#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';