项目间的跨项目引用

13 浏览
0 Comments

项目间的跨项目引用

是否可能在两个TypeScript项目之间建立引用关系? 假设我们有以下项目结构:

\"Structure\"

Module1.ts 包含:

module TestModule {
    export interface Interface1 {
    }
}

Module2.ts 包含:

module TestModule {
    export interface Interface2 extends Interface1 {
    }
}

Test1 被引用在 Test2 中。 我得到了一个错误 无法找到符号“Interface1”Module2.ts中。 它在一个项目中工作,但我不知道如何使其从另一个项目中可见...也许现在不可能。

[编辑1。]

当我尝试使用TestModule.Interface1模式时,我收到相同的错误(以不同的方式表达)。 但是IntelliSense看到了我的Interface1

\"IntelliSense\"

[编辑2。]

我注意到我不能使用来自另一个项目的文件。 即使我添加了正确的引用(/// )并链接了我第一个项目中的所有文件。

admin 更改状态以发布 2023年5月25日
0
0 Comments

@dhsto提出的解决方案有效,但我找到了一种使用链接文件夹的替代方法。我在这篇文章中详细讲解了这种方法,以下是如何实现:

可以通过创建一个目录来保存您的引用,我喜欢将其命名为“_referencesTS”,该目录将包含从Test1链接到的所有文件的链接。这可以逐个完成,但如果必须为每个新的TS文件完成这项工作,这将变得非常麻烦。然而,链接文件夹将会链接其下面的所有文件,这可以通过编辑csproj文件完成。

右键单击Test2项目并单击“卸载项目”,然后右键单击该项目并单击“编辑Test2.csproj”以编辑文件。转到包含标记的,并插入以下代码:


   _referencesTS\%(RecursiveDir)%(FileName)

将相对路径替换为Test1中您的TS文件的位置,这使用通配符(*)链接所有.ts文件(由*.ts指定)以及所有子文件夹中的文件(由\**\指定)。

这些文件夹中的TS文件现在将显示为链接到Test2中,从而实现自动的typescript引用。

注意:这种方法的唯一缺点是,当在链接文件夹中添加新文件时,用户必须卸载和重新加载项目或关闭和打开解决方案才能在Test2中看到它。

0
0 Comments

你有很多方法可以实现这个功能。

选项1 - 项目引用(TypeScript 3.0+)

如果你使用的是TypeScript 3.0,则可以考虑使用项目引用。在此处阅读更多信息

选项2 - 构建脚本

使用类似于gulp-typescriptgrunt-ts或纯批处理脚本的东西将文件复制到主项目的文件夹中。

或者,在Visual Studio中运行构建事件,将文件复制到主项目中。

选项3 - npm包

如果你使用npm,可以为你的其他项目创建一个包。然后你可以在主项目中使用你的包。指定本地依赖是一个好办法,或者使用Sinopia这样的东西,它是一个私有仓库服务器。我从未使用过它,但看起来它可以很好地工作。

选项4 - NuGet包

你可以研究创建一个NuGet包,然后本地安装它

选项5 - --declaration --outDir编译器选项

你可以设置--outDir编译器选项或tsconfig.json中的outDir属性,将目录指向你的其他项目,然后使用--declaration编译它,以便生成与之相对应的声明文件(.d.ts)。例如:--declaration --outDir ../Test1/External

原始答案(使用--out

如果你在Visual Studio中右键单击你的库项目并点击属性,你也可以做类似的事情。在TypeScript Build选项卡中,勾选将JavaScript输出合并到文件中选项,并指定主项目中的位置(例如$(SolutionDir)/TypedApp/External/TypedLibrary.js)。然后,也勾选生成声明文件以生成一个.d.ts文件。

设置项目自动构建

完成后,构建你的库项目,然后在主项目中包含.js.d.ts文件。在你的HTML文件中包含.js文件,在你的TypeScript文件中引用.d.ts

每次重建库项目时,都会自动将更改更新到主项目中。

0