我正在按照的教程编写一个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