我的文件夹结构是这样的:
root
|-- app1
|-- node_modules
|-- tsconfig.json
|-- ts
|-- app2
|-- node_modules
|-- tsconfig.json
|-- ts
|-- shared
|-- ts
|-- typings
|-- missing-definitions.d.ts
|-- tsconfig.json
app1
和app2
都是具有单独依赖项和构建的独立应用程序,但它们都通过执行类似include SharedFile from '../../shared/ts/SharedFile';
的操作来访问一些具有shared
的文件。它们还包括missing-definitions.d.ts
,它定义了几个没有@types
的模块。shared
包含共享代码,但本身不是可构建的应用。
构建应用程序时,tsc
运行良好,并且不会给出任何错误/警告。 vscode 似乎在app1
和app2
文件中也能正常工作。我在 vscode 中打开共享文件时遇到了问题。VSCod 似乎找不到missing-definitions.d.ts
中定义的模块或完全存在于其他应用@types
中的模块的定义,尽管shared/tsconfig.json
文件指向这些目录。
我的问题是- 如何在每个文件夹中设置tsconfig.json
以使 vscode 工作?我有点困惑我是否应该在每个配置中使用baseUrl
、paths
、typeRoots
和/或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 都不会读取/解析它。
我为此使用了npm
和npm link
,我使用符号链接自动处理我的嵌套依赖项。您不必实际使用npm
,除了使用它来管理您的本地依赖项。
如果您对此方法感到满意(并且至少对npm
有点熟悉),则可以:
- 为每个项目创建一个 package.json 文件(紧挨着相应的
tsconfig.json
文件) - 将
shared
作为本地依赖项添加到app1
和app2
下的 package.json 中,例如:
"name": "app1",
"dependencies": {
"shared": "File:../shared"
}
- 与符号链接同步,从
root
文件夹执行:
symlink ./ --execute
- 将
moduleResolution
设置为在各自的tsconfig.json
文件中"node"
这将自动且近乎即时地将shared
同步到app1
和app2
。如果这不是必需的,则npm link
或符号链接都不是,您可以在两个应用程序文件夹中运行npm install
。
注: 如果从符号链接中省略
--execute
,则可以看到命令列表,而无需执行它们。