【问题标题】:How do I set up tsconfig.json files in multi-project environment with shared code?如何使用共享代码在多项目环境中设置 tsconfig.json 文件?
【发布时间】:2017-07-30 20:48:44
【问题描述】:

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

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 中打开共享文件时遇到问题。尽管shared/tsconfig.json 文件指向这些目录,vscode 似乎无法找到missing-definitions.d.ts 中定义的模块或完全存在于其他应用程序@types 中的模块的定义。

我的问题是——如何在每个文件夹中设置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 都不会读取/解析它。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我的shared 文件夹本身并不是一个完整的项目/模块。它基本上只是 .ts 和 .d.ts 文件的松散集合。看起来您的解决方案对于将共享代码导入项目非常聪明,但我的主要问题是 vscode 不知道在哪里可以找到共享代码本身的定义。您的解决方案是否可以处理这个问题,或者您的所有共享部件都是独立模块?
    猜你喜欢
    • 1970-01-01
    • 2015-10-06
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 2019-01-27
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多