在使用 Node.js 或前端开发时,常会遇到 “SyntaxError: Cannot use import statement outside a module” 的错误。这通常是由于 ES6 模块和 CommonJS 模块之间的差异引起的。以下是一些常见的解决方法:
1. 修改文件扩展名
将 .js 文件扩展名更改为 .mjs。Node.js 原生支持 .mjs 扩展名的 ES6 模块:
// example.mjs
import something from './module';
2. 在 package.json 中添加 type: "module"
在您的 package.json 文件中添加 "type": "module",以指示 Node.js 这是一个 ES6 模块项目:
{
"type": "module"
}
3. TypeScript 项目配置
在 TypeScript 项目中,可以通过调整 tsconfig.json 文件来支持 ES6 模块:
在 tsconfig.json 文件中设置 module 为 ESNext 或 ES6:
{
"compilerOptions": {
"module": "ESNext", // 或者 "ES6"
"target": "ESNext" // 或者 "ES6"
}
}
此外,还可以确保 TypeScript 编译输出的文件扩展名为 .mjs,通过在 tsconfig.json 中添加 outDir 和 moduleResolution 配置:
{
"compilerOptions": {
"module": "ESNext",
"target": "ESNext",
"moduleResolution": "node",
"outDir": "./dist",
"esModuleInterop": true,
"resolveJsonModule": true,
"allowSyntheticDefaultImports": true
},
"include": ["src/**/*.ts"]
}