我在构建引用另一个项目(@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”类型。 如果存在,请尝试
的新声明(.d.ts)文件。npm install @types/red5__middleware
或添加一个包含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"
]
}
答案 0 :(得分:0)
您正在构建或正在构建这些项目吗?如果是这样,这听起来像是您使用的依赖项模式有问题。
但是,无论如何-为了实现这一点,您将需要一次更新一个模块。
使用旧模块的先前版本,您应该能够将最终输出用作新模块当前版本的依赖项。
然后,一旦更新了这些项目,请继续并修改其他解决方案。
您将必须处理一种解决方案,然后再处理另一种解决方案-如果您在两种解决方案中都进行了更改,则将破坏依赖关系,并且将无法编译它们中的任何一个。
答案 1 :(得分:0)
要解决此问题,基本上只是对tsconfig.json
文件的修改。
需要两个项目:
compilerOptions.baseUrl
-用于解析非相对模块名称的基本目录。compilerOptions.paths
-模块名称到相对于baseUrl的位置的路径映射条目的列表。因此,在@red5/middleware
模块中,我们这样引用路由器:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@red5/router": [ "../router" ]
}
}
}
然后在@red5/router
模块中,我们像这样引用中间件:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@red5/middleware": [ "../middleware" ]
}
}
}
然后一切都会解析到正确的位置。