node/global-require 스타일
작동 방식
모듈의 상위 레벨 스코프에서만 require() 호출을 허용합니다
왜 문제가 되는가?
Node.js에서는 모듈 종속성을 require() 함수를 사용하여 포함합니다. 예를 들어:
js
var fs = require("fs");require()는 코드 어디에서든 호출될 수 있지만, 일부 스타일 가이드에서는 모듈의 상위 레벨에서만 호출하도록 규정하고 있습니다. 이렇게 하면 종속성을 더 쉽게 확인할 수 있기 때문입니다. 예를 들어, 함수 및 기타 문장 내부에 깊이 중첩된 경우 종속성을 파악하기 어렵습니다:
js
function foo() {
if (condition) {
var fs = require("fs");
}
}require()는 동기적으로 로드되기 때문에, 다른 위치에서 사용하면 성능 문제를 일으킬 수 있습니다. 또한, ES6 모듈은 import 및 export 문이 모듈 본문의 상위 레벨에서만 가능하다고 명시하고 있습니다.
예제
이 규칙에 대해 잘못된 코드 예시:
js
// 함수 내부에서 `require()` 호출은 허용되지 않습니다
function readFile(filename, callback) {
var fs = require("fs");
fs.readFile(filename, callback);
}
// 조건부 `require()`도 허용되지 않습니다
if (DEBUG) {
require("debug");
}
// switch 문 내부의 `require()`도 경고 대상입니다
switch (x) {
case "1":
require("1");
break;
}
// 화살표 함수 본문 내부에서 `require()` 호출은 불가능합니다
var getModule = (name) => require(name);
// 일반 함수 본문 내부에서도 `require()` 호출은 불가능합니다
function getModule(name) {
return require(name);
}
// try/catch 블록 내부에서도 `require()` 호출은 허용되지 않습니다
try {
require(unsafeModule);
} catch (e) {
console.log(e);
}이 규칙에 대해 올바른 코드 예시:
js
// 모든 형태의 `require()` 호출은 허용됩니다
require("x");
var y = require("y");
var z;
z = require("z").initialize();
// 모듈을 요구하고 함수 내에서 사용하는 것은 허용됩니다
var fs = require("fs");
function readFile(filename, callback) {
fs.readFile(filename, callback);
}
// 삼항 연산자를 사용해 어떤 모듈을 요구할지 결정할 수 있습니다
var logger = DEBUG ? require("dev-logger") : require("logger");
// 모듈의 끝부분에서 `require()`를 호출하는 것도 가능합니다
function doSomethingA() {}
function doSomethingB() {}
var x = require("x"),
z = require("z");사용 방법
이 규칙을 구성 파일 또는 CLI를 통해 활성화하려면 다음을 사용하세요:
json
{
"plugins": ["node"],
"rules": {
"node/global-require": "error"
}
}bash
oxlint --deny node/global-require --node-plugin