Skip to content
← Back to rules

import/no-commonjs 限制

它的作用

禁止使用 CommonJS 的 require 调用。同时禁止使用 module.exportsexports.*

为什么这是个问题?

ESM 模块或 TypeScript 使用 importexport 语法,而非 CommonJS 语法。 此规则强制使用更现代的模块系统,以提高代码库中的可维护性和一致性。

示例

此规则的错误代码示例:

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 require 加载资源时非常有用。

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

参考资料