gpt4 book ai didi

node.js - 如何将 Node --experimental-modules 与 Typescript 输出结合使用

转载 作者:太空宇宙 更新时间:2023-11-03 22:19:55 26 4
gpt4 key购买 nike

可能是有史以来最愚蠢的问题,但我有一个 Node 项目,它使用带有 --experimental-modules 和 Node 12 的 ES 模块。

现在,我正在将一个内部包添加到由主 Node 应用程序使用的用 Typescript 编写的 monorepo 中。我正在努力解决我的 Typescript build设置,这些设置生成的东西可以与 --experimental-modules 一起使用。

当前 tsconfig.json:

{
"include": [
"src/**/*ts"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
],
"compilerOptions": {
"module": "esnext",
"esModuleInterop": true,
"target": "esnext",
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist"
},
"lib": ["es2015"]
}

如果我有从邻居 ts 文件导入的 index.ts:

import { schema } from './schema'

构建的导入语句没有任何.js,这使得我的 Node 应用程序窒息:

(node:78972) ExperimentalWarning: The ESM module loader is experimental.
internal/modules/esm/default_resolve.js:79
let url = moduleWrapResolve(specifier, parentURL);
^

Error: Cannot find module /Users/viktor/dev/projects/kb-frontend/packages/graph/dist/schema imported from /Users/viktor/dev/projects/kb-frontend/packages/graph/dist/index.js

原因是导入没有 .js - 在 ts 构建的 dist 目录中对其进行修补即可工作。

我不能简单地将我的 ts 模块更改为 commonjs,因为这也会改变我的主要导出与基于 esm 的主要工作的方式,从而给我带来其他错误:

import { server as graphMiddleware } from '@kb-front/graph'
^^^^^^
SyntaxError: The requested module '@kb-front/graph' does not provide an export named 'server'

我不想在这里和那里添加很多 .default ,因为我的整个设置是为了避免 commonjs ,而只是使用 js 和 typescript 与 esm 。嘿,我想要新的 Shiny 的东西。

我错过了什么?

最佳答案

在带有 Typescript 的浏览器中使用 native 模块支持的两个问题:

https://github.com/microsoft/TypeScript/issues/13422 https://github.com/microsoft/TypeScript/issues/16577

从他们那里我得到了只用 .js 扩展名导入的技巧。 super 奇怪,但适合我的情况。

关于node.js - 如何将 Node --experimental-modules 与 Typescript 输出结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58452989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com