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

时间:2017-08-29 23:55:08

标签: typescript npm package

我按照a tutorial here

创作了一个TypeScript NPM包

代码可以在这里找到

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无法找到模块?

1 个答案:

答案 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