JavaScript's default exports are a footgun
Published on in JavaScript
It's too easy to accidentally import a default export with a misleading name.
Example:
- What I have wanted:
import useSWR from 'swr' // or import useSWRImmutable from 'swr/immutable'
- What I have accidentally done (more than once):
Then I have wasted time being confused by SWR not working like I expect it to.import useSWRImmutable from 'swr' // or import useSWR from 'swr/immutable'
Named exports would prevent such silly mistakes:
// OK:
import { useSWR } from 'swr'
import { useSWRImmutable } from 'swr/immutable'
// Error:
import { useSWRImmutable } from 'swr'
import { useSWR } from 'swr/immutable'
This is why I think it's bad to use default exports (unless you have a good reason).