同一份Node.js代码Windows10运行正常,Ubuntu系统报import语法错误如何解决?
问题原因
- 核心问题是Ubuntu环境下的Node.js版本过低(v10.19.0),该版本默认采用CommonJS模块规范,不原生支持ES Module的
import导入语法。Windows环境下的Node.js版本应为v12.20.0、v14.13.0或更高版本,这类版本原生支持ES Module,因此相同代码可以正常运行。 - 代码还存在一处笔误:你定义的接口地址变量为
api_url,但调用fetch时传入的是未定义的app_url,修复模块问题后需要同步修改该笔误才能正常请求接口。
排查解决方法
你可以根据自身需求选择以下任意一种方案:
方案1:升级Node.js到长期支持版本(最推荐)
旧版Node.js已经停止维护,存在安全隐患,建议升级到官方支持的LTS版本:
- 先卸载系统自带的旧版Node.js:
sudo apt remove nodejs npm -y
- 推荐使用nvm工具管理Node.js版本,安装完成后执行以下命令安装最新LTS版本:
nvm install --lts nvm use --lts
- 在项目根目录的
package.json文件中添加如下配置,声明项目采用ES Module规范:
{ "type": "module" }
- 修改代码中的笔误后,直接运行
node demo.js即可正常启动服务。
方案2:不升级Node.js,将代码改为CommonJS规范
如果暂时无法升级Node.js,可以把ES Module语法改为旧版兼容的CommonJS写法:
- 将开头的导入语句替换为
require写法:
const express = require('express'); const fetch = require('node-fetch'); // 剩余业务代码保持不变,同步修改fetch传入的变量为api_url
- 直接执行
node demo.js即可正常运行。
方案3:临时启用Node.js实验性ESM支持
如果你只想临时验证代码,不想做上述修改,可以运行时添加实验参数启动:
node --experimental-modules demo.js
注意该功能在v10版本中是实验性质,稳定性差,不建议生产环境使用。
内容的提问来源于stack exchange,提问作者varsha kumari
相关产品推荐
相关产品推荐

