JavaScript中使用import需满足:环境支持ESM、显式启用(浏览器加type="module",Node.js用.mjs或"type":"module")、路径规范、导出导入匹配、顶层声明、静态分析预加载,动态导入用import()。

在 JavaScript 中使用 import 导入符合 ES Modules(ESM)规范的脚本,核心前提是运行环境支持 ESM,并且模块路径和导出方式正确。浏览器和 Node.js 的处理方式略有不同,但底层逻辑一致。
确保文件以模块方式执行
ESM 不是默认行为,需显式启用:
-
浏览器中:HTML 中引入脚本时必须添加
type="module"属性,例如:
<script type="module" src="./main.js"></script> -
Node.js 中:文件后缀为
.mjs,或在package.json中设置"type": "module"。否则import会报错(CommonJS 环境不支持顶层import)。
导入语法要匹配导出方式
ESM 要求 import 和 export 成对、静态、具名或默认。常见组合如下:
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
- 导入默认导出:
import MyModule from './my-module.js';(对应export default ...) - 导入具名导出:
import { foo, bar } from './utils.js';(对应export const foo = ...; export function bar() {...}) - 导入全部并命名:
import * as utils from './utils.js';(之后用utils.foo访问) - 混合导入(默认 + 具名):
import DefaultClass, { helper, version } from './api.js';
路径必须是相对或绝对 URL(浏览器)/ 文件路径(Node.js)
ESM 不支持 Node.js 风格的包名简写(如 import _ from 'lodash')除非使用打包工具或实验性功能:
- 浏览器中只接受相对路径(
./、../)、绝对路径(/scripts/)或完整 URL(https://cdn.example.com/module.js); - Node.js 中也要求带扩展名(如
.js),不能省略(import './utils'❌,应写import './utils.js'✅); - 第三方模块需通过构建工具(如 Vite、Webpack)或 Node.js 的
node_modules解析规则(配合exports字段)才能直接写包名。
注意顶层作用域与执行时机
import 只能在模块顶层使用,不能放在函数、条件或循环内;且所有 import 语句会在代码执行前静态分析、预加载、执行依赖图——这意味着:
- 没有“按需动态导入”时,所有导入模块都会立即加载(即使未实际调用);
- 如需条件加载,改用
import()动态导入(返回 Promise):
if (needFeature) { const { init } = await import('./feature.js'); init(); } - 模块脚本是单例:同一路径多次
import,只执行一次,后续导入复用缓存导出值。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










