Bun Module System
Bun supports multiple module systems, including ES Modules (ESM), CommonJS (CJS), and Bun's own module resolution. This chapter introduces Bun's module system and its features.
ES Modules (ESM)
ES Modules are JavaScript's standard module system, and the recommended way to use Bun.
Exporting Modules
Importing Modules
Dynamic Import
Re-exporting
CommonJS (CJS)
Bun fully supports the CommonJS module system, ensuring compatibility with the existing Node.js ecosystem.
CommonJS Exports
CommonJS Imports
ESM and CJS Interoperability
Importing CJS in ESM
Importing ESM in CJS
Module Resolution
Resolution Order
Bun resolves modules in the following order:
- Built-in modules:
bun:*,node:* - Absolute paths:
/path/to/module - Relative paths:
./module,../module - node_modules: Search upward for node_modules
File Extensions
Path Aliases
Configure in tsconfig.json:
Using aliases:
Bun Built-in Modules
bun Module
Common bun:* Modules
Node.js Built-in Modules
Bun supports most Node.js built-in modules:
Using node: Prefix
Importing JSON and Other Files
Importing JSON
Importing Text Files
Importing TOML
Module Caching
Caching Mechanism
Bun caches loaded modules; each module is executed only once:
Clearing Cache
Circular Dependencies
Handling Circular Dependencies
Avoiding Circular Dependencies
package.json Configuration
type Field
exports Field
Conditional Exports
Bun will prioritize the bun condition.
Summary
This chapter covered:
- ✅ ES Modules import/export syntax
- ✅ CommonJS module system
- ✅ ESM and CJS interoperability
- ✅ Module resolution rules and path aliases
- ✅ Bun and Node.js built-in modules
- ✅ JSON, TOML, and other file imports
- ✅ Module caching and circular dependency handling
Next Steps
Continue reading TypeScript Support to learn about Bun's native TypeScript support.