如何在 typescript npm 包中加载一个 js 配置文件,该文件将来只会由包用户编写
how to load a js config file in a typescript npm package that will only be written in the future by the package user
我正在尝试在 Typescript 中编写一个 NPM 包,它应该作为 CLI 工具使用。
为简单起见,假设该包将从开发人员使用该包编写的 config.js
文件中获取默认导出,并将其打印在控制台中。
因此开发人员将:
- 使用
export default 'hello world'
创建一个 config.js
文件
- 键入
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);
}
这会导致编译器错误:Cannot find module './config.js' or its corresponding type declarations.ts(2307)
。
我的问题是:我如何告诉 typescript 导入将在未来创建并且仅在运行时可用的配置文件?
如果那不可能,我如何在 Typescript 程序中使用该配置文件的内容?
My question is: how can I tell typescript to import the config file that will be created in the future and be available only during runtime?
一个。要获得快速解决方案,您可以简单地将 @ts-ignore
放在导入上方的行中。这应该忽略编译错误,并且在运行时应该相应地导入文件。
b。或者,您也可以使用 require('./config.js')
而不是使用导入。这也应该消除编译错误。
c。对于更合适的解决方案,您可以考虑使用函数在运行时读取文件。您可以考虑使用的两件事是 fetch
和 fs
获取
fetch('./config.js')
.then(response => response.text())
.then(text => console.log(text))
fs
import fs from 'fs'
const data = fs.readFileSync('./config.js', 'utf8')
console.log(data)
我正在尝试在 Typescript 中编写一个 NPM 包,它应该作为 CLI 工具使用。
为简单起见,假设该包将从开发人员使用该包编写的 config.js
文件中获取默认导出,并将其打印在控制台中。
因此开发人员将:
- 使用
export default 'hello world'
创建一个 - 键入
npx someLibrary
并在终端中看到“hello world”。
config.js
文件
这个用例在我使用过的工具中很常见,比如 babel、jest 和 webpack。虽然我已经克服了一些技术挑战,但我仍然停留在如何在 Typescript 中获取未来的 config.js
文件。
我尝试采用的方法是使用动态导入。编译器不允许它,因为配置文件在编码时不存在。代码是这样的:
main();
async function main(): Promise<void> {
const config = await import("./config.js");
console.log(config);
}
这会导致编译器错误:Cannot find module './config.js' or its corresponding type declarations.ts(2307)
。
我的问题是:我如何告诉 typescript 导入将在未来创建并且仅在运行时可用的配置文件?
如果那不可能,我如何在 Typescript 程序中使用该配置文件的内容?
My question is: how can I tell typescript to import the config file that will be created in the future and be available only during runtime?
一个。要获得快速解决方案,您可以简单地将 @ts-ignore
放在导入上方的行中。这应该忽略编译错误,并且在运行时应该相应地导入文件。
b。或者,您也可以使用 require('./config.js')
而不是使用导入。这也应该消除编译错误。
c。对于更合适的解决方案,您可以考虑使用函数在运行时读取文件。您可以考虑使用的两件事是 fetch
和 fs
获取
fetch('./config.js')
.then(response => response.text())
.then(text => console.log(text))
fs
import fs from 'fs'
const data = fs.readFileSync('./config.js', 'utf8')
console.log(data)