es module规范在前端项目中需统一用import/export管理依赖与接口,并严格适配浏览器环境与工程化流程:文件为独立作用域,导出须显式(命名导出允许多个,默认导出仅一个),路径必带.js后缀;导入需匹配类型且语义准确;html中script须设type="module"并经http服务运行;项目应分层组织、配置构建工具支持tree shaking及typescript模块选项,规避循环依赖。

在前端项目中全面使用 ES Module 规范,核心是统一用 import 和 export 管理依赖与暴露接口,同时适配浏览器运行环境和工程化流程。它不是只写几个 import 就算完成,而是要从文件组织、语法规范、构建配合到部署细节都对齐标准。
模块定义与导出要清晰规范
每个 JS 文件默认是一个独立作用域,变量函数不自动挂全局。导出必须显式声明:
- 命名导出适合多个工具函数或配置项:
export const API_BASE = '/api';<br>export function formatDate(date) { /* ... */ } - 默认导出适合主类、主组件或单入口逻辑:
export default class Modal { /* ... */ }(一个模块只能有一个) - 可组合导出,也支持重命名:
export { formatDate as format, API_BASE as base }; - 导出时不能省略后缀名:路径必须写
./utils.js,不能写./utils
导入方式需匹配导出类型且路径准确
导入不是“能跑就行”,要保证语义正确和可维护性:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 按需导入命名成员:
import { API_BASE, formatDate } from './config.js'; - 导入默认导出:
import Modal from './Modal.js';(不用花括号) - 混合导入(默认 + 命名):
import Modal, { formatDate } from './Modal.js'; - 命名空间导入用于批量操作:
import * as utils from './utils.js'; console.log(utils.formatDate()); - 动态导入用于条件加载或路由懒加载:
const module = await import('./admin.js');
HTML 中启用模块必须满足两个硬性条件
浏览器原生支持 ES Module,但有明确限制:
-
<script></script>标签必须带type="module"属性:<script type="module" src="app.js"></script> - 页面必须通过 HTTP/HTTPS 协议访问,不能双击打开
file://协议的 HTML 文件,否则会报 CORS 错误 - 推荐开发阶段用轻量服务器,如
npx serve或 VS Code 的 Live Server 插件
项目结构与工程化要支撑模块化落地
光语法正确不够,目录和工具链得跟上:
- 按功能分层组织:如
src/core/(通用工具)、src/features/user/(业务模块)、src/app.js(主入口) - 构建工具(Vite/Webpack)默认识别
.js中的import/export,自动做 Tree Shaking,剔除未使用的导出 - TypeScript 项目中,
tsconfig.json的"module": "ESNext"和"moduleResolution": "node"是必要配置 - 避免循环依赖:A 导入 B,B 又导入 A;应提取共用逻辑到第三个模块,或改用动态
import()解耦
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










