我正試圖用Typescript撰寫一個NPM包,它應該可以作為一個CLI工具使用。
為了簡單起見,我們假設該包將從使用該包的開發人員撰寫的config.js檔案中獲取默認匯出,并將其列印在控制臺中。
因此開發人員將:
- 創建一個
config.js檔案,其中包含export default 'hello world'。
- 輸入
npx someLibrary,在終端看到 "hello world"。
這個用例在我使用過的工具中很常見,比如babel、jest和webpack。盡管我已經克服了圍繞這一問題的一些技術難題,但我被困于如何在 Typescript 中抓取未來的 config.js 檔案。
我試圖追求的方法是使用動態匯入。編譯器不允許這樣做,因為組態檔在編碼時并不存在。這段代碼是這樣的:
main()。
async function main()。Promise<void> {
const config = await import("./config.js") 。
console.log(config)。
}
這就造成了編譯器錯誤。找不到模塊'./config.js'或其相應的型別宣告.ts(2307).
我的問題是:我怎樣才能告訴 typescript 匯入將來創建的組態檔,并且只在運行時可用?
如果這是不可能的,我怎樣才能在Typescript程式中消費該組態檔的內容呢?
。uj5u.com熱心網友回復:
我的問題是:我怎樣才能告訴typescript匯入將來創建的組態檔,并且只在運行時可用呢?
a. 對于一個快速的解決方案,你可以簡單地把@ts-ignore放在你匯入的上面一行。這應該會忽略編譯錯誤,并且在運行時該檔案應該被相應地匯入。
b. 另外,你也可以使用 require('./config.js') 而不是使用 import。這也應該能擺脫編譯錯誤。
c.
c. 對于一個更合適的解決方案,你可以考慮在運行時使用一個函式來讀取檔案。你可以考慮使用兩個東西:fetch和fs
fetch
fetch('./config.js'/span>)
.then(response => response.text()
.then(span class="hljs-params">text => console.log(text)
fs
import fs from 'fs'/span>
const data = fs.readFileSync(' ./config.js', 'utf8')
console.log(data)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/331056.html
標籤:
上一篇:沒有找到模塊。無法解決'@emotion/react'在'E:frontend ode_modules@muistyled-engine'中的'@em
下一篇:如果條件。(64>360)為真?
