# import-x/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: