TypeScript: 不能在模块外使用 import 语句
TypeScript: Cannot use import statement outside a module
要解决 TypeScript 中的错误“无法在模块外使用导入语句”,请在您的文件中设置该module
选项,并确保编译您的 TypeScript 文件(例如使用),而不是直接使用.commonjs
tsconfig.json
ts-node
node
首先,确保tsconfig.jsonmodule
文件中的选项
设置为
.commonjs
{ "compilerOptions": { "target": "es6", "module": "commonjs", "esModuleInterop": true, // ... your other options } }
模块选项设置程序的模块系统。
esModuleInterop选项
false
默认
设置为。
esModuleInterop
修复true
这些问题。 不要尝试直接运行 TypeScript 文件node
TypeScript 错误的另一个常见原因是尝试直接使用 运行 TypeScript 文件node
,例如node src/index.ts
。
这是行不通的,因为在使用node
.
babel
如果您错误地配置了使用或 的TypeScript 项目,情况也是如此ts-node
。
如果您的项目使用ts-node
,您可以尝试在您的 中添加一个覆盖
tsconfig.json
,设置module
为commonjs
。
{ "ts-node": { // these options are overrides used only by ts-node "compilerOptions": { "module": "commonjs" } }, "compilerOptions": { // ... your options }, }
main
中的属性指向您的文件,而不是您的文件。 package.json
index.js
index.ts
查看您通过文件outDir
中的选项设置的构建文件夹tsconfig.json
。
您的配置可能是错误的,您仍然可以在构建目录中生成 TypeScript 文件。
这是 TypeScript 项目的工作配置ts-node
如果以上建议均无效,请查看使用ts-node
.
这是我的tsconfig.json
文件。
{ "compilerOptions": { "skipLibCheck": true, "target": "es6", "module": "commonjs", "moduleResolution": "node", "allowJs": true, "resolveJsonModule": true, "esModuleInterop": true, "outDir": "./build", "rootDir": "src", }, "include": ["src/**/*"], "exclude": ["node_modules"] }
确保include
数组指向包含项目所有必需文件的目录。
这是我的package.json
文件。
{ "name": "example", "version": "1.0.0", "main": "build/index.js", "scripts": { "build": "rimraf ./build && tsc", "dev": "nodemon", "start": "npm run build && node build/index.js", }, "devDependencies": { "@types/node": "^17.0.21", "nodemon": "^2.0.15", "rimraf": "^3.0.0", "ts-node": "^10.4.0", "typescript": "^4.6.2" } }
这是nodemon.json
位于同一目录中的配置文件。
{ "watch": ["src"], "ext": ".ts,.js", "ignore": [], "exec": "ts-node --files ./src/index.ts" }
src
,并index.ts
在src/index.ts
.您的src/index.ts
文件可能像下面这样简单。
console.log('example');
这是项目的文件/文件夹结构。
src/ - index.ts nodemon.json package.json tsconfig.json
该ts-node
包会将您的代码转换为 JavaScript,并将使用node
.
您的构建文件将位于该build
目录中。请注意,您的构建目录不应包含任何 TypeScript 文件,而应仅包含 JavaScript 文件。
如果您的构建目录包含 TypeScript 文件,则您的项目中存在配置错误。
如果您创建一个新package.json
文件,请确保安装您的依赖项。
npm install
您可以使用该npm run dev
命令启动您的开发服务器。
npm run dev
该npm start
命令可用于构建您的项目并创建build
包含您的.js
文件的目录。
npm start
这是我运行命令后项目的样子npm start
。
该build
目录包含一个index.js
文件,该文件是通过在 TypeScript 文件ts-node
上运行包而生成的src/index.ts
。
build
您项目的或目录dist
应仅包含 JavaScript 文件。