我自己的 TypeScript 模块的“找不到模块”

Posted

技术标签:

【中文标题】我自己的 TypeScript 模块的“找不到模块”【英文标题】:`Cannot find module` for my own TypeScript module 【发布时间】:2019-07-08 19:17:32 【问题描述】:

我刚刚向 NPM 注册表ooafs 发布了一个新的基于 TypeScript 的模块。但是,当我尝试安装它并将其导入另一个 TypeScript 项目时,VSCode 在导入语句中给出以下错误:Cannot find module 'ooafs'.ts(2307)

这个模块的源文件被编译成 javascript 到一个dist/ 文件夹并且定义 (.d.ts) 也被生成。

这是已发布模块的树(我们@9​​87654326@时下载的那个):

.
├── dist
│   ├── Entry.d.ts
│   ├── EntryFilter.d.ts
│   ├── EntryFilter.js
│   ├── Entry.js
│   ├── EntryType.d.ts
│   ├── EntryType.js
│   ├── FSTypings.d.ts
│   ├── FSTypings.js
│   ├── index.d.ts
│   └── index.js
├── LICENSE
├── package.json
└── README.md

package.json 确实包含以下条目:


    "main": "dist/index.js",
    "types": "dist/index.d.ts",
    ...

因为模块在 Runkit(纯 JS)上正常工作,我认为我遇到的唯一问题与 TypeScript 相关,这不是 TypeScript 第一次告诉我模块不存在时缺少声明文件是唯一的问题.

我是否错过了编译过程中的一个步骤? 我的package.json 属性有错吗?

如果需要看更多代码,Github链接在问题的开头,发布的模块结构可以在这里找到:https://unpkg.com/ooafs@0.1.2/dist/。

【问题讨论】:

你在 node_modules 中看到 ooafs 了吗?并且测试需要另一个错误或成功的模块。尝试关闭文件并打开(可能你没有下载打开,然后下载) 模块 is 已下载(它位于node_modules),所有其他模块加载都没有问题,我重新启动了 VSCode 没有任何改进。这个问题肯定与我的模块有关。 【参考方案1】:

实际上,问题并非来自我的模块 (ooafs)。我在其中使用模块的项目的tsconfig.json 存在问题:module 属性显然必须设置为commonjs

很晚的编辑: 另外,我强烈建议将esModuleInterop 设置为true,这样可以更自然地导入非es6 模块。

【讨论】:

请解释一下你对 commonjs 的意思。 在 tsconfig.json 的 compilerOptions 中从 "module": "es6" 切换到 "module": "commonjs" 也修复了我的错误,但我不知道为什么。有人明白吗?

以上是关于我自己的 TypeScript 模块的“找不到模块”的主要内容,如果未能解决你的问题,请参考以下文章

VueJS/Typescript 错误:找不到模块“我的模块”或其相应的类型声明

误报 Typescript 找不到模块警告

TypeScript 找不到模块 flatpickr,即使它包含 typescript 类型

TypeScript 错误:找不到模块“时刻”

TypeScript:仅在单元测试中找不到模块的声明文件

Typescript、index.d.ts 和 webpack:找不到模块错误