diff --git a/docs/rules/no-extraneous-dependencies.md b/docs/rules/no-extraneous-dependencies.md index 36aef8f9d..05c3763fb 100644 --- a/docs/rules/no-extraneous-dependencies.md +++ b/docs/rules/no-extraneous-dependencies.md @@ -3,6 +3,8 @@ Forbid the import of external modules that are not declared in the `package.json`'s `dependencies`, `devDependencies`, `optionalDependencies` or `peerDependencies`. The closest parent `package.json` will be used. If no `package.json` is found, the rule will not lint anything. This behaviour can be changed with the rule option `packageDir`. +Modules have to be installed for this rule to work. + ### Options This rule supports the following options: diff --git a/src/rules/no-extraneous-dependencies.js b/src/rules/no-extraneous-dependencies.js index ce5041c97..d3e8d0405 100644 --- a/src/rules/no-extraneous-dependencies.js +++ b/src/rules/no-extraneous-dependencies.js @@ -2,6 +2,7 @@ import path from 'path' import fs from 'fs' import readPkgUp from 'read-pkg-up' import minimatch from 'minimatch' +import resolve from 'eslint-module-utils/resolve' import importType from '../core/importType' import isStaticRequire from '../core/staticRequire' @@ -57,6 +58,10 @@ function reportIfMissing(context, deps, depsOptions, node, name) { if (importType(name, context) !== 'external') { return } + const resolved = resolve(name, context) + if (!resolved) { + return + } const splitName = name.split('/') const packageName = splitName[0][0] === '@' ? splitName.slice(0, 2).join('/') diff --git a/tests/files/node_modules/@org/not-a-dependency/foo.js b/tests/files/node_modules/@org/not-a-dependency/foo.js new file mode 100644 index 000000000..e69de29bb diff --git a/tests/files/node_modules/@org/not-a-dependency/index.js b/tests/files/node_modules/@org/not-a-dependency/index.js new file mode 100644 index 000000000..e69de29bb diff --git a/tests/files/node_modules/chai/index.js b/tests/files/node_modules/chai/index.js new file mode 100644 index 000000000..e69de29bb diff --git a/tests/files/node_modules/not-a-dependency/index.js b/tests/files/node_modules/not-a-dependency/index.js new file mode 100644 index 000000000..e69de29bb diff --git a/tests/files/package.json b/tests/files/package.json index 3be7b41ae..0a60f28d3 100644 --- a/tests/files/package.json +++ b/tests/files/package.json @@ -8,7 +8,7 @@ "eslint": "2.x" }, "dependencies": { - "@scope/core": "^1.0.0", + "@org/package": "^1.0.0", "jquery": "^3.1.0", "lodash.cond": "^4.3.0", "pkg-up": "^1.0.0" diff --git a/tests/src/rules/no-extraneous-dependencies.js b/tests/src/rules/no-extraneous-dependencies.js index a2e1955ec..217783115 100644 --- a/tests/src/rules/no-extraneous-dependencies.js +++ b/tests/src/rules/no-extraneous-dependencies.js @@ -30,7 +30,7 @@ ruleTester.run('no-extraneous-dependencies', rule, { test({ code: 'import "fs"'}), test({ code: 'import "./foo"'}), test({ code: 'import "lodash.isarray"'}), - test({ code: 'import "@scope/core"'}), + test({ code: 'import "@org/package"'}), test({ code: 'import "electron"', settings: { 'import/core-modules': ['electron'] } }), test({ code: 'import "eslint"' }), @@ -57,7 +57,7 @@ ruleTester.run('no-extraneous-dependencies', rule, { test({ code: 'import chai from "chai"', options: [{devDependencies: ['*.test.js', '*.spec.js']}], - filename: 'foo.spec.js', + filename: path.join(process.cwd(), 'foo.spec.js'), }), test({ code: 'import chai from "chai"', @@ -79,17 +79,17 @@ ruleTester.run('no-extraneous-dependencies', rule, { }], }), test({ - code: 'var donthaveit = require("@scope/donthaveit")', + code: 'var donthaveit = require("@org/not-a-dependency")', errors: [{ ruleId: 'no-extraneous-dependencies', - message: '\'@scope/donthaveit\' should be listed in the project\'s dependencies. Run \'npm i -S @scope/donthaveit\' to add it', + message: '\'@org/not-a-dependency\' should be listed in the project\'s dependencies. Run \'npm i -S @org/not-a-dependency\' to add it', }], }), test({ - code: 'var donthaveit = require("@scope/donthaveit/lib/foo")', + code: 'var donthaveit = require("@org/not-a-dependency/foo")', errors: [{ ruleId: 'no-extraneous-dependencies', - message: '\'@scope/donthaveit\' should be listed in the project\'s dependencies. Run \'npm i -S @scope/donthaveit\' to add it', + message: '\'@org/not-a-dependency\' should be listed in the project\'s dependencies. Run \'npm i -S @org/not-a-dependency\' to add it', }], }), test({