Skip to content
← Back to rules

import/no-commonjs 制限

何を行うか

CommonJS の require 呼び出しの使用を禁止します。また、module.exports および exports.* も禁止します。

なぜこれは良くないのか?

ESM モジュールまたは TypeScript では、CommonJS の構文ではなく import および export 構文を使用します。 このルールは、コードベース全体での保守性と一貫性を向上させるために、より現代的なモジュールシステムの使用を強制します。

このルールに違反する 誤った 例:

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

default: true

true に設定された場合、条件付きの require() 呼び出し(たとえば if 文や try-catch ブロック内)を許可します。 これは、ESM のインポートがサポートされていない場所で、条件付きに CommonJS による読み込みが必要な場合に便利です。

allowPrimitiveModules

type: boolean

default: 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

default: 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

参照