现有项目引入TypeScript后出现import语句使用错误求助
解决TypeScript引入时的
SyntaxError: Cannot use import statement outside a module错误 核心原因
直接用require引入未编译的.ts文件,Node.js无法解析TypeScript的ES模块语法,同时默认tsconfig.json的编译配置可能未适配CommonJS模块规范(你的server.js采用的是CommonJS)。
解决方案
方案1:先编译TypeScript再引入
- 调整
tsconfig.json配置,确保编译输出符合CommonJS规范:
{ "compilerOptions": { "target": "ES6", // 可根据Node.js版本调整 "module": "CommonJS", // 编译为CommonJS模块,兼容require语法 "outDir": "./dist", // 指定编译后文件的输出目录 "strict": true, "esModuleInterop": true // 处理ES模块与CommonJS的兼容问题 }, "include": ["src/**/*"] // 指定要编译的TypeScript文件范围 }
- 执行编译命令,将
.ts文件转为适配Node.js的.js文件:
tsc
- 修改
server.js中的引入路径,指向编译后的文件:
// 替换原错误引入:require('./src/utils/cms/index.ts') const CMS = require('./dist/utils/cms/index.js');
方案2:用ts-node直接运行TypeScript(无需提前编译)
如果不想每次修改都手动编译,可以用ts-node直接处理TypeScript文件:
- 安装ts-node依赖:
npm install ts-node --save-dev
- 修改启动命令,用
ts-node代替node运行项目:
ts-node server.js
注:ts-node会自动处理编译逻辑,需确保tsconfig.json的module配置保持"CommonJS"以兼容server.js的require语法
额外提示(可选)
若想将项目切换为ES模块规范:
- 在
package.json中添加"type": "module" - 将
tsconfig.json的module设为"ESNext" server.js中改用import语法引入文件(需确保所有模块统一遵循ES模块规范)
内容的提问来源于stack exchange,提问作者Mantofka
相关产品推荐
相关产品推荐

