import/no-commonjs Restriction ​
What it does ​
Forbids the use of CommonJS require
calls. Also forbids module.exports
and exports.*
.
Why is this bad? ​
ESM modules or Typescript uses import
and export
syntax instead of CommonJS syntax. This rule enforces the use of more modern module systems to improve maintainability and consistency across the codebase.
Examples ​
Examples of incorrect code for this rule:
var mod = require("fs");
var exports = (module.exports = {});
exports.sayHello = function () {
return "Hello";
};
module.exports = "Hola";
Examples of correct code for this rule:
var a = b && require("c");
if (typeof window !== "undefined") {
require("somelib");
}
var fs = null;
try {
fs = require("fs");
} catch (error) {}
Allow require ​
If allowRequire
option is set to true
, require
calls are valid:
var mod = require("./mod");
but module.exports
is reported as usual.
Allow conditional require ​
By default, conditional requires are allowed, If the allowConditionalRequire
option is set to false
, they will be reported.
Allow primitive modules ​
If allowPrimitiveModules
option is set to true, the following is valid:
module.exports = "foo";
module.exports = function rule(context) {
return {
/* ... */
};
};
but this is still reported:
module.exports = { x: "y" };
exports.z = function bark() {
/* ... */
};
How to use ​
To enable this rule in the CLI or using the config file, you can use:
oxlint --deny import/no-commonjs --import-plugin
{
"plugins": ["import"],
"rules": {
"import/no-commonjs": "error"
}
}