在文件夹下找不到TypeScript库模块



我正在按照的教程编写一个TypeScript NPM包

代码可以在这里找到

https://github.com/envoy/loglevel-file-logger/tree/e4093715b5d06f4c7df9e022f3cbdba160929b02

然后我在这里发布了NPM包

现在,我可以通过安装软件包

npm install loglevel-file-logger

并在我的TypeScript项目中使用它,比如这个

import setupLogger from 'loglevel-file-logger'

它工作得很好。然而,当我试图从我的包中导入一个非索引文件时,比如这个

import FetchBlobWriter from 'loglevel-file-logger/FetchBlobWriter'

然后你会看到tsc投诉

[ts] Cannot find module 'loglevel-file-logger/FetchBlobWriter'.

如果您查看已编译的JS代码,您会发现FetchBlobWriter的键入文件确实存在于js/FetchBlobWriter.d.ts

知道为什么TypeScript在.d.ts文件存在的情况下找不到模块吗?

这是因为如果从根目录导入,如loglevel-file-logger,TS将尝试从node_modules/loglevel-file-logger/index.(js|ts)导入,或从package.json检查模块main属性。您将later设置为dist/index.js,这是正确的。

但是,如果要导入子模块,它将解析模块的root文件夹中的路径。不是可能属于或不属于main属性的文件夹。也就是说,'loglevel-file-logger/FetchBlobWriter'将解析为node_modules/loglevel-file-logger/FetchBlobWriter。TS正确地通知您没有模块/文件,因为它位于dist文件夹中。因此,从'loglevel-file-logger/dist/FetchBlobWriter'导入应该可以。

下面是一篇文章,为您提供有关节点路径分辨率的更多信息:https://www.bennadel.com/blog/2169-where-does-node-js-and-require-look-for-modules.htm

最新更新