Node v8.10.0运行ES6 import报Unexpected token import解决方法
问题描述
本地PC运行使用ES6 import 语法的Node.js脚本正常,新购置的Ubuntu VPS安装Node.js v8.10.0后运行相同脚本抛出语法错误。已在package.json中配置"type": "module"字段,仍无法正常运行,报错信息如下:
import { createServer } from "http"; ^^^^^^ SyntaxError: Unexpected token import at createScript (vm.js:80:10) at Object.runInThisContext (vm.js:139:10) at Module._compile (module.js:616:28) at Object.Module._extensions..js (module.js:663:10) at Module.load (module.js:565:32) at tryModuleLoad (module.js:505:12) at Function.Module._load (module.js:497:3) at createDynamicModule (internal/loader/ModuleRequest.js:52:15) at setExecutor (internal/loader/ModuleWrap.js:40:23) at file:///root/amv1/server.js:8:36
经初步排查,问题由Node.js版本错误导致。
根本原因
你安装的Node.js v8.10.0版本原生不支持稳定版ES Module特性:
package.json中"type": "module"配置项是Node.js v12.0.0版本才正式引入的ES Module声明规则,v8版本完全无法识别该配置- Node.js v8.x系列仅提供实验性的ES Module支持,默认不开启,且实现存在大量兼容性问题,无法直接运行标准ESM语法的脚本。
修复方案
推荐方案(长期可用)
直接将VPS上的Node.js升级到正式支持ES Module的稳定版本:
- 卸载系统中已安装的v8.10.0旧版本Node.js
- 安装v16及以上的Node.js长期支持(LTS)版本,安装完成后执行
node -v确认版本符合要求 - 保留现有
package.json中的"type": "module"配置,重新运行脚本即可正常识别import语法。
临时兼容方案(不推荐长期使用)
如果暂时无法升级Node.js版本,可通过以下两种方式临时适配:
- 将脚本后缀修改为
.mjs,启动时添加实验性参数:node --experimental-modules server.js,注意该模式下ESM实现存在大量已知bug - 放弃ES Module语法,改用CommonJS规范的
require方法编写导入逻辑。
内容的提问来源于stack exchange,提问作者Onyx
相关产品推荐
相关产品推荐

