Skip to content
← Back to rules

import/no-commonjs 제한

작동 방식

CommonJS의 require 호출 사용을 금지합니다. 또한 module.exportsexports.*도 금지합니다.

왜 문제인가요?

ESM 모듈이나 TypeScript는 CommonJS 구문 대신 importexport 문법을 사용합니다.
이 규칙은 코드베이스 전반에서 유지보수성과 일관성을 높이기 위해 더 현대적인 모듈 시스템 사용을 강제합니다.

예시

이 규칙에 부적절한 코드 예시:

js
var mod = require("fs");

var exports = (module.exports = {});

exports.sayHello = function () {
  return "Hello";
};

module.exports = "Hola";

이 규칙에 적절한 코드 예시:

js
var a = b && require("c");

if (typeof window !== "undefined") {
  require("somelib");
}

var fs = null;
try {
  fs = require("fs");
} catch (error) {}

구성

이 규칙은 다음 속성을 가진 구성 객체를 수용합니다.

allowConditionalRequire

type: boolean

기본값: true

true로 설정되면 조건부 require() 호출(예: if 문 내부 또는 try-catch 블록 내부)을 허용합니다.
이는 ESM import가 지원되지 않을 경우 조건부로 CommonJS requires를 로드해야 하는 경우에 유용합니다.

allowPrimitiveModules

type: boolean

기본값: false

allowPrimitiveModules 옵션이 true로 설정된 경우, 아래와 같은 코드는 유효합니다:

js
module.exports = "foo";
module.exports = function rule(context) {
  return {
    /* ... */
  };
};

그러나 아래 코드는 여전히 경고 대상입니다:

js
module.exports = { x: "y" };
exports.z = function bark() {
  /* ... */
};

allowRequire

type: boolean

기본값: false

true로 설정되면 require 호출이 유효합니다:

js
var mod = require("./mod");

그러나 module.exports는 일반적으로 경고됩니다.

사용 방법

이 규칙을 설정 파일 또는 CLI를 통해 활성화하려면 다음을 사용할 수 있습니다:

json
{
  "plugins": ["import"],
  "rules": {
    "import/no-commonjs": "error"
  }
}
bash
oxlint --deny import/no-commonjs --import-plugin

참고 자료