Eslint参考手册
规则 | Rules
no-mixed-requires
在 Node.js 社区中,通常习惯将初始化与对require
其他变量声明的模块调用分开,有时也将它们按模块类型分组。此规则可帮助您执行此惯例。
规则细节
当启用此规则时,每条var
语句必须满足以下条件:
- 无或全部变量声明都必须声明(默认)
- 所有需要声明必须是相同类型(分组)
该规则区分了六种变量声明类型:
-
core
:声明所需的核心模块
-
file
:声明所需的文件模块
-
module
:从 node_modules 文件夹声明所需的模块
-
computed
:声明所需模块的类型无法确定(或者是因为它是计算的,或者是因为 require 没有参数被调用)
-
uninitialized
:未初始化的声明
-
other
:任何其他类型的声明
在本文件中,头四种类型在术语需求声明下总结。
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"*/
var fs = require('fs'),
i = 0;
var async = require('async'),
debug = require('diagnostics').someFunction('my-module'),
eslint = require('eslint');
具有默认选项的此规则的正确代码示例{ "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"
var fs = require('fs'),
async = require('async');
// invalid because of mixed types "file" and "unknown"
var foo = require('foo'),
bar = require(getBarModuleName());
allowCall
此规则的错误代码示例包含以下{ "allowCall": true }
选项:
/*eslint no-mixed-requires: ["error", { "allowCall": true }]*/
var async = require('async'),
debug = require('diagnostics').someFunction('my-module'), /* allowCall doesn't allow calling any function */
eslint = require('eslint');
此规则的正确代码示例包含以下{ "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 0.0.9 中引入。
资源
- Rule source
- Documentation source
规则 | Rules相关

ESLint 是一个代码规范和错误检查工具,有以下几个特性。所有东西都是可以插拔的。你可以调用任意的 rule api 或者 formatter api 去打包或者定义 rule or formatter。任意的 rule 都是独立的。没有特定的 coding style,你可以自己配置。
主页 | https://eslint.org/ |
源码 | https://github.com/eslint/eslint |
发布版本 | 4.12.0 |