Demo
最近,我尝试建立一个使用ES6 import
语句和顶级await
的node项目,我遇到了一个奇怪的问题。
在使用npx ts-node index.ts
运行我的应用程序时,我发现它不知道我的文件扩展名.ts
:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /home/zhyp/Code/ts-test/src/index.ts
因此,经过一些研究,我遇到了esm
标志(npx ts-node --esm index.ts
),在运行此命令后,我的文件实际上无法找到:
throw new ERR_MODULE_NOT_FOUND(
^
CustomError: Cannot find module '/home/zhyp/Code/ts-test/src/imported-file' imported from /home/zhyp/Code/ts-test/src/index.ts
因此,经过更多的研究,我尝试将.js
扩展名添加到所有导入中,这很奇怪,但如果我将这些文件的扩展名更改为.ts
,则不会,因为那样我需要在tsconfig.json
中启用allowImportingTsExtensions
,并启用notEmit
,这将阻止我使用tsc
构建任何东西。
谁能帮我理解为什么这个设置不起作用?
复制所需的文件:tsconfig.json
{
"compilerOptions": {
"target": "es2022",
"module": "es2022",
"rootDir": "src",
"resolveJsonModule": true,
"allowJs": true,
"outDir": "build",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitAny": true,
"skipLibCheck": true
}
}
package.json
{
"name": "typescript-node",
"version": "1.0.0",
"description": "TypeScript Template with Node.js",
"main": "src/index.js",
"scripts": {
"start": "nodemon --exec 'ts-node' src/index.ts"
},
"dependencies": {
"@types/node": "14.14.29",
"ts-node": "10.9.1",
"typescript": "5.0.4"
},
"devDependencies": {
"@types/express": "^4.17.6",
"nodemon": "1.18.4"
},
"keywords": [],
"type": "module"
}
index.ts
import test from "./imported-file";
console.log(test);
imported-file.ts
export default {};
2条答案
按热度按时间xyhw6mcr1#
检查节点版本。当我从20.2.0降级到19.8.1时,它对我很有效
utugiqy62#
我偶然发现了这个post,上面的答案帮助我更好地理解了为什么它不起作用,在
tsconfig.json
上使用module: "es2022"
和在package.json
上使用type: "module"
有一些警告。