no-mixed-requires
禁止将 require
调用与常规变量声明混合使用
此规则在 ESLint v7.0.0 中已 **弃用**。请在 eslint-plugin-n
中使用相应的规则。
在 Node.js 社区中,通常习惯于将使用 require
模块调用的初始化与其他变量声明分开,有时也会根据模块类型对它们进行分组。此规则可帮助您强制执行此约定。
规则详情
启用此规则时,每个 var
语句都必须满足以下条件
- 要么没有变量声明是 require 声明,要么所有变量声明都是 require 声明(默认值)
- 所有 require 声明必须是相同类型(分组)
此规则区分六种变量声明类型
core
:所需 核心模块 的声明file
:所需 文件模块 的声明module
:来自 node_modules 文件夹 的所需模块的声明computed
:所需模块的声明,其类型无法确定(因为它是计算的,或者因为 require 在没有参数的情况下被调用)uninitialized
:未初始化的声明other
:任何其他类型的声明
在本文档中,前四种类型在术语“require 声明”下进行了汇总。
var fs = require('fs'), // "core" \
async = require('async'), // "module" |- these are "require declaration"s
foo = require('./foo'), // "file" |
bar = require(getName()), // "computed" /
baz = 42, // "other"
bam; // "uninitialized"
选项
此规则可以具有一个对象文字选项,其两个属性的默认值为 false
。
使用一个布尔选项 true
配置此规则已弃用。
使用默认 { "grouping": false, "allowCall": false }
选项时,此规则的 **错误** 代码示例
/*eslint no-mixed-requires: "error"*/
使用默认 { "grouping": false, "allowCall": false }
选项时,此规则的 **正确** 代码示例
/*eslint no-mixed-requires: "error"*/
// only require declarations (grouping off)
var eventEmitter = require('events').EventEmitter,
myUtils = require('./utils'),
util = require('util'),
bar = require(getBarModuleName());
// only non-require declarations
var foo = 42,
bar = 'baz';
// always valid regardless of grouping because all declarations are of the same type
var foo = require('foo' + VERSION),
bar = require(getBarModuleName()),
baz = require();
grouping
使用 { "grouping": true }
选项时,此规则的 **错误** 代码示例
/*eslint no-mixed-requires: ["error", { "grouping": true }]*/
// invalid because of mixed types "core" and "module"
// invalid because of mixed types "file" and "unknown"
allowCall
使用 { "allowCall": true }
选项时,此规则的 **错误** 代码示例
/*eslint no-mixed-requires: ["error", { "allowCall": true }]*/
使用 { "allowCall": true }
选项时,此规则的 **正确** 代码示例
/*eslint no-mixed-requires: ["error", { "allowCall": true }]*/
var async = require('async'),
debug = require('diagnostics')('my-module'),
eslint = require('eslint');
已知限制
-
实现不知道任何名为
require
的本地函数,这些函数可能会隐藏 Node.js 的全局require
。 -
在内部,核心模块列表通过
require("repl")._builtinLibs
获取。如果您为 ESLint 和您的应用程序使用不同的 Node.js 版本,则每个版本的核心模块列表可能不同。上述_builtinLibs
属性在 0.8 中可用,对于早期版本,使用硬编码的模块名称列表作为后备。如果您的 Node.js 版本早于 0.6,则该列表可能不准确。
何时不使用它
如果您使用诸如 UMD 之类的模式,其中 require
d 模块未加载到变量声明中,则此规则显然对您不起作用。
版本
此规则是在 ESLint v0.0.9 中引入的。