当前位置: 首页 > 知识库问答 >
问题:

javascript - typescript 使用import from 方式引入自建对象时报错模块未找到,且已设置moduleResolution为node?

符懿轩
2023-11-20

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;
image.png

image.png

image.png
如果说我带上了".js"后缀,那么可以正常运行,但是在IDE的自动补全导入代码的时候并不会主动给我带上".js"后缀,很不方便,所以我想知道为什么我这里不能在没有后缀的时候引入依赖对象

共有2个答案

宦高岑
2023-11-20

尝试改下配置:

{  "moduleResolution": "node16",  //"baseUrl": "./"} 

参考:https://www.typescriptlang.org/tsconfig#moduleResolution

海嘉赐
2023-11-20

这个问题可能是由于 TypeScript 的模块解析行为与 Node.js 不同导致的。在 TypeScript 中,当你使用 import {xxx} from "./xxx/xxx" 这样的语法时,TypeScript 会尝试找到 ./xxx/xxx 这个路径下的 xxx.tsxxx.d.ts 文件。在你的情况下,它没有找到 events.ts 文件,所以报错了。

要解决这个问题,你可以尝试以下几种方法:

  1. 确保你的 tsconfig.json 文件中的 moduleResolution 选项设置为 node。你已经正确地做了这一步。
  2. 确保你的导入路径是正确的。如果 ./xxx/xxx 是一个文件夹,那么你应该在该文件夹下有一个 index.ts 文件,或者一个 export 语句导出的文件。例如,你可以尝试将你的导入语句更改为 import {xxx} from "./xxx/xxx/index"import {xxx} from "./xxx/xxx/myfile",其中 myfile 是你实际想要导入的文件。
  3. 如果你在使用 TypeScript 的最新版本(v4.0+),你可以尝试使用 import {xxx} from "./xxx/xxx"; 这种导入语法,而不需要指定文件后缀。这是因为在 TypeScript v4.0+ 中,已经支持使用 ES6 的 import 语法直接导入 JavaScript 或 TypeScript 文件,而不需要指定 .js.ts 后缀。如果你的 IDE 没有自动添加后缀,可能是因为你的 TypeScript 版本过旧,或者 IDE 没有正确地配置。
  4. 如果以上方法都无法解决问题,你可能需要检查一下你的 Node.js 和 TypeScript 的版本。Node.js v20.9.0 和 ts-node v10.9.1 已经有些过时了,可能有更新的版本可以解决你的问题。你可以尝试升级 Node.js 和 TypeScript 到最新版本。

希望这些建议能帮助你解决问题!

 类似资料:
  • 我需要将一些html转换为PDF。我遇到了IText7,它看起来是一个很好的解决方案。 我正在. net core 3.1中开发 但是,即使使用它的基本实现,我也会遇到一个错误: 每个人都喜欢这个错误: 对象引用未设置为对象的实例。 内部异常为null,唯一的线索是SerializationStackTraceString是: 在iText. IO. FontCache. cctor() 那么,它

  • 代码比较简单。index.html 中 有两个script,第一个script是 模块化引入a.js 第二个script是输出Bank变量。 问题: (1)第一段script ,script标签中的代码不会执行难,也就是不会alert abc .为什么? (2)第二段script ,console.log(Bank)提示找不到bank, Bank不是引入了么?

  • 是否有建议使用具有段落的单元格构建表,以避免在向表或文档添加单元格时出现异常?我明白了,但我不知道会发生什么: 以下是使用Windows控制台项目的简单快照(与实际项目相比): 注意,注释的代码行: 添加它可以作为一种变通方法,使文档能够毫无例外地呈现。

  • 创建新的PDF文档时会发生以下情况。在第三页上创建第一个文本字段时出错。前两页上创建了多个字段,没有问题。 相关代码: 插入pdfPage。冲洗();在“PdfPage PdfPage=pdfDoc.AddNewPage(pageSize);”之后语句在将第一个文本框添加到第一页时会导致相同的错误。 如何更正错误?

  • 我已经在Docker中安装了apache_beam Python SDK和apache Python SDK。Python版本:3.5 Apache版本:1.10。5. 我正在尝试使用执行apachebeam管道。当我从airflow UI运行DAG时,我得到 导入错误:将apache_梁导入为梁。找不到模块 使用相同的设置,我尝试了,它工作得非常好。 当我用Python2和ApacheAirfl

  • 使用C#MVC4 我的观点: 我的模特: 但是,我不断地得到错误: 当我尝试调试它时,它甚至没有进入方法或我的模型。