【发布时间】:2020-02-15 13:50:52
【问题描述】:
可能是有史以来最愚蠢的问题,但我有一个 Node 项目,它使用带有 --experimental-modules 和 Node 12 的 ES 模块。
现在我正在向由主节点应用程序使用的 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"]
}
如果我有从邻居 ts 文件导入的 index.ts:
import { schema } from './schema'
构建的导入语句没有任何.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
原因是导入没有.js - 在我的 ts 构建的 dist 目录中修补它可以工作。
我不能简单地将我的 ts 模块更改为 commonjs,因为这也会改变我的主要导出与基于 esm 的 main 一起工作的方式,这会给我带来其他错误:
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。嘿,我想要新的闪亮的东西。
我错过了什么?
【问题讨论】:
标签: node.js typescript