# import/no-commonjs Reports `require([string])` function calls. Will not report if >1 argument, or single argument is not a literal string. Reports `module.exports` or `exports.*`, also. Intended for temporary use when migrating to pure ES6 modules. ## Rule Details This will be reported: ```js var mod = require('./mod') , common = require('./common') , fs = require('fs') , whateverModule = require('./not-found') module.exports = { a: "b" } exports.c = "d" ``` ### Allow require If `allowRequire` option is set to `true`, `require` calls are valid: ```js /*eslint no-commonjs: [2, { allowRequire: true }]*/ var mod = require('./mod'); ``` but `module.exports` is reported as usual. ### Allow conditional require By default, conditional requires are allowed: ```js var a = b && require("c") if (typeof window !== "undefined") { require('that-ugly-thing'); } var fs = null; try { fs = require("fs") } catch (error) {} ``` If the `allowConditionalRequire` option is set to `false`, they will be reported. If you don't rely on synchronous module loading, check out [dynamic import](https://github.com/airbnb/babel-plugin-dynamic-import-node). ### Allow primitive modules If `allowPrimitiveModules` option is set to `true`, the following is valid: ```js /*eslint no-commonjs: [2, { allowPrimitiveModules: true }]*/ module.exports = "foo" module.exports = function rule(context) { return { /* ... */ } } ``` but this is still reported: ```js /*eslint no-commonjs: [2, { allowPrimitiveModules: true }]*/ module.exports = { x: "y" } exports.z = function boop() { /* ... */ } ``` This is useful for things like ESLint rule modules, which must export a function as the module. ## When Not To Use It If you don't mind mixing module systems (sometimes this is useful), you probably don't want this rule. It is also fairly noisy if you have a larger codebase that is being transitioned from CommonJS to ES6 modules. ## Contributors Special thanks to @xjamundx for donating the module.exports and exports.* bits. ## Further Reading - [`no-amd`](./no-amd.md): report on AMD `require`, `define` - Source: