<p>ES Modules 中模块整体导入使用 import * as namespace 语法,将所有命名导出挂载到只读命名空间对象上,但不包含默认导出,需单独导入;支持动态导入,但可能影响 Tree-shaking。</p>

ES Modules 中实现模块整体导入,使用 import * as namespace 语法,将模块导出的所有命名导出(named exports)挂载到一个命名空间对象上。
基本语法与用法
假设有一个模块 mathUtils.js,导出了多个函数:
// mathUtils.js
export function add(a, b) { return a + b; }
export function subtract(a, b) { return a - b; }
export const PI = 3.14159;
在另一个文件中整体导入:
// main.js import * as math from './mathUtils.js'; <p>console.log(math.add(2, 3)); // 5 console.log(math.PI); // 3.14159</p>
注意事项
-
不能解构赋值直接解构
*:不支持import { * } from './module.js'这类写法 -
默认导出不会自动包含在
*中:若模块有export default,需单独导入,例如import def, * as ns from './module.js' - 命名空间对象是只读的(不可重新赋值),但其属性值是否可变取决于原导出值本身(如导出的是对象,仍可修改其属性)
-
动态导入也支持整体导入:
const mod = await import('./mathUtils.js');,返回 Promise,解析后得到同样结构的对象
与默认导入、命名导入的对比
同一模块不同导入方式示例:
立即学习“Java免费学习笔记(深入)”;
// 全部导入(命名空间)
import * as utils from './mathUtils.js';
<p>// 单个命名导入
import { add } from './mathUtils.js';</p><p>// 多个命名导入(重命名可用 as)
import { add as sum, PI } from './mathUtils.js';</p><p>// 默认导入(仅当有 export default 时有效)
import calc from './mathUtils.js';</p>实际使用建议
- 适合需要频繁使用模块内多个导出项,且不想逐个列出名称的场景
- 利于避免命名冲突,尤其在整合多个工具模块时(如
import * as dom from './dom.js'; import * as event from './event.js';) - 注意 Tree-shaking:打包工具(如 Webpack、Rollup)对
* as导入的支持有限,可能无法自动剔除未使用的导出,影响打包体积 - 开发时配合 TypeScript 可获得完整类型推导,
utils对象的属性类型会被准确识别


















