在节点导入中使用 .ts 扩展名(如 deno)



我正在寻找一种方法,将.ts扩展名包含在打字稿import语句中,然后使用类似ts-node的东西在节点中执行它。我也在寻找一种方法,使.ts扩展在 VSCode 中有效并且不会引发错误。

我的目标是能够在ts-nodedeno中运行这样的东西

import alpha from './alpha.ts'
import beta from './beta.ts'
console.log({alpha, beta})

我希望 (1( 这里提到的插件deno_ls_plugin和 (2(tsconfig-paths的组合可以工作,如下所示:

tsconfig.json

{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"./*": ["./*"],
"../*": ["../*"],
},
"plugins": [{ "name": "deno_ls_plugin" }]
}
}

并使用它运行以运行:

ts-node -r tsconfig-paths/register ./merge.ts

这行不通。

在理想的世界中,打字稿代码和 deno 之间的差异将在单个寄存器中得到纠正,例如ts-node -r ts-deno/register ./merge.ts.

我本质上正在寻找一种将 deno-compatible-typescript 转换为节点兼容 javascript 的方法。主要问题是deno兼容类型脚本甚至与节点兼容类型脚本不兼容。

主要的兼容性问题是:

  1. 导入中的 TS 扩展
  2. 顶级等待
  3. 网址导入
  4. Deno全局(需要像YounGoat/nodejs.deno一样的垫片(

不幸的是,似乎不可能直接使用 ts-node。

一种选择是切换到 webpack,因为它在导入中支持 .ts 扩展名,但它不能完美地取代 ts-node,因为它仅用于转译。

在全球范围内,据我了解您的目标,我建议您查看 https://www.edgedb.com/blog/how-we-converted-our-node-js-library-to-deno-using-deno,看看是否有帮助(您需要一些额外的工作(。

最新更新