You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.1 KiB
96 lines
2.1 KiB
4 years ago
|
# 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: https://github.com/xjamundx/eslint-plugin-modules
|