webpack-contrib / eslint-webpack-plugin

A ESLint plugin for webpack
MIT License
255 stars 49 forks source link

Plugin fails webpack build for node_modules with missing eslint config #37

Closed rozsival closed 3 years ago

rozsival commented 3 years ago

Since v2.2.0 the plugin fails webpack build if any package inside node_modules references eslintConfig in its package.json but the config itself is actually missing as it is not part of the published npm package.

This happens for example with popper.js or tippy.js packages. If v2.1.0 of this plugin is used, there is no issue.

Expected Behavior

The plugin should ignore missing eslint configs of packages inside node_modules.

Actual Behavior

Webpack build fails because of missing eslint config inside node_modules package that references it.

Code

Inside webpack.config.js (simplified for purpose of this issue)

const dev = process.env.NODE_ENV !== 'production';
plugins: [
  new ESLintWebpackPlugin({
    emitError: !dev,
    emitWarning: dev,
  }),
]

Error stack trace

 UnhandledPromiseRejectionWarning: Error: Failed to load config "./.config/eslint.config" to extend from.
Referenced from: /Users/vitrozsival/projects/sites/point/node_modules/@popperjs/core/package.json
    at configMissingError (/Users/vitrozsival/projects/sites/point/node_modules/@eslint/eslintrc/lib/config-array-factory.js:289:9)
    at ConfigArrayFactory._loadExtendedShareableConfig (/Users/vitrozsival/projects/sites/point/node_modules/@eslint/eslintrc/lib/config-array-factory.js:877:23)
    at ConfigArrayFactory._loadExtends (/Users/vitrozsival/projects/sites/point/node_modules/@eslint/eslintrc/lib/config-array-factory.js:780:25)
    at ConfigArrayFactory._normalizeObjectConfigDataBody (/Users/vitrozsival/projects/sites/point/node_modules/@eslint/eslintrc/lib/config-array-factory.js:719:25)
    at _normalizeObjectConfigDataBody.next (<anonymous>)
    at ConfigArrayFactory._normalizeObjectConfigData (/Users/vitrozsival/projects/sites/point/node_modules/@eslint/eslintrc/lib/config-array-factory.js:664:20)
    at _normalizeObjectConfigData.next (<anonymous>)
    at ConfigArrayFactory.loadInDirectory (/Users/vitrozsival/projects/sites/point/node_modules/@eslint/eslintrc/lib/config-array-factory.js:510:28)
    at CascadingConfigArrayFactory._loadConfigInAncestors (/Users/vitrozsival/projects/sites/point/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:378:46)
    at CascadingConfigArrayFactory._loadConfigInAncestors (/Users/vitrozsival/projects/sites/point/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:397:20)
    at CascadingConfigArrayFactory._loadConfigInAncestors (/Users/vitrozsival/projects/sites/point/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:397:20)
    at CascadingConfigArrayFactory.getConfigArrayForFile (/Users/vitrozsival/projects/sites/point/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:299:18)
    at FileEnumerator._iterateFilesWithFile (/Users/vitrozsival/projects/sites/point/node_modules/eslint/lib/cli-engine/file-enumerator.js:365:43)
    at FileEnumerator._iterateFiles (/Users/vitrozsival/projects/sites/point/node_modules/eslint/lib/cli-engine/file-enumerator.js:346:25)
    at FileEnumerator.iterateFiles (/Users/vitrozsival/projects/sites/point/node_modules/eslint/lib/cli-engine/file-enumerator.js:296:59)
    at iterateFiles.next (<anonymous>)
    at CLIEngine.executeOnFiles (/Users/vitrozsival/projects/sites/point/node_modules/eslint/lib/cli-engine/cli-engine.js:770:48)
    at ESLint.lintFiles (/Users/vitrozsival/projects/sites/point/node_modules/eslint/lib/eslint/eslint.js:521:23)
    at lint (/Users/vitrozsival/projects/sites/point/node_modules/eslint-webpack-plugin/dist/linter.js:72:28)
    at processModule (/Users/vitrozsival/projects/sites/point/node_modules/eslint-webpack-plugin/dist/index.js:93:9)
    at SyncHook.eval (eval at create (/Users/vitrozsival/projects/sites/point/node_modules/tapable/lib/HookCodeFactory.js:19:10), <anonymous>:5:1)
    at /Users/vitrozsival/projects/sites/point/node_modules/webpack/lib/Compilation.js:781:30
    at handleParseResult (/Users/vitrozsival/projects/sites/point/node_modules/webpack/lib/NormalModule.js:478:12)
    at /Users/vitrozsival/projects/sites/point/node_modules/webpack/lib/NormalModule.js:500:6
    at /Users/vitrozsival/projects/sites/point/node_modules/webpack/lib/NormalModule.js:358:12
    at /Users/vitrozsival/projects/sites/point/node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/Users/vitrozsival/projects/sites/point/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at Array.<anonymous> (/Users/vitrozsival/projects/sites/point/node_modules/loader-runner/lib/LoaderRunner.js:205:4)
    at Storage.finished (/Users/vitrozsival/projects/sites/point/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:55:16)
    at /Users/vitrozsival/projects/sites/point/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:91:9
    at /Users/vitrozsival/projects/sites/point/node_modules/graceful-fs/graceful-fs.js:123:16
    at FSReqCallback.readFileAfterClose [as oncomplete] (internal/fs/read_file_context.js:63:3)

How Do We Reproduce?

eggei commented 3 years ago

We are having the exact same issue since a couple of days ago.

webpack.config.js

new ESLintPlugin({ extensions: ['js', 'jsx', 'ts', 'tsx'] })

package.json

 "eslint-webpack-plugin": "^2.1.0"
Error ``` Step 8/14 : RUN node_modules/webpack/bin/webpack.js --env.NODE_ENV=production ---> Running in 7604547de726 (node:1) UnhandledPromiseRejectionWarning: Error: Failed to load parser 'babel-eslint' declared in 'node_modules/notistack/.eslintrc': Cannot find module 'babel-eslint' Require stack: - /app/node_modules/notistack/.eslintrc at Function.Module._resolveFilename (internal/modules/cjs/loader.js:976:15) at Function.resolve (internal/modules/cjs/helpers.js:78:19) at Object.resolve (/app/node_modules/@eslint/eslintrc/lib/shared/relative-module-resolver.js:28:50) at ConfigArrayFactory._loadParser (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:923:45) at ConfigArrayFactory._normalizeObjectConfigDataBody (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:723:43) at _normalizeObjectConfigDataBody.next () at ConfigArrayFactory._normalizeObjectConfigData (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:664:20) at _normalizeObjectConfigData.next () at ConfigArrayFactory.loadInDirectory (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:510:28) at CascadingConfigArrayFactory._loadConfigInAncestors (/app/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:378:46) at CascadingConfigArrayFactory._loadConfigInAncestors (/app/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:397:20) at CascadingConfigArrayFactory.getConfigArrayForFile (/app/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:299:18) at FileEnumerator._iterateFilesWithFile (/app/node_modules/eslint/lib/cli-engine/file-enumerator.js:365:43) at FileEnumerator._iterateFiles (/app/node_modules/eslint/lib/cli-engine/file-enumerator.js:346:25) at FileEnumerator.iterateFiles (/app/node_modules/eslint/lib/cli-engine/file-enumerator.js:296:59) at iterateFiles.next () at CLIEngine.executeOnFiles (/app/node_modules/eslint/lib/cli-engine/cli-engine.js:770:48) at ESLint.lintFiles (/app/node_modules/eslint/lib/eslint/eslint.js:521:23) at lint (/app/node_modules/eslint-webpack-plugin/dist/linter.js:72:28) at processModule (/app/node_modules/eslint-webpack-plugin/dist/index.js:93:9) at SyncHook.eval [as call] (eval at create (/app/node_modules/tapable/lib/HookCodeFactory.js:19:10), :5:1) at /app/node_modules/webpack/lib/Compilation.js:781:30 at handleParseResult (/app/node_modules/webpack/lib/NormalModule.js:478:12) at /app/node_modules/webpack/lib/NormalModule.js:500:6 at /app/node_modules/webpack/lib/NormalModule.js:358:12 at /app/node_modules/loader-runner/lib/LoaderRunner.js:373:3 at iterateNormalLoaders (/app/node_modules/loader-runner/lib/LoaderRunner.js:214:10) at Array. (/app/node_modules/loader-runner/lib/LoaderRunner.js:205:4) at Storage.finished (/app/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:55:16) at /app/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:91:9 (node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1) (node:1) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. (node:1) UnhandledPromiseRejectionWarning: Error: Failed to load config "@c1/eslint-config-lift" to extend from. Referenced from: /app/node_modules/@c1/cml-1x-sso/.eslintrc at configMissingError (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:289:9) at ConfigArrayFactory._loadExtendedShareableConfig (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:877:23) at ConfigArrayFactory._loadExtends (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:780:25) at ConfigArrayFactory._normalizeObjectConfigDataBody (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:719:25) at _normalizeObjectConfigDataBody.next () at ConfigArrayFactory._normalizeObjectConfigData (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:664:20) at _normalizeObjectConfigData.next () at ConfigArrayFactory.loadInDirectory (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:510:28) at CascadingConfigArrayFactory._loadConfigInAncestors (/app/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:378:46) at CascadingConfigArrayFactory._loadConfigInAncestors (/app/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:397:20) at CascadingConfigArrayFactory.getConfigArrayForFile (/app/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:299:18) at FileEnumerator._iterateFilesWithFile (/app/node_modules/eslint/lib/cli-engine/file-enumerator.js:365:43) at FileEnumerator._iterateFiles (/app/node_modules/eslint/lib/cli-engine/file-enumerator.js:346:25) at FileEnumerator.iterateFiles (/app/node_modules/eslint/lib/cli-engine/file-enumerator.js:296:59) at iterateFiles.next () at CLIEngine.executeOnFiles (/app/node_modules/eslint/lib/cli-engine/cli-engine.js:770:48) at ESLint.lintFiles (/app/node_modules/eslint/lib/eslint/eslint.js:521:23) at lint (/app/node_modules/eslint-webpack-plugin/dist/linter.js:72:28) at processModule (/app/node_modules/eslint-webpack-plugin/dist/index.js:93:9) at SyncHook.eval [as call] (eval at create (/app/node_modules/tapable/lib/HookCodeFactory.js:19:10), :5:1) at /app/node_modules/webpack/lib/Compilation.js:781:30 at handleParseResult (/app/node_modules/webpack/lib/NormalModule.js:478:12) at /app/node_modules/webpack/lib/NormalModule.js:500:6 at /app/node_modules/webpack/lib/NormalModule.js:358:12 at /app/node_modules/loader-runner/lib/LoaderRunner.js:373:3 at iterateNormalLoaders (/app/node_modules/loader-runner/lib/LoaderRunner.js:214:10) at Array. (/app/node_modules/loader-runner/lib/LoaderRunner.js:205:4) at Storage.finished (/app/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:55:16) at /app/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:91:9 at /app/node_modules/graceful-fs/graceful-fs.js:123:16 (node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2) (node:1) UnhandledPromiseRejectionWarning: Error: Failed to load config "@c1/eslint-config-lift" to extend from. Referenced from: /app/node_modules/@c1/cml-1x-sso/.eslintrc at configMissingError (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:289:9) at ConfigArrayFactory._loadExtendedShareableConfig (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:877:23) at ConfigArrayFactory._loadExtends (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:780:25) at ConfigArrayFactory._normalizeObjectConfigDataBody (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:719:25) at _normalizeObjectConfigDataBody.next () at ConfigArrayFactory._normalizeObjectConfigData (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:664:20) at _normalizeObjectConfigData.next () at ConfigArrayFactory.loadInDirectory (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:510:28) at CascadingConfigArrayFactory._loadConfigInAncestors (/app/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:378:46) at CascadingConfigArrayFactory._loadConfigInAncestors (/app/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:397:20) at CascadingConfigArrayFactory.getConfigArrayForFile (/app/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:299:18) at FileEnumerator._iterateFilesWithFile (/app/node_modules/eslint/lib/cli-engine/file-enumerator.js:365:43) at FileEnumerator._iterateFiles (/app/node_modules/eslint/lib/cli-engine/file-enumerator.js:346:25) at FileEnumerator.iterateFiles (/app/node_modules/eslint/lib/cli-engine/file-enumerator.js:296:59) at iterateFiles.next () at CLIEngine.executeOnFiles (/app/node_modules/eslint/lib/cli-engine/cli-engine.js:770:48) at ESLint.lintFiles (/app/node_modules/eslint/lib/eslint/eslint.js:521:23) at lint (/app/node_modules/eslint-webpack-plugin/dist/linter.js:72:28) at processModule (/app/node_modules/eslint-webpack-plugin/dist/index.js:93:9) at SyncHook.eval [as call] (eval at create (/app/node_modules/tapable/lib/HookCodeFactory.js:19:10), :5:1) at /app/node_modules/webpack/lib/Compilation.js:781:30 at handleParseResult (/app/node_modules/webpack/lib/NormalModule.js:478:12) at /app/node_modules/webpack/lib/NormalModule.js:500:6 at /app/node_modules/webpack/lib/NormalModule.js:358:12 at /app/node_modules/loader-runner/lib/LoaderRunner.js:373:3 at iterateNormalLoaders (/app/node_modules/loader-runner/lib/LoaderRunner.js:214:10) at Array. (/app/node_modules/loader-runner/lib/LoaderRunner.js:205:4) at Storage.finished (/app/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:55:16) at /app/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:91:9 at /app/node_modules/graceful-fs/graceful-fs.js:123:16 (node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 3) (node:1) UnhandledPromiseRejectionWarning: Error: Failed to load config "@c1/eslint-config-lift" to extend from. Referenced from: /app/node_modules/@c1/cml-1x-sso/.eslintrc at configMissingError (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:289:9) at ConfigArrayFactory._loadExtendedShareableConfig (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:877:23) at ConfigArrayFactory._loadExtends (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:780:25) at ConfigArrayFactory._normalizeObjectConfigDataBody (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:719:25) at _normalizeObjectConfigDataBody.next () at ConfigArrayFactory._normalizeObjectConfigData (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:664:20) at _normalizeObjectConfigData.next () at ConfigArrayFactory.loadInDirectory (/app/node_modules/@eslint/eslintrc/lib/config-array-factory.js:510:28) at CascadingConfigArrayFactory._loadConfigInAncestors (/app/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:378:46) at CascadingConfigArrayFactory._loadConfigInAncestors (/app/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:397:20) at CascadingConfigArrayFactory.getConfigArrayForFile (/app/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js:299:18) at FileEnumerator._iterateFilesWithFile (/app/node_modules/eslint/lib/cli-engine/file-enumerator.js:365:43) at FileEnumerator._iterateFiles (/app/node_modules/eslint/lib/cli-engine/file-enumerator.js:346:25) at FileEnumerator.iterateFiles (/app/node_modules/eslint/lib/cli-engine/file-enumerator.js:296:59) at iterateFiles.next () at CLIEngine.executeOnFiles (/app/node_modules/eslint/lib/cli-engine/cli-engine.js:770:48) at ESLint.lintFiles (/app/node_modules/eslint/lib/eslint/eslint.js:521:23) at lint (/app/node_modules/eslint-webpack-plugin/dist/linter.js:72:28) at processModule (/app/node_modules/eslint-web... ```

This solved it for us for now:

--- "eslint-webpack-plugin": "^2.1.0
+++ "eslint-webpack-plugin": "~2.1.0
ricardogobbosouza commented 3 years ago

Hi @rozsival, @eggei Resolved v2.3.0 If the problem persists, reopen this