Skip to main content

Command Palette

Search for a command to run...

JavaScript Modules: Import and Export Explained

Updated
6 min readView as Markdown

As JavaScript applications grow, managing code becomes harder.

A small project may start with:

  • One file

  • A few functions

  • Simple logic

But over time, projects grow into:

  • Hundreds of functions

  • Multiple features

  • Large teams

  • Thousands of lines of code

Without proper organization, the codebase quickly becomes messy and difficult to maintain.

That’s why JavaScript modules exist.

Modules help developers split code into smaller, reusable, organized files.

In this blog, you’ll learn:

  • Why modules are needed

  • How export works

  • How import works

  • Default vs named exports

  • Why modular code is important


The Problem Before Modules

Imagine putting everything inside one file.

function login() {}
function logout() {}
function calculatePrice() {}
function sendEmail() {}
function createOrder() {}
function updateProfile() {}

At first, this seems manageable.

But eventually:

  • Files become huge

  • Finding code becomes difficult

  • Bugs become harder to track

  • Multiple developers overwrite each other’s work

  • Reusing code becomes painful

This is called a monolithic code structure.


Why Modules Are Needed

Modules solve this problem by allowing us to split code into separate files.

Instead of one giant file:

project/
│
├── auth.js
├── payment.js
├── email.js
├── profile.js
└── app.js

Each file handles one responsibility.

This makes code:

  • Easier to understand

  • Easier to maintain

  • Easier to reuse

  • Easier to debug


What Is a JavaScript Module?

A module is simply:

A JavaScript file that can export code and import code from other files.

Modules help different files communicate with each other in a clean and organized way.


Exporting Functions or Values

To use code from another file, we must first export it.


Example: Exporting a Function

math.js

export function add(a, b) {
  return a + b;
}

Here:

  • add() is exported

  • Other files can now use it


Importing Modules

Now another file can import the function.

app.js

import { add } from "./math.js";

console.log(add(2, 3));

Output

5

How Import/Export Works

math.js
   │
   │ exports add()
   ↓
app.js
   │
   │ imports add()
   ↓
Uses the function

Exporting Multiple Things

A module can export multiple functions or values.

utils.js

export function add(a, b) {
  return a + b;
}

export function subtract(a, b) {
  return a - b;
}

export const PI = 3.14;

Importing Multiple Exports

import { add, subtract, PI } from "./utils.js";

console.log(add(5, 2));
console.log(subtract(5, 2));
console.log(PI);

Named Exports

The exports above are called named exports.

Why?

Because each export has a specific name:

  • add

  • subtract

  • PI

When importing named exports:

  • The names must match exactly

Default Exports

A module can also have one default export.

Default exports are useful when a file mainly exposes one thing.


Example: Default Export

greet.js

export default function greet(name) {
  return `Hello ${name}`;
}

Importing Default Export

import greet from "./greet.js";

console.log(greet("Alex"));

Output

Hello Alex

Difference Between Named and Default Exports

Feature Named Export Default Export
Multiple per file Yes No
Import name must match Yes No
Uses braces {} Yes No
Best for Multiple utilities Main functionality

Named Export Example

export function login() {}

Import:

import { login } from "./auth.js";

Default Export Example

export default function login() {}

Import:

import loginUser from "./auth.js";

Notice:

  • The imported name can be different

  • No curly braces are used


File Dependency Diagram

          app.js
         /   |   \
        /    |    \
       ↓     ↓     ↓
   auth.js  api.js  payment.js

app.js depends on multiple modules.

This structure keeps projects organized.


Real-World Example

Imagine an e-commerce application.

Instead of writing everything in one file:

store/
│
├── cart.js
├── products.js
├── payments.js
├── users.js
└── app.js

Each module handles one feature.

This is much easier to scale.


Benefits of Modular Code

1. Better Organization

Each file has a clear responsibility.

Example:

  • auth.js → authentication

  • payment.js → payments

  • email.js → email logic


2. Easier Maintenance

Finding bugs becomes easier because code is separated logically.


3. Reusability

Modules can be reused across multiple parts of an application.


4. Cleaner Collaboration

Teams can work on different modules without constantly interfering with each other.


5. Easier Testing

Smaller modules are simpler to test individually.


Module Import/Export Flow

utils.js
│
├── export add()
├── export subtract()
└── export PI

          ↓

app.js
│
├── import add
├── import subtract
└── import PI

Common Beginner Mistakes

Forgetting export

function add(a, b) {
  return a + b;
}

This function cannot be imported because it was not exported.


Wrong Import Name

import { Add } from "./utils.js";

If the export name is add, this will fail because JavaScript is case-sensitive.


Mixing Default and Named Imports

Named imports use braces:

import { add } from "./utils.js";

Default imports do not:

import greet from "./greet.js";

Modules Make Large Applications Possible

Modern JavaScript frameworks like:

  • React

  • Next.js

  • Vue

  • Node.js applications

all heavily depend on modules.

Without modules:

  • Large applications would become extremely difficult to manage

Modules are one of the foundations of modern JavaScript development.


Practice Exercise

Create these files:

math.js

export function multiply(a, b) {
  return a * b;
}

app.js

import { multiply } from "./math.js";

console.log(multiply(4, 5));

Try running the files and observe how modules work together.


Final Thoughts

JavaScript modules help developers organize code into smaller, manageable pieces.

The core concepts are simple:

  • export makes code available

  • import brings code into another file

You’ll use modules in almost every modern JavaScript project.

Start small:

  • Create separate files

  • Export simple functions

  • Import them elsewhere

Over time, modular thinking becomes natural — and it dramatically improves the quality of your code.

1 views