TypeScript运行报SyntaxError: Unexpected token 'export'如何解决
报错原因
- Node.js 原生仅能识别标准JavaScript代码,无法直接解析TypeScript的接口、类型标注等专属语法,直接将
.ts文件改后缀为.js运行会触发各类语法错误。 - Node.js 默认采用 CommonJS 模块规范,原生不识别ES Module规范的
export/import关键字。如果TypeScript编译配置输出的是ES模块格式的JS代码,直接用Node运行就会抛出Unexpected token 'export'错误。 - 未执行TypeScript编译步骤就尝试运行文件,文件内的TS专属语法、ES模块语法都无法被Node解析,必然触发报错。
修复方案
方案1:编译为CommonJS规范(生产环境通用,兼容所有Node版本)
- 项目根目录执行命令生成TypeScript配置文件:
tsc --init - 打开生成的
tsconfig.json,修改核心编译配置如下:
{ "compilerOptions": { "target": "ES6", "module": "CommonJS", "outDir": "./dist", "strict": true } }
其中outDir为编译后JS文件的输出目录,可按需调整。
3. 执行编译命令,将所有TS文件转为可被Node直接执行的CommonJS格式JS:tsc
4. 进入编译输出目录,运行生成的JS文件即可正常执行:node dist/test.js
方案2:启用Node原生ES Module支持(适合Node 14.13+版本)
如果需要保留import/export的ES模块写法,可按如下配置:
- 修改
tsconfig.json核心配置:
{ "compilerOptions": { "target": "ES6", "module": "ESNext", "moduleResolution": "node", "outDir": "./dist" } }
- 打开项目根目录的
package.json,添加一行配置声明所有.js文件按ES模块解析:
{ "type": "module" }
- 执行
tsc完成编译后,直接运行node dist/test.js即可。
方案3:免编译直接运行TS文件(适合本地开发调试)
如果不想每次修改代码后手动执行编译,可以用ts-node工具直接运行TS源文件:
- 本地安装依赖:
npm install ts-node typescript @types/node -D - 配置好
tsconfig.json后,直接执行命令运行TS文件即可:npx ts-node test.ts
注意:如果要在该方案下使用ES模块语法,除了在package.json添加"type": "module"配置外,启动时需要额外加参数npx ts-node --esm test.ts。该方案仅适合开发阶段使用,生产环境建议提前编译为JS再部署运行。
内容的提问来源于stack exchange,提问作者Ali Helmi
相关产品推荐
相关产品推荐

