版本

global-require

要求 require() 调用位于顶层模块作用域

重要提示

此规则在 ESLint v7.0.0 中已弃用。请使用 eslint-plugin-n 中的相应规则

了解更多

在 Node.js 中,模块依赖项使用 require() 函数引入,例如

var fs = require("fs");

虽然 require() 可以在代码中的任何位置调用,但一些风格指南规定它应该只在模块的顶层调用,以便更容易识别依赖项。例如,当依赖项深深嵌套在函数和其他语句中时,识别它们可以说更困难

function foo() {
    if (condition) {
        var fs = require("fs");
    }
}

由于 require() 执行同步加载,因此在其他位置使用时可能会导致性能问题。

此外,ES6 模块强制规定 importexport 语句只能出现在模块主体的顶层。

规则详情

此规则要求所有 require() 调用都位于模块的顶层,类似于 ES6 importexport 语句,它们也只能出现在顶层。

此规则的错误代码示例

在 Playground 中打开
/*eslint global-require: "error"*/

// calling require() inside of a function is not allowed
function readFile(filename, callback) {
    var fs = require("fs");
    fs.readFile(filename, callback);
}

// conditional requires like this are also not allowed
if (DEBUG) {
    require("debug");
}

// a require() in a switch statement is also flagged
switch (x) {
    case "1":
        require("1");
        break;
}

// you may not require() inside an arrow function body
var getModule = (name) => require(name);

// you may not require() inside of a function body as well
function getModule(name) {
    return require(name);
}

// you may not require() inside of a try/catch block
try {
    require(unsafeModule);
} catch (e) {
    console.log(e);
}

此规则的正确代码示例

在 Playground 中打开
/*eslint global-require: "error"*/

// all these variations of require() are ok
require("x");
var y = require("y");
var z;
z = require("z").initialize();

// requiring a module and using it in a function is ok
var fs = require("fs");
function readFile(filename, callback) {
    fs.readFile(filename, callback);
}

// you can use a ternary to determine which module to require
var logger = DEBUG ? require("dev-logger") : require("logger");

// if you want you can require() at the end of your module
function doSomethingA() {}
function doSomethingB() {}
var x = require("x"),
    z = require("z");

何时不使用它

如果您的模块必须使用来自文件系统的信息进行初始化,或者如果模块仅在极少数情况下使用并且加载它会导致明显的开销,那么禁用该规则可能是有意义的。如果您需要在 try/catchrequire() 一个可选依赖项,您可以对该依赖项禁用此规则,使用 // eslint-disable-line global-require 注释。

版本

此规则在 ESLint v1.4.0 中引入。

资源

更改语言