使用ts-node启动server.ts时Axios导入出现语法错误求助
问题原因及解决办法
问题原因
Node.js v12.9.1对ES模块(ESM)的支持非常有限,默认无法直接解析import语句。你当前使用的Axios版本大概率已切换为纯ES模块发布(不再提供CommonJS格式导出),当用require('axios')加载这个ES模块文件时,Node会把它当作CommonJS代码解析,自然会因import这个ES语法报错。
解决办法
1. 降级到兼容Node v12的Axios版本
选择仍支持CommonJS导出的Axios版本,比如axios@0.27.2,这个版本同时提供两种模块格式。执行安装命令:
npm install axios@0.27.2
之后用require('axios')即可正常加载,不会触发语法错误。
2. 配置ts-node和Node支持ES模块
如果不想降级Axios,可通过配置让Node和ts-node识别ES模块:
- 在项目根目录的
package.json中添加"type": "module"字段 - 将
server.ts中的引入方式改为import axios from 'axios' - 调整
tsconfig.json,确保compilerOptions里的module设为ESNext或ES2020,moduleResolution设为NodeNext或Node12 - 修改
package.json的start脚本,给ts-node加上--esm参数:
"scripts": { "start": "ts-node --esm server.ts" }
注意:Node v12对--esm的支持有局限性,可能会出现其他兼容问题。
3. 升级Node.js版本(最彻底方案)
Node v12已停止维护,对ES模块的支持不完善是根本问题。建议升级到Node v14及以上的LTS版本(比如v14.21.3),新版本对ES模块的支持更完善,既能用import也能通过require加载兼容的ES模块,还能避免后续更多类似兼容性问题。
内容的提问来源于stack exchange,提问作者TyT-xexebe
相关产品推荐
相关产品推荐

