# 支持的模块格式

URL: https://caijiao.org/bun/bundler/modules
Source: docs/bun/bundler/modules.md
Description: 介绍 Bun 支持的各种模块格式，包括 CommonJS、ESM、以及 TypeScript 模块等，帮助开发者理解如何在不同的模块系统中使用 Bun 进行开发和构建。

[Bun](/bun/) 是一个现代化的 [JavaScript](/javascript/) 运行时，支持多种常见的模块格式。它不仅支持传统的 CommonJS 模块，还原生支持 ES 模块（ESM），并能高效处理 TypeScript 模块。Bun 的模块解析机制使得开发者可以方便地在多种模块系统中进行开发，并且在构建过程中保持高效。

## 1. CommonJS（CJS）

Bun 完全兼容 CommonJS 格式的模块，允许开发者在 Bun 环境中使用传统的 `require()` 和 `module.exports` 语法。无论是老旧的 Node.js 库，还是基于 CommonJS 的模块，Bun 都能高效加载和运行。

```js
// CommonJS 示例
const express = require('express');
const app = express();
````

## 2. ES 模块（ESM）

Bun 也原生支持 ES 模块（ESM），并且是其推荐的模块格式。你可以使用 `import` 和 `export` 语法，并享受原生支持的模块加载方式。Bun 通过高效的解析和执行，使得使用 ESM 的项目更加流畅和高效。

```js
// ESM 示例
import express from 'express';
const app = express();
```

## 3. TypeScript 模块

Bun 完全支持 TypeScript 模块，可以直接运行 `.ts` 文件，而无需进行额外的转译。开发者可以在 TypeScript 项目中使用 Bun 来快速执行代码和进行调试。

```ts
// TypeScript 示例
import express from 'express';
const app = express();
```

## 4. JSON 模块

Bun 还支持直接导入 JSON 文件作为模块。你可以通过 `import` 语法直接加载 JSON 数据，并将其作为模块的输出。

```js
import data from './data.json';
console.log(data);
```

## 5. 动态导入

Bun 同样支持动态导入，允许在运行时根据条件动态加载模块，这对于按需加载和懒加载场景特别有用。

```js
if (someCondition) {
  const { default: module } = await import('./module.js');
}
```

## 总结

Bun 提供了对多种模块格式的全面支持，包括 CommonJS、ESM、TypeScript 模块以及 JSON 文件模块。这使得开发者可以在 Bun 环境中灵活地使用不同的模块系统，享受高效的构建和执行体验。
