JavaScript模块是ES6起原生支持的代码组织方式,通过export导出(命名/默认)和import导入实现作用域隔离与复用,需配合type="module"或.mjs后缀使用,且import/export仅限顶层。
JavaScript模块是将代码组织成独立、可复用单元的方式,每个模块拥有自己的作用域,不会污染全局命名空间。从ES6(ECMAScript 2015)开始,原生支持import和export语法
,成为现代前端开发的标准实践。
一个模块通过export向外提供变量、函数、类或对象。可以使用命名导出(named export)或默认导出(default export):
export const PI = 3.14159;export function add(a, b) { return a + b; }export class Calculator { ... }
export default function greet(name) { return `Hello, ${name}`; }export default class App { ... }
使用import语句加载其他模块的功能,导入语法需与导出方式匹配:
import { PI, add, Calculator } from './math.js';import { add as sum } from './math.js';
import greet from './greeting.js';greet不是固定名,可写成import hello from './greeting.js')
import greet, { PI, add } from './utils.js';
import * as utils from './utils.js';utils.PI、utils.add(2, 3)
模块系统依赖严格的语法和环境支持:
.mjs后缀命名,或在标签中声明type="module",否则浏览器会按传统脚本执行,不识别import/export
'./file.js')或绝对URL;不能省略扩展名或使用纯模块名(如'lodash'需构建工具支持)"use strict"
import和export只能出现在模块顶层,不能放在if、函数或块级作用域中(动态导入可用import()函数实现)开发中可能遇到模块未生效、报错“Cannot use import statement outside a module”等问题:
type="module":
package.json中添加"type": "module",或使用.mjs后缀require/module.exports)?可通过打包工具(如Webpack、Vite)混合处理,但建议新项目统一用ESM