2017-08-29 100 views
0

我按照a tutorial here找不到打字稿庫模塊文件夾

的代碼編寫一個打字稿NPM包可以在這裏找到

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

然後我發表的NPM包下here

現在,我可以通過安裝包

npm install loglevel-file-logger 

,並用它在我的打字稿項目這樣的

import setupLogger from 'loglevel-file-logger' 

它完全。然而,當我試圖從我的包導入非索引文件,這樣

然後你會看到TSC抱怨

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

如果你看看編譯的JS代碼,你會發現FetchBlobWriter的鍵入文件確實存在於js/FetchBlobWriter.d.ts

任何想法爲什麼在.d.ts文件存在時TypeScript無法找到模塊?

回答

1

這是因爲如果您從根進口,如loglevel-file-logger,TS將嘗試從node_modules/loglevel-file-logger/index.(js|ts)導入或將檢查模塊main屬性從package.json。您將後面的設置爲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

+0

真棒!非常感謝。順便說一句,有沒有辦法去除npm包中的'dist'部分,以便我不需要從'dist'文件夾中導入它? –

+0

您必須創建一個自定義腳本AFAIK。也許這有助於http://davidwells.io/publishing-flat-npm-packages-for-easier-import-paths-smaller-consumer-bundle-sizes/ –