非常教程

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相关

1.accessor-pairs
2.array-bracket-newline
3.array-bracket-spacing
4.array-callback-return
5.array-element-newline
6.arrow-body-style
7.arrow-parens
8.arrow-spacing
9.block-scoped-var
10.block-spacing
11.brace-style
12.callback-return
13.camelcase
14.capitalized-comments
15.class-methods-use-this
16.comma-dangle
17.comma-spacing
18.comma-style
19.complexity
20.computed-property-spacing
21.consistent-return
22.consistent-this
23.constructor-super
24.curly
25.default-case
26.dot-location
27.dot-notation
28.eol-last
29.eqeqeq
30.for-direction
31.func-call-spacing
32.func-name-matching
33.func-names
34.func-style
35.function-paren-newline
36.generator-star
37.generator-star-spacing
38.getter-return
39.global-require
40.global-strict
41.guard-for-in
42.handle-callback-err
43.id-blacklist
44.id-length
45.id-match
46.implicit-arrow-linebreak
47.indent
48.indent-legacy
49.init-declarations
50.jsx-quotes
51.key-spacing
52.keyword-spacing
53.line-comment-position
54.linebreak-style
55.lines-around-comment
56.lines-around-directive
57.lines-between-class-members
58.max-depth
59.max-len
60.max-lines
61.max-nested-callbacks
62.max-params
63.max-statements
64.max-statements-per-line
65.multiline-comment-style
66.multiline-ternary
67.new-cap
68.new-parens
69.newline-after-var
70.newline-before-return
71.newline-per-chained-call
72.no-alert
73.no-array-constructor
74.no-arrow-condition
75.no-await-in-loop
76.no-bitwise
77.no-buffer-constructor
78.no-caller
79.no-case-declarations
80.no-catch-shadow
81.no-class-assign
82.no-comma-dangle
83.no-compare-neg-zero
84.no-cond-assign
85.no-confusing-arrow
86.no-console
87.no-const-assign
88.no-constant-condition
89.no-continue
90.no-control-regex
91.no-debugger
92.no-delete-var
93.no-div-regex
94.no-dupe-args
95.no-dupe-class-members
96.no-dupe-keys
97.no-duplicate-case
98.no-duplicate-imports
99.no-else-return
100.no-empty
Eslint

ESLint 是一个代码规范和错误检查工具,有以下几个特性。所有东西都是可以插拔的。你可以调用任意的 rule api 或者 formatter api 去打包或者定义 rule or formatter。任意的 rule 都是独立的。没有特定的 coding style,你可以自己配置。

主页 https://eslint.org/
源码 https://github.com/eslint/eslint
发布版本 4.12.0

Eslint目录

1.指南 | Guide
2.规则 | Rules