如何在具有共享代码的多项目环境中设置 tsconfig.json 文件?



我的文件夹结构是这样的:

root
|-- app1
|-- node_modules
|-- tsconfig.json
|-- ts
|-- app2
|-- node_modules
|-- tsconfig.json
|-- ts
|-- shared
|-- ts
|-- typings
|-- missing-definitions.d.ts
|-- tsconfig.json

app1app2都是具有单独依赖项和构建的独立应用程序,但它们都通过执行类似include SharedFile from '../../shared/ts/SharedFile';的操作来访问一些具有shared的文件。它们还包括missing-definitions.d.ts,它定义了几个没有@types的模块。shared包含共享代码,但本身不是可构建的应用。

构建应用程序时,tsc运行良好,并且不会给出任何错误/警告。 vscode 似乎在app1app2文件中也能正常工作。我在 vscode 中打开共享文件时遇到了问题。VSCod 似乎找不到missing-definitions.d.ts中定义的模块或完全存在于其他应用@types中的模块的定义,尽管shared/tsconfig.json文件指向这些目录。

我的问题是- 如何在每个文件夹中设置tsconfig.json以使 vscode 工作?我有点困惑我是否应该在每个配置中使用baseUrlpathstypeRoots和/或include

这是我对app1/tsconfig.json

{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"baseUrl": ".",
"paths": {
"*" : [
"node_modules/*",
"node_modules/@types/*"
]
}
},
"include": [
"./ts/**/*.ts",
"../shared/typings/**/*.d.ts"
]
}

无论我为shared/tsconfig.json设置了什么,似乎 vscode 都不会读取/解析它。

我为此使用了npmnpm link,我使用符号链接自动处理我的嵌套依赖项。您不必实际使用npm,除了使用它来管理您的本地依赖项。

如果您对此方法感到满意(并且至少对npm有点熟悉),则可以:

  1. 为每个项目创建一个 package.json 文件(紧挨着相应的tsconfig.json文件)
  2. shared作为本地依赖项添加到app1app2下的 package.json 中,例如:
"name": "app1",
"dependencies": {
"shared": "File:../shared"
}
  1. 与符号链接同步,从root文件夹执行:
symlink ./ --execute
  1. moduleResolution设置为在各自的tsconfig.json文件中"node"

这将自动且近乎即时地将shared同步到app1app2。如果这不是必需的,则npm link或符号链接都不是,您可以在两个应用程序文件夹中运行npm install

注: 如果从符号链接中省略--execute,则可以看到命令列表,而无需执行它们。

最新更新