Skip to content
Permalink
9bfb9ba527
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
118 lines (91 sloc) 2.36 KB

import/group-exports

Reports when named exports are not grouped together in a single export declaration or when multiple assignments to CommonJS module.exports or exports object are present in a single file.

Rationale: An export declaration or module.exports assignment can appear anywhere in the code. By requiring a single export declaration all your exports will remain at one place, making it easier to see what exports a module provides.

Rule Details

This rule warns whenever a single file contains multiple named export declarations or multiple assignments to module.exports (or exports).

Valid

// A single named export declaration -> ok
export const valid = true
const first = true
const second = true

// A single named export declaration -> ok
export {
  first,
  second,
}
// Aggregating exports -> ok
export { default as module1 } from 'module-1'
export { default as module2 } from 'module-2'
// A single exports assignment -> ok
module.exports = {
  first: true,
  second: true
}
const first = true
const second = true

// A single exports assignment -> ok
module.exports = {
  first,
  second,
}
function test() {}
test.property = true
test.another = true

// A single exports assignment -> ok
module.exports = test
const first = true;
type firstType = boolean

// A single named export declaration (type exports handled separately) -> ok
export {first}
export type {firstType}

Invalid

// Multiple named export statements -> not ok!
export const first = true
export const second = true
// Aggregating exports from the same module -> not ok!
export { module1 } from 'module-1'
export { module2 } from 'module-1'
// Multiple exports assignments -> not ok!
exports.first = true
exports.second = true
// Multiple exports assignments -> not ok!
module.exports = {}
module.exports.first = true
// Multiple exports assignments -> not ok!
module.exports = () => {}
module.exports.first = true
module.exports.second = true
type firstType = boolean
type secondType = any

// Multiple named type export statements -> not ok!
export type {firstType}
export type {secondType}

When Not To Use It

If you do not mind having your exports spread across the file, you can safely turn this rule off.