Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Option to disable ESLint in specific contexts (but not everywhere) #9929

Closed
jrr opened this issue Oct 27, 2020 · 11 comments
Closed

Option to disable ESLint in specific contexts (but not everywhere) #9929

jrr opened this issue Oct 27, 2020 · 11 comments

Comments

@jrr
Copy link
Contributor

jrr commented Oct 27, 2020

Is your proposal related to a problem?

On my project, ESLint's feedback is most valuable from 1) our editors, and 2) CI. It's not very useful when lint errors appear in the browser when connected to the dev server. (in fact, it slows me down!)

Describe the solution you'd like

I'd like to disable ESLint in the dev server, without affecting how ESLint behaves in other contexts. (e.g., eslint on the command line and in VS Code should be unafffected).

This could be via an environment var, e.g. DISABLE_LINT=1 react-scripts start.

Describe alternatives you've considered

I've looked through react-script's webpack config to check if there was already a way to do this, but couldn't find one:

new ESLintPlugin({
// Plugin options
extensions: ['js', 'mjs', 'jsx', 'ts', 'tsx'],
formatter: require.resolve('react-dev-utils/eslintFormatter'),
eslintPath: require.resolve('eslint'),
context: paths.appSrc,
cache: true,
// ESLint class options
cwd: paths.appPath,
resolvePluginsRelativeTo: __dirname,
baseConfig: {
extends: [require.resolve('eslint-config-react-app/base')],
rules: {
...(!hasJsxRuntime && {
'react/react-in-jsx-scope': 'error',
}),
},
},
}),

I've also looked into whether there was already a global disable available from ESLint or its webpack plugin, and couldn't find anything.

Additional context

I know CRA aims to limit the available configuration options, but it seems reasonable for this one to go in Advanced Configuration.

@jrr jrr changed the title Option to disable eslint in specific contexts (but not everywhere) Option to disable ESLint in specific contexts (but not everywhere) Oct 27, 2020
@msbarry
Copy link

msbarry commented Oct 29, 2020

An alternative here might be to have eslint checking happen asynchronously after the initial and incremental compiles, like typescript type checking.

@jrr
Copy link
Contributor Author

jrr commented Oct 30, 2020

I have a terrible, no good, really bad workaround: use an executable .eslintrc.js file and emit config conditionally.

It's not a true disable, but you can make it do very nearly nothing:

const realConfig = {/* ...  */};

const nopConfig = {
  /*

  This config is meant to do nothing.

  It exists because there's no good way to disable ESLint in Create React App:
  https://github.com/facebook/create-react-app/issues/9929

  So the workaround here is to craft a config that does as little as possible,
  and then conditionally use it.

  */

  ignorePatterns: ["**/*.ts", "**/*.tsx", "./*.js", "config/*.js"],
};

module.exports = process.env.DISABLE_ESLINT ? nopConfig : realConfig;

Note that you can't ignore all files lest ESLint get upset, with an error like All files matched by '/foo/bar/src/.' are ignored., but you can drop in an empty dummy file to placate it.

@krailler
Copy link

+1 I'd like to disable eslint on the dev server

1 similar comment
@sahilrajput03
Copy link

+1 I'd like to disable eslint on the dev server

@unframework
Copy link

FYI there is already #9887 that tracks a similar concern. Disabling ESLint altogether (and losing useful notifications about problems) might not be necessary if we figure out a way to show errors in console only, like they used to be pre-v4.0.

@jrr
Copy link
Contributor Author

jrr commented Nov 3, 2020

@unframework Interesting, thanks for the reference. Fixing #9887 would certainly make dev server lint errors less annoying, but It'd still want to disable them for a couple reasons:

  • So I don't get spammed with warnings and errors for my WIP code. I address lint issues during a different part of my workflow, not during the rapid iteration cycle I use the dev server for.
  • Performance. Especially with some of typescript-eslint's slower rules, linting is a performance cost I'd prefer to pay less frequently. (A full eslint on my project currently takes 20s!)

@unframework
Copy link

Agreed re: performance, and it is funny that before CRA 4.0 that was actually the default (just a predefined bare-bones check in dev server, but allowing broader project-specific config for editor/CI/pre-commit).

Your solution with conditional config seems like a pretty flexible approach for that...

@sahilrajput03
Copy link

Hey its there's a simple solution to fix this in cra4, check out my guide on this topic(for cra4 only).

https://gist.github.com/sahilrajput03/bdd1f1d686da2e919eac647c89d87310

@ashfaqnisar
Copy link

ashfaqnisar commented Nov 23, 2020

Hey its there's a simple solution to fix this in cra4, check out my guide on this topic(for cra4 only).

https://gist.github.com/sahilrajput03/bdd1f1d686da2e919eac647c89d87310

Hey there @sahilrajput03, @jrr is referring about how to conditionally apply eslint rules. Not removing all of the eslint checks from the whole project.

JamesLefrere added a commit to mstable/mStable-app that referenced this issue Dec 23, 2020
JamesLefrere added a commit to mstable/mStable-app that referenced this issue Dec 23, 2020
@mrmckeb
Copy link
Contributor

mrmckeb commented Jan 6, 2021

Hi @jrr, we've created a discussion around this. Feel free to vote or add thoughts!
#10344

JamesLefrere added a commit to mstable/mStable-app that referenced this issue Jan 17, 2021
JamesLefrere added a commit to mstable/mStable-app that referenced this issue Jan 18, 2021
@jrr
Copy link
Contributor Author

jrr commented Feb 3, 2021

Fixed via #10170 in 4.0.2. Thanks @mrmckeb !

@jrr jrr closed this as completed Feb 3, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants