Nodejs项目使用import {a,c} from "./xxx/xxx" 方式导入的时候出现异常,必须要附带后缀名".ts"或者".js"才行,如"import {a,c} from "./xxx/xxx.js":
node:internal/process/esm_loader:40
internalBinding('errors').triggerUncaughtException(
^
Error: Cannot find module 'C:\Users\admin\WebstormProjects\untitled\src\bot\events' imported from C:\Users\admin\WebstormProjects\untitled\index.ts
其中index和events都是ts对象,从报错中看貌似没有去寻找events.ts文件
Node.js V20.9.0
ts-node V10.9.1
我已经完成了tsconfig.json的配置,而且删除了babel之类的相关依赖,依然无法解决问题
"compilerOptions": {
"outDir": "dist",
"types": [
"node",
"jest"
],
"moduleResolution": "node",
"module": "ESNext",
"target": "ESNext"
}
如果说我带上了".ts"后缀,IDE会提示我:An import path can only end with a .ts extension when allowImportingTsExtensions is enabled;
如果说我带上了".js"后缀,那么可以正常运行,但是在IDE的自动补全导入代码的时候并不会主动给我带上".js"后缀,很不方便,所以我想知道为什么我这里不能在没有后缀的时候引入依赖对象
在搜索了无数的资料后得到答案,因为我使用的typescript版本比较高,新版本的ts特性会要求使用相对路径导入的时候带上文件扩展名以提升性能
所以,只需要在package.json中带上“--experimental-specifier-resolution=node”指令即可
如:
参考:TS 5.0 新特性