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

时间:2017-03-09 18:15:03

标签: visual-studio typescript visual-studio-code tsconfig

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

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

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

构建应用时,tsc效果很好,不会出现任何错误/警告。 vscode似乎也在app1app2文件中正常工作。我在vscode中打开共享文件时遇到问题。 vscode似乎无法找到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都不会读取/解析它。

1 个答案:

答案 0 :(得分:0)

我正在使用npmnpm link,我使用symlink自动处理我的嵌套依赖项。您不必实际使用 npm,除了使用它来管理您的local dependencies

如果你对这种方法没问题(至少有点熟悉npm),你可以:

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

        这会自动且几乎立即将sharedapp1app2同步。如果不需要,那么npm link或符号链接都不是,您只需在两个应用文件夹中运行npm install

          

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