直接支持 import/export 的最简路径是让 node.js 原生识别 es 模块,需满足:node.js ≥ v14.15.1、package.json 中声明 "type": "module"、import 路径带 .js 扩展名。

直接支持 import / export 的最简路径,是让 Node.js 本身识别 ES 模块 —— 不需要 Babel、Webpack 或额外编译步骤。前提是你的 Node.js 版本 ≥ v14.15.1,且项目配置正确。
确认 Node.js 版本是否支持 ES 模块
运行 node -v 查看版本。低于 v14.15.1 的 Node.js(比如 v12.16.3)默认不解析 import 语句,会直接报错 SyntaxError: Cannot use import statement outside a module。
- 升级推荐用
gnvm(Windows)或nvm(macOS/Linux),避免全局污染 - 执行
gnvm use 18.20.0或nvm use 18切换后,再验证node -v - 注意:即使版本达标,Node.js 默认仍按 CommonJS 解析
.js文件 —— 必须显式声明模块类型
在 package.json 中声明 "type": "module"
这是启用原生 ES 模块的开关。没有它,哪怕 Node.js 版本够高,import 依然会被拒绝。
基于三引擎设计,从微信文章、新闻和博客网页提取干净内容,支持标题作者日期元数据,多格式和批量处理。
- 确保项目根目录有
package.json(没有就先npm init -y) - 在根节点添加字段:
"type": "module",**不要加逗号**(JSON 语法要求) - 添加后,所有
.js文件自动视为 ES 模块;若需混用 CommonJS,可改用.cjs后缀 - 错误写法示例:
"type": "module",(末尾逗号导致 JSON 解析失败)
VSCode 中让 import/export 语法高亮 + 无红波浪线
VSCode 默认能识别 ES 语法,但若插件或设置冲突,仍可能标红 import 或提示 “Cannot find module”。
- 必须安装
ESLint插件(dbaeumer.vscode-eslint),并确保工作区启用了它 -
.eslintrc.js中要包含ecmaVersion: 2022和sourceType: 'module' - 如果 ESLint 报
Parsing error: The keyword 'import' is reserved,说明它仍在用 CommonJS 模式解析 —— 检查parserOptions配置 - 无需安装 Babel 相关插件来“支持语法”,那是为转译准备的;纯 Node 运行场景下,Babel 反而增加冗余
常见导入导出写法与易错点
Node.js 原生 ES 模块对路径和大小写极其敏感,和浏览器行为略有差异。
-
import路径必须带扩展名(.js),例如:import { foo } from './utils.js'—— 缺.js会报ERR_MODULE_NOT_FOUND - 默认导出只能有一个:
export default function() {},重复写export default会报错 - 按需导出的名称必须完全一致:
export const name = 'a'→import { name } from './x.js',写成{ Name }就失败 - 不能在同一个文件里混用
import和require();想用require,得改后缀为.cjs并删掉"type": "module"
真正卡住人的往往不是语法本身,而是 Node.js 对模块边界和路径解析的严格性 —— 它不像 Webpack 那样自动补全或别名。确认版本、加 "type": "module"、路径写全扩展名,这三步做完,import 就能跑通了。










