ES6 模块通过静态编译时解析实现高效依赖管理,支持命名导出与默认导出,使用 import 和 export 语法在顶层声明依赖,确保模块单例执行并处理循环引用,浏览器中需用 type="module" 启用,构建工具可优化加载。

ES6 模块系统为 JavaScript 提供了原生的模块支持,解决了长期以来缺乏标准模块机制的问题。相比 CommonJS 和 AMD 等早期方案,ES6 模块采用静态化设计,允许在编译时确定依赖关系,从而优化加载性能和实现 Tree Shaking。
模块的基本语法:export 与 import
ES6 模块通过 export 声明模块对外暴露的接口,通过 import 引入其他模块的功能。
一个模块文件可以使用多种方式导出内容:
• 使用命名导出,可导出多个值:export const name = 'Alice';• 或使用 default 导出,每个模块最多一个:
export function greet() {
return `Hello, ${name}!`;
}
export default function() {
return 'This is the default export';
}
导入时对应不同导出方式:
立即学习“Java免费学习笔记(深入)”;
• 导入命名导出:import { name, greet } from './module.js';
import myFunc from './module.js';
import myFunc, { name } from './module.js';
模块的静态结构与提前加载
ES6 模块是静态的,意味着 import 和 export 只能在模块顶层使用,不能动态写在条件语句或函数中。这种设计让工具能在不执行代码的情况下分析模块依赖。
例如,下面的写法是非法的:
// 错误!不能在 if 中 import
if (condition) {
import { foo } from './foo.js';
}
如果需要动态加载,应使用 import() 动态导入函数,它返回一个 Promise:
95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we
if (condition) {
import('./foo.js').then(module => {
console.log(module.foo);
});
}
模块的执行顺序与循环引用
ES6 模块是单例的,且每个模块只执行一次。当两个模块相互引用时,会形成循环依赖。ES6 通过“先绑定”机制处理这种情况。
假设 moduleA.js 中:
import { valueFromB } from './moduleB.js';
export const valueFromA = 'A';
console.log('A receives B:', valueFromB);
moduleB.js 中:
import { valueFromA } from './moduleA.js';
export const valueFromB = 'B';
console.log('B receives A:', valueFromA);
运行时,JavaScript 引擎会创建绑定,确保即使值尚未初始化也能访问。输出可能是:
B receives A: undefined
A receives B: B
这说明模块 B 先执行,而模块 A 中的 valueFromA 在 B 执行时尚未定义。
浏览器中的模块使用
要在浏览器中启用 ES6 模块,需在 script 标签中添加 type="module":
模块脚本默认使用严格模式,且支持顶级 await。模块之间的导入路径必须是相对路径(如 ./ 或 ../)或绝对 URL,不能省略扩展名(某些服务器环境支持解析,但规范要求明确)。
现代构建工具(如 Webpack、Vite)已全面支持 ES6 模块,并能在打包时进行依赖分析和优化。
基本上就这些。掌握 export、import 的各种用法,理解静态结构和执行机制,就能高效使用 ES6 模块开发可维护的前端应用。









