【问题标题】:Cannot find TypeScript library module under a folder在文件夹下找不到 TypeScript 库模块
【发布时间】:2018-02-07 13:09:55
【问题描述】:

我正在按照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

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

【问题讨论】:

    标签: typescript npm package


    【解决方案1】:

    这是因为如果你从根目录导入,比如loglevel-file-logger,TS 会尝试从node_modules/loglevel-file-logger/index.(js|ts) 导入,或者会检查package.json 中的模块main 属性。您将后者设置为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

    【讨论】:

    • 太棒了!太感谢了。顺便问一下,有没有办法去掉 npm 包中的dist 部分,这样我就不需要从dist 文件夹中导入它了?
    • 您必须创建自定义脚本 AFAIK。也许这有助于davidwells.io/…
    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 2020-08-02
    • 2019-04-16
    • 2019-08-16
    • 2016-09-20
    • 1970-01-01
    • 2017-04-27
    • 2020-06-14
    相关资源
    最近更新 更多