Ensures an imported module can be resolved to a module on the local filesystem,
as defined by standard Node require.resolve
behavior.
See settings for customization options for the resolution (i.e.
additional filetypes, NODE_PATH
, etc.)
This rule can also optionally report on unresolved modules in CommonJS require('./foo')
calls and AMD require(['./foo'], function (foo) {...})
and define(['./foo'], function (foo) {...})
.
To enable this, send { commonjs: true/false, amd: true/false }
as a rule option.
Both are disabled by default.
If you are using Webpack, see the section on resolvers.
By default, only ES6 imports will be resolved:
/*eslint import/no-unresolved: 2*/
import x from './foo' // reports if './foo' cannot be resolved on the filesystem
If {commonjs: true}
is provided, single-argument require
calls will be resolved:
/*eslint import/no-unresolved: [2, { commonjs: true }]*/
const { default: x } = require('./foo') // reported if './foo' is not found
require(0) // ignored
require(['x', 'y'], function (x, y) { /*...*/ }) // ignored
Similarly, if { amd: true }
is provided, dependency paths for define
and require
calls will be resolved:
/*eslint import/no-unresolved: [2, { amd: true }]*/
define(['./foo'], function (foo) { /*...*/ }) // reported if './foo' is not found
require(['./foo'], function (foo) { /*...*/ }) // reported if './foo' is not found
const { default: x } = require('./foo') // ignored
Both may be provided, too:
/*eslint import/no-unresolved: [2, { commonjs: true, amd: true }]*/
const { default: x } = require('./foo') // reported if './foo' is not found
define(['./foo'], function (foo) { /*...*/ }) // reported if './foo' is not found
require(['./foo'], function (foo) { /*...*/ }) // reported if './foo' is not found
This rule has its own ignore list, separate from import/ignore
. This is because you may want to know whether a module can be located, regardless of whether it can be parsed for exports: node_modules
, CoffeeScript files, etc. are all good to resolve properly, but will not be parsed if configured as such via import/ignore
.
To suppress errors from files that may not be properly resolved by your resolver settings, you may add an ignore
key with an array of RegExp
pattern strings:
/*eslint import/no-unresolved: [2, { ignore: ['\\.img$'] }]*/
import { x } from './mod' // may be reported, if not resolved to a module
import coolImg from '../../img/coolImg.img' // will not be reported, even if not found
By default, this rule will report paths whose case do not match the underlying filesystem path, if the FS is not case-sensitive. To disable this behavior, set the caseSensitive
option to false
.
/*eslint import/no-unresolved: [2, { caseSensitive: true (default) | false }]*/
const { default: x } = require('./foo') // reported if './foo' is actually './Foo' and caseSensitive: true
The caseSensitive
option does not detect case for the current working directory. The caseSensitiveStrict
option allows checking cwd
in resolved path. By default, the option is disabled.
/*eslint import/no-unresolved: [2, { caseSensitiveStrict: true }]*/
// Absolute paths
import Foo from `/Users/fOo/bar/file.js` // reported, /Users/foo/bar/file.js
import Foo from `d:/fOo/bar/file.js` // reported, d:/foo/bar/file.js
// Relative paths, cwd is Users/foo/
import Foo from `./../fOo/bar/file.js` // reported
If you're using a module bundler other than Node or Webpack, you may end up with a lot of false positive reports of missing dependencies.
- Resolver plugins
- Node resolver (default)
- Webpack resolver
import/ignore
global setting