import/no-commonjs 限制
它的作用
禁止使用 CommonJS 的 require 调用。同时禁止使用 module.exports 和 exports.*。
为什么这是个问题?
ESM 模块或 TypeScript 使用 import 和 export 语法,而非 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