Skip to content

Import and Export in JS

ES6 Syntax (.mjs)

  • Default Import/Export
// Export
export default ComponentDefault;
// import
import ComponentDef from './component'; // 'ComponentDef' can be any name.
  • Named Import/Export
// Export
export {component1, component2};
// import
import {component, component2} from './component';

Common JS Syntax (.js)`

  • Default Import/Export
// Export
module.exports = ComponentDefault};
// import
const ComponentDef = require('./component'); // 'ComponentDef' can be any name.
  • Named Import Export :
// Export
module.exports = {component1, component2};
// import
const {component1, component2} = require('./component');

**require vs import **

Featurerequire (CommonJS)import (ES Modules)
Syntaxconst module = require('module')import module from 'module'
ContextCommonJS (CJS)ES Modules (ESM)
Usage InNode.js (default)Modern JavaScript (Browsers, Node.js with "type": "module")
Loading TypeSynchronous (blocks execution until module loads) ⭐Asynchronous (supports import() for dynamic loading) ⭐
Static AnalysisNo (Cannot be optimized at compile time)Yes (Allows tree-shaking & optimization)
Dynamic ImportYes (Can be used inside functions)Yes (import() is available)
Top-Level UsageCan be used anywhere (inside functions, conditionally)Must be at the top-level (except dynamic import())
Default Export Handlingmodule.exports = value;export default value;
Named Export Handlingmodule.exports = { val1, val2 }; (Object Destructuring)export { val1, val2 }; (Direct Import)
Tree ShakingNo (Loads everything, even unused exports)Yes (Only imports used code) ⭐
File Extension.js.mjs or .js (with "type": "module")
Support in Node.jsDefault supportRequires "type": "module" in package.json or .mjs extension
Module ExecutionRuns immediately when requiredDeferred execution (module graph is analyzed first)

ES6 Default vs Named Export

default exports are specific to ES Modules (ESM) and do not exist in CommonJS (CJS).

FeatureDefault ExportNamed Export
DefinitionExports a single value per moduleExports multiple values per module
Syntaxexport default value;export { value1, value2 };
DeclarationCan be declared inline or laterEach export must be explicitly named
Number of ExportsOnly one per moduleMultiple per module
Import Syntaximport anyName from './module';import { value1, value2 } from './module';
Import NamingCan use any nameMust match exported names (unless using aliases)
AliasingImplicitly allows renamingRequires as keyword (import { value1 as alias })
Use CaseBest for exporting a single main function, class, or objectBest for utility functions, constants, or multiple exports
  • Default export: Imported without curly braces.
  • Named export: Imported with curly braces and the exact name.

Example default + {named Exports}

  • Export
// defining Function+ export default
export default function add(a, b) {
return a + b;
}
// defining Function + named export
export function multiply(a, b) {
return a * b;
}
// defining Variable
export const PI = 3.14;
// defining Function
function sub(a, b){
return a-b;
}
// export function
export sub;
  • Import
app.js
import add, { multiply, PI, sub } from './math.js';