Files
react-native-devtools-frontend/node_modules/eslint-plugin-import/docs/rules/no-commonjs.md
T
Tim van der Lippe fdbd42e2f8 Add eslint-import-plugin to node_modules
Will be used to make sure no default exports are in DevTools.

The PRESUBMIT.py has been updated to skip running the formatting check
if node_modules files are affected, to workaround crbug.com/1068198.

DISABLE_THIRD_PARTY_CHECK=Add plugin to node_modules

Bug: 1068198
Change-Id: I04d4dc813daa01099f21d40edf47aaefcc0b045f
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2135610
Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
Auto-Submit: Tim van der Lippe <tvanderlippe@chromium.org>
Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
2020-04-07 14:27:34 +00:00

2.1 KiB

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:

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:

/*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:

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.

Allow primitive modules

If allowPrimitiveModules option is set to true, the following is valid:

/*eslint no-commonjs: [2, { allowPrimitiveModules: true }]*/

module.exports = "foo"
module.exports = function rule(context) { return { /* ... */ } }

but this is still reported:

/*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