no-mixed-requires
不允许将调用require与常规变量声明混合使用(no-mixed-requires)
在 Node.js 社区中,通常习惯将初始化与对require
其他变量声明的模块调用分开,有时也将它们按模块类型分组。此规则可帮助您执行此惯例。
规则细节
当启用此规则时,每条var
语句必须满足以下条件:
- 无或全部变量声明都必须声明(默认)
- 所有需要声明必须是相同类型(分组)
该规则区分了六种变量声明类型:
core
:声明所需的核心模块
file
:声明所需的文件模块
module
:从 node_module
s 文件夹声明所需的模块
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 中引入。