Скрипты, включенные в реагирующие скрипты, специально не читают переопределения из файлов eslintrc.Аргументация объясняется в комментарии к проблеме :
Я не думаю, что это будет хорошим решением.Мы настойчиво показываем нарушения lint (в браузере для ошибок, в консоли для предупреждений), и поэтому мы не включили никаких правил стилей в конфигурацию.
Я думаю, что правила стилей должны обрабатываться полностью отдельно, прежде чем вы подтвердите,Они не должны отвлекать вас во время разработки или быть громкими в браузере или терминале.
Я думаю, что идея заключается в том, что вы можете использовать свою собственную конфигурацию eslint для добавления правил стиля, специфичных для вашего проекта, которые выпроверка в процессе разработки;но build
и start
не будут на это смотреть, и вместо этого будут придерживаться консервативного набора правил, связанного с реагирующими скриптами.Тот факт, что вы обнаружили случай, когда эти консервативные правила мешают вашему рабочему процессу, вероятно, заслуживает отчета о проблеме с помощью create-реагировать-приложения.
Я думаю, что самым простым решением является использование строки // eslint-disable-line no-unused-expressions
, так какты упомянул.Но есть пара других вариантов.Вы можете изменить выражение, чтобы убедить eslint в том, что оно не используется, или вы можете использовать инструмент, такой как patch-package , чтобы изменить конфигурацию веб-пакета response-scripts так, чтобы он считывал вашу пользовательскую конфигурацию eslint.
Убедите eslint в том, что используется выражение
Конфигурация eslint, используемая программой-сценариями, находится в node_modules/eslint-config-react-app/index.js
.Вы можете видеть, что он устанавливает некоторые исключения из правила no-unused-expression выражений:
'no-unused-expressions': [
'error',
{
allowShortCircuit: true,
allowTernary: true,
allowTaggedTemplates: true,
},
],
Допускаются троичные выражения.Вы можете комбинировать утверждение типа с вызовом функции (который никогда не должен запускаться, потому что action
всегда должен быть правдивым):
(action: empty) || noop();
Патч-конфигурация скриптов реакции Webpack
Вы можете увидетькод, который использует реагирующие сценарии для запуска eslint в node_modules/react-scripts/config/webpack.config.dev.js
и снова в node_modules/react-scripts/config/webpack.config.dev.js
:
// First, run the linter.
// It's important to do this before Babel processes the JS.
{
test: /\.(js|mjs|jsx)$/,
enforce: 'pre',
use: [
{
options: {
formatter: require.resolve('react-dev-utils/eslintFormatter'),
eslintPath: require.resolve('eslint'),
// @remove-on-eject-begin
baseConfig: {
extends: [require.resolve('eslint-config-react-app')],
settings: { react: { version: '999.999.999' } },
},
ignore: false,
useEslintrc: false,
// @remove-on-eject-end
},
loader: require.resolve('eslint-loader'),
},
],
include: paths.appSrc,
},
Чтобы использовать пользовательскую конфигурацию, необходимо изменить строку useEslintrc: false
на useEslintrc: true
в обоихфайлы.Затем используйте patch-package для автоматического повторного применения этого изменения при установке или обновлении response-scripts.Добавьте этот сценарий в раздел сценариев в package.json
:
"scripts": {
"prepare": "patch-package"
}
Установите пакет исправлений и подготовьте postinstall, чтобы убедиться, что пряжа запускает сценарий prepare
:
$ yarn add --dev patch-package postinstall-prepare
После редактирования файлов конфигурации Webpack запустите эту команду, чтобы сохранить исправление (обратите внимание, что приведенные выше команды пряжи будут отменять ваши изменения, поэтому внесите те же изменения еще раз перед выполнением этого шага):
$ yarn patch-package react-scripts
Тосоздаст файл с именем вроде patches/react-scripts+2.1.1.patch
.Вы должны проверить этот файл в системе контроля версий.