2017-08-06 42 views
0

我試圖使用eslint-import-resolver-babel-module但沒有成功。 Airbnb配置使用「節點」解析器,似乎只有它被使用。如何在使用airbnb時覆蓋eslint-plugin-import解析器

這裏是我的配置:

{ 
    "env": { 
    "browser": true 
    }, 
    "extends": "airbnb", 
    "plugins": [ 
    "react", 
    "jsx-a11y", 
    "import" 
    ], 
    "rules": { 
    "no-param-reassign": [2, { "props": false }] 
    }, 
    "parser": "babel-eslint", 
    "root": true, 
    "settings": { 
    "import/resolver": { 
     "babel-module": {} 
    } 
    } 
} 

我開始使用該編譯配置:

... 
"settings": { 
    "import/resolver": { 
     "node": { 
     "extensions": [ 
      ".js", 
      ".jsx", 
      ".json" 
     ] 
     }, 
     "babel-module": {} 
    }, 
... 

然後我測試使用此命令

:從結果

$ ./node_modules/.bin/eslint --print-config src/test.js > eslintconfig 2>&1 

摘錄

$ cross-env DEBUG=eslint-plugin-import:resolver:* ./node_modules/.bin/eslint src/test.js > eslintdebug 2>&1 

輸出

Sun, 06 Aug 2017 14:16:33 GMT eslint-plugin-import:resolver:node Resolving: client/test2 from: D:XXX\src\test.js 
Sun, 06 Aug 2017 14:16:33 GMT eslint-plugin-import:resolver:node resolve threw error: { Error: Cannot find module 'client/test2' from 'D:XXX\src' 
    at Function.module.exports [as sync] (D:XXX\node_modules\resolve\lib\sync.js:40:15) 
    at Object.exports.resolve (D:XXX\node_modules\eslint-import-resolver-node\index.js:18:28) 
    at v2 (D:XXX\node_modules\eslint-module-utils\resolve.js:79:23) 
    at withResolver (D:XXX\node_modules\eslint-module-utils\resolve.js:84:16) 
    at fullResolve (D:XXX\node_modules\eslint-module-utils\resolve.js:101:22) 
    at relative (D:XXX\node_modules\eslint-module-utils\resolve.js:46:10) 
    at resolve (D:XXX\node_modules\eslint-module-utils\resolve.js:172:12) 
    at checkSourceValue (D:XXX\node_modules\eslint-plugin-import\lib\rules\no-unresolved.js:29:50) 
    at checkSourceValue (D:XXX\node_modules\eslint-module-utils\moduleVisitor.js:29:5) 
    at EventEmitter.checkSource (D:XXX\node_modules\eslint-module-utils\moduleVisitor.js:34:5) code: 'MODULE_NOT_FOUND' } 
Sun, 06 Aug 2017 14:16:33 GMT eslint-plugin-import:resolver:node Resolving: client/test2 from: D:XXX\src\test.js 
Sun, 06 Aug 2017 14:16:33 GMT eslint-plugin-import:resolver:node resolve threw error: { Error: Cannot find module 'client/test2' from 'D:XXX\src' 
    at Function.module.exports [as sync] (D:XXX\node_modules\resolve\lib\sync.js:40:15) 
    at Object.exports.resolve (D:XXX\node_modules\eslint-import-resolver-node\index.js:18:28) 
    at v2 (D:XXX\node_modules\eslint-module-utils\resolve.js:79:23) 
    at withResolver (D:XXX\node_modules\eslint-module-utils\resolve.js:84:16) 
    at fullResolve (D:XXX\node_modules\eslint-module-utils\resolve.js:101:22) 
    at relative (D:XXX\node_modules\eslint-module-utils\resolve.js:46:10) 
    at resolve (D:XXX\node_modules\eslint-module-utils\resolve.js:172:12) 
    at resolveImportType (D:XXX\node_modules\eslint-plugin-import\lib\core\importType.js:74:65) 
    at reportIfMissing (D:XXX\node_modules\eslint-plugin-import\lib\rules\no-extraneous-dependencies.js:74:32) 
    at EventEmitter.ImportDeclaration (D:XXX\node_modules\eslint-plugin-import\lib\rules\no-extraneous-dependencies.js:144:9) code: 'MODULE_NOT_FOUND' } 
Sun, 06 Aug 2017 14:16:33 GMT eslint-plugin-import:resolver:node Resolving: client/test2 from: D:XXX\src\test.js 
Sun, 06 Aug 2017 14:16:33 GMT eslint-plugin-import:resolver:node resolve threw error: { Error: Cannot find module 'client/test2' from 'D:XXX\src' 
    at Function.module.exports [as sync] (D:XXX\node_modules\resolve\lib\sync.js:40:15) 
    at Object.exports.resolve (D:XXX\node_modules\eslint-import-resolver-node\index.js:18:28) 
    at v2 (D:XXX\node_modules\eslint-module-utils\resolve.js:79:23) 
    at withResolver (D:XXX\node_modules\eslint-module-utils\resolve.js:84:16) 
    at fullResolve (D:XXX\node_modules\eslint-module-utils\resolve.js:101:22) 
    at relative (D:XXX\node_modules\eslint-module-utils\resolve.js:46:10) 
    at resolve (D:XXX\node_modules\eslint-module-utils\resolve.js:172:12) 
    at EventEmitter.ImportDeclaration (D:XXX\node_modules\eslint-plugin-import\lib\rules\no-duplicates.js:37:52) 
    at emitOne (events.js:101:20) 
    at EventEmitter.emit (events.js:191:7) code: 'MODULE_NOT_FOUND' } 
Sun, 06 Aug 2017 14:16:33 GMT eslint-plugin-import:resolver:node Resolving: client/test2 from: D:XXX\src\test.js 
Sun, 06 Aug 2017 14:16:33 GMT eslint-plugin-import:resolver:node resolve threw error: { Error: Cannot find module 'client/test2' from 'D:XXX\src' 
    at Function.module.exports [as sync] (D:XXX\node_modules\resolve\lib\sync.js:40:15) 
    at Object.exports.resolve (D:XXX\node_modules\eslint-import-resolver-node\index.js:18:28) 
    at v2 (D:XXX\node_modules\eslint-module-utils\resolve.js:79:23) 
    at withResolver (D:XXX\node_modules\eslint-module-utils\resolve.js:84:16) 
    at fullResolve (D:XXX\node_modules\eslint-module-utils\resolve.js:101:22) 
    at relative (D:XXX\node_modules\eslint-module-utils\resolve.js:46:10) 
    at resolve (D:XXX\node_modules\eslint-module-utils\resolve.js:172:12) 
    at EventEmitter.checkFileExtension (D:XXX\node_modules\eslint-plugin-import\lib\rules\extensions.js:81:50) 
    at emitOne (events.js:101:20) 
    at EventEmitter.emit (events.js:191:7) code: 'MODULE_NOT_FOUND' } 
Sun, 06 Aug 2017 14:16:33 GMT eslint-plugin-import:resolver:node Resolving: client/test2 from: D:XXX\src\test.js 
Sun, 06 Aug 2017 14:16:33 GMT eslint-plugin-import:resolver:node resolve threw error: { Error: Cannot find module 'client/test2' from 'D:XXX\src' 
    at Function.module.exports [as sync] (D:XXX\node_modules\resolve\lib\sync.js:40:15) 
    at Object.exports.resolve (D:XXX\node_modules\eslint-import-resolver-node\index.js:18:28) 
    at v2 (D:XXX\node_modules\eslint-module-utils\resolve.js:79:23) 
    at withResolver (D:XXX\node_modules\eslint-module-utils\resolve.js:84:16) 
    at fullResolve (D:XXX\node_modules\eslint-module-utils\resolve.js:101:22) 
    at relative (D:XXX\node_modules\eslint-module-utils\resolve.js:46:10) 
    at resolve (D:XXX\node_modules\eslint-module-utils\resolve.js:172:12) 
    at Function.ExportMap.get (D:XXX\node_modules\eslint-plugin-import\lib\ExportMap.js:281:38) 
    at checkDefault (D:XXX\node_modules\eslint-plugin-import\lib\rules\no-named-as-default.js:25:41) 
    at emitOne (events.js:101:20) code: 'MODULE_NOT_FOUND' } 
Sun, 06 Aug 2017 14:16:33 GMT eslint-plugin-import:resolver:node Resolving: client/test2 from: D:XXX\src\test.js 
Sun, 06 Aug 2017 14:16:33 GMT eslint-plugin-import:resolver:node resolve threw error: { Error: Cannot find module 'client/test2' from 'D:XXX\src' 
    at Function.module.exports [as sync] (D:XXX\node_modules\resolve\lib\sync.js:40:15) 
    at Object.exports.resolve (D:XXX\node_modules\eslint-import-resolver-node\index.js:18:28) 
    at v2 (D:XXX\node_modules\eslint-module-utils\resolve.js:79:23) 
    at withResolver (D:XXX\node_modules\eslint-module-utils\resolve.js:84:16) 
    at fullResolve (D:XXX\node_modules\eslint-module-utils\resolve.js:101:22) 
    at relative (D:XXX\node_modules\eslint-module-utils\resolve.js:46:10) 
    at resolve (D:XXX\node_modules\eslint-module-utils\resolve.js:172:12) 
    at Function.ExportMap.get (D:XXX\node_modules\eslint-plugin-import\lib\ExportMap.js:281:38) 
    at EventEmitter.handleImportDefault (D:XXX\node_modules\eslint-plugin-import\lib\rules\no-named-as-default-member.js:35:45) 
    at emitOne (events.js:101:20) code: 'MODULE_NOT_FOUND' } 

[4mD:XXX\src\test.js[24m 
    [2m1:1[22m [31merror[39m Resolve error: undefined                 [2mimport/no-unresolved[22m 
    [2m1:1[22m [31merror[39m Resolve error: undefined                 [2mimport/no-extraneous-dependencies[22m 
    [2m1:1[22m [31merror[39m 'client' should be listed in the project's dependencies. Run 'npm i -S client' to add it [2mimport/no-extraneous-dependencies[22m 
    [2m1:1[22m [31merror[39m Resolve error: undefined                 [2mimport/no-duplicates[22m 
    [2m1:1[22m [31merror[39m Resolve error: undefined                 [2mimport/extensions[22m 
    [2m1:1[22m [31merror[39m Resolve error: undefined                 [2mimport/no-named-as-default[22m 
    [2m1:1[22m [31merror[39m Resolve error: undefined                 [2mimport/no-named-as-default-member[22m 
    [2m1:8[22m [31merror[39m 'test' is defined but never used               [2mno-unused-vars[22m 
    [2m1:18[22m [31merror[39m Unable to resolve path to module 'client/test2'           [2mimport/no-unresolved[22m 
    [2m1:18[22m [31merror[39m Missing file extension for "client/test2"             [2mimport/extensions[22m 

[31m[1m✖ 10 problems (10 errors, 0 warnings) 
[22m[39m 

在這裏,你可以看到只有eslint-plugin-import:resolver:node時,沒有視線eslint-plugin-import:resolver:babel-module

我也試過這樣:

"settings": { 
    "import/resolver": "babel-module" 
} 

但結果是更糟糕:

[4mD:XXX\src\test.js[24m 
    [2m1:1[22m [31merror[39m Resolve error: undefined                 [2mimport/no-unresolved[22m 
    [2m1:1[22m [31merror[39m Resolve error: undefined                 [2mimport/no-extraneous-dependencies[22m 
    [2m1:1[22m [31merror[39m 'client' should be listed in the project's dependencies. Run 'npm i -S client' to add it [2mimport/no-extraneous-dependencies[22m 
    [2m1:1[22m [31merror[39m Resolve error: undefined                 [2mimport/no-duplicates[22m 
    [2m1:1[22m [31merror[39m Resolve error: undefined                 [2mimport/extensions[22m 
    [2m1:1[22m [31merror[39m Resolve error: undefined                 [2mimport/no-named-as-default[22m 
    [2m1:1[22m [31merror[39m Resolve error: undefined                 [2mimport/no-named-as-default-member[22m 
    [2m1:8[22m [31merror[39m 'test' is defined but never used               [2mno-unused-vars[22m 
    [2m1:18[22m [31merror[39m Unable to resolve path to module 'client/test2'           [2mimport/no-unresolved[22m 
    [2m1:18[22m [31merror[39m Missing file extension for "client/test2"             [2mimport/extensions[22m 

[31m[1m✖ 10 problems (10 errors, 0 warnings) 
[22m[39m 

依賴版本:

$ npm ls babel-plugin-module-resolver eslint-import-resolver-babel-module eslint-config-airbnb eslint-plugin-import eslint 
[email protected] D:\XXX 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
+-- [email protected] 
`-- [email protected] 

如何重寫父配置的插件設置?

回答

0

事實證明eslint-plugin-import接受了一個解析器列表,並逐個檢查它們,直到其中一個解析器正確解析爲止。