JavaScript模块化需区分命名导出(适合多变量,支持重命名)和默认导出(每模块仅一个,用于主功能),导入须严格对应语法,且export/import必须在顶层作用域。

JavaScript 模块化开发中管理变量导出与导入,核心是用好 命名导出 和 默认导出 两种机制,配合清晰的组织方式,避免混乱和意外暴露。
优先用命名导出管理多个变量
当一个模块要提供多个配置项、工具函数或常量时,命名导出最直观、安全且利于 tree-shaking:
- 可在声明时直接加
export,比如:export const API_URL = 'https://api.example.com';export const MAX_RETRY = 3;export function formatDate(date) { return date.toISOString().slice(0, 10); } - 也可先声明再集中导出:
const timeout = 5000;<br>const isProd = false;<br>export { timeout, isProd }; - 支持重命名导出,隐藏内部名:
const _token = 'abc';<br>export { _token as authToken };
默认导出只用于主功能单元
每个模块最多一个默认导出,适合导出模块的“主角”,比如主类、核心函数或组件:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 写法简洁,导入时可自定义名字:
export default class ApiClient { ... }
在其他文件中:import ApiClient from './ApiClient.js'; - 不建议和多个命名导出混用——虽然语法允许,但会模糊模块职责,增加使用者理解成本。
导入时按需选择语法形式
导入方式要和导出方式严格对应:
立即学习“Java免费学习笔记(深入)”;
- 导入多个命名导出:
import { API_URL, formatDate, MAX_RETRY } from './config.js'; - 导入全部命名导出为一个对象:
import * as config from './config.js'; console.log(config.API_URL); - 导入默认导出:
import ApiClient from './ApiClient.js';(注意:没有大括号) - 同时导入默认 + 命名:
import ApiClient, { formatDate } from './ApiClient.js';
避免常见陷阱
几个容易出错但很关键的细节:
- 命名导出的变量必须已声明,不能导出未定义的标识符;
- 导入时名称必须和导出名一致(除非用了
as重命名),大小写敏感; - 模块文件需以
.js结尾,并在 HTML 中用<script type="module">引入,或在 Node.js 环境中启用 ESM 支持; - 不能在条件语句或函数内使用
export/import——它们必须位于顶层作用域。

















