代码可以在这里找到
https://github.com/envoy/loglevel-file-logger/tree/e4093715b5d06f4c7df9e022f3cbdba160929b02
然后我发布了NPM包here
现在,我可以通过
安装软件包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
当.d.ts
文件存在时,任何想法为什么TypeScript无法找到模块?
答案 0 :(得分:1)
那是因为如果你从根目录导入,如loglevel-file-logger
,TS会尝试从node_modules/loglevel-file-logger/index.(js|ts)
导入,或者会检查main
中的模块package.json
属性1}}。您将后者设置为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