DEV Community

Vaibhav Namburi
Vaibhav Namburi

Posted on

8 1

The issue with export default

"Wait there's an issue with export default ?" - that was my reaction too

The issue with export default comes down with consistency and scalability. Almost everything is perfect when you build code to serve you and your tester, but when things grow, your team grows you need to ensure practices and patterns are built for scale.

One of the most important patterns for scale is modularization and componentization, the words popularised by React, Vue and the likes. The concept of decoupling and separation of concerns is extremely important in this quest for scale, anyway - after teaching and going through 1000's of pull requests in my career a common issue I'd notice is the lack of consistencies when export default is used to expose a component.

export default (obj) => _.reduce(obj, (accum, val, key) => {
    if (!key) return accum;
    accum[key] = val;
    return accum;
}, {}) 

Enter fullscreen mode Exit fullscreen mode

Here we've got a simple function that rids an object of any empty/null values. For the sake of this blog, we have this in a helpers folder and call it cleanObject.helpers.js

All is dandy, except for when you start seeing people import this one helper in all sorts of ways across the project

// One file
import cleanObject from '@/helpers/cleanObject.helpers'
// Another file
import ObjectCleaner from '@/helpers/cleanObject.helpers'
// One more
import NullChecker from '@/helpers/cleanObject.helpers'
Enter fullscreen mode Exit fullscreen mode

Sure you can expect people to put it quite literal to the name of the file, however that happens not as often as expected.

Well whats the magical hyped up fix for all of this ?

Easy, just stop export defaulting, go with export const, because now that you've got named functions you're exporting, the importer is constrained to the naming convention defined by the author, which maintains consistency.

Or another way to do it, is to export the function in a hashmap/object

// ... code
export default { cleanObject: <name of function above> }

Enter fullscreen mode Exit fullscreen mode

There you go, a nice and easy fix to making your code patterns more consistent 💪


Follow me on LinkedIn || Twitter, heaps more articles to come

If you've got a topic you'd like me to write on - tweet me 😀

Also, I'd always love feedback on this and if it was helpful in the comments 👇

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (3)

Collapse
 
karataev profile image
Eugene Karataev
  1. Stop using export default.
  2. Other team members import your module as following
import { cleanObject as NullChecker } from "@/helpers/cleanObject.helpers";
Enter fullscreen mode Exit fullscreen mode

🤔

Collapse
 
scriptex profile image
Atanas Atanasov

This comment made me giggle :D

Collapse
 
veebuv profile image
Vaibhav Namburi

Can't win em all!

Can block that with linter checks though 🚀

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more