首页 > 解决方案 > 如何编译两个相互引用的项目

问题描述

我在构建一个(@red5/middleware)引用另一个项目的项目时遇到问题,(@red5/router)作为回报,该项目引用了这个项目(@red5/middleware)

所以,当我运行命令时:

rm -rf types && tsc -p .

我收到一条错误消息,指出它找不到.d.ts文件,因为我使用rm.

../router/types/Route.d.ts:4:28 - 错误 TS7016:找不到模块“@red5/middleware”的声明文件。'C:/Users/rnaddy/Documents/vscode/projects/red5/framework/middleware/lib/index.js' 隐含了一个 'any' 类型。尝试npm install @types/red5__middleware它是否存在或添加一个新的声明 (.d.ts) 文件,其中包含declare module '@red5/middleware';

@red5/router -> route.ts

import { Middleware } from '@red5/middleware';

如果我删除该rm -rf types命令,我会收到错误消息,指出它无法覆盖输入文件,但我不再收到上述错误消息。

我能做些什么来摆脱这个错误并仍然rm -rf types在我的命令中使用?

中间件/tsconfig.json

{
  "compilerOptions": {
    "outDir": "lib",
    "declarationDir": "types"
  },
  "extends": "../tsconfig.json",
  "include": [
    "src/**/*.ts"
  ]
}

tsconfig.json

{
  "compilerOptions": {
    "target": "es2017",
    "module": "commonjs",
    "moduleResolution": "node",
    "declaration": true,
    "strict": true,
    "removeComments": false,
    "inlineSourceMap": true
  },
  "exclude": [
    "lib",
    "types"
  ]
}

标签: javascripttypescripttsctsconfig

解决方案


这些项目是您正在建设的还是目前正在建设的?如果是这样,这听起来像是您正在使用的依赖模式的问题。

但是,无论如何 - 为了实现这一点,您需要一次更新一个模块。

使用旧模块的先前版本,您应该能够使用该最终输出作为新模块当前版本的依赖项。

然后,一旦您更新了这些项目 - 继续修改其他解决方案。

您必须先研究一个解决方案,然后再研究另一个 - 如果您在两者中都实施更改,您将破坏依赖关系并且无法编译其中任何一个。


推荐阅读