Vik*_*alk 5 node.js typescript
可能是有史以来最愚蠢的问题,但我有一个 Node 项目正在使用 ES 模块和--experimental-modulesNode 12。
现在,我将一个内部包添加到由主节点应用程序使用的用 Typescript 编写的 monorepo 中。我正在努力处理我的 Typescript 构建设置,这些设置会生成可与--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"]
}
Run Code Online (Sandbox Code Playgroud)
如果我index.ts从邻居 ts 文件导入:
import { schema } from './schema'
Run Code Online (Sandbox Code Playgroud)
构建的导入语句没有任何.js,这使我的节点应用程序窒息:
(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
Run Code Online (Sandbox Code Playgroud)
原因是导入没有.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'
Run Code Online (Sandbox Code Playgroud)
我不想.default在这里和那里添加很多东西,因为我的整个设置是为了避免使用commonjs,而只是将 js 和 typescript 与 esm 一起使用。嘿,我想要新的闪亮的东西。
我缺少什么?
在带有 Typescript 的浏览器中使用本机模块支持的两个问题:
https://github.com/microsoft/TypeScript/issues/13422 https://github.com/microsoft/TypeScript/issues/16577
从他们那里我得到了只用 .js 扩展名导入的技巧。超级奇怪,但适合我的情况。
| 归档时间: |
|
| 查看次数: |
5024 次 |
| 最近记录: |