两个项目之间的跨项目引用

Nic*_*kon 28 reference visual-studio typescript

是否可以在两个TypeScript项目之间进行引用?假设我们有以下项目结构:

结构体

Module1.ts 包含:

module TestModule {
    export interface Interface1 {
    }
}
Run Code Online (Sandbox Code Playgroud)

Module2.ts 包含:

module TestModule {
    export interface Interface2 extends Interface1 {
    }
}
Run Code Online (Sandbox Code Playgroud)

Test1被引用Test2.我得到一个错误Could not find symbol 'Interface1'Module2.ts.它在一个项目中工作,但我不知道如何从其他项目中看到它...也许它现在不可能.

[编辑1.]
当我尝试使用TestModule.Interface1模式时,我得到相同的错误(以不同的方式说).但智能感知我看到了Interface1:

智能感知

[编辑2.]
我注意到我无法使用其他项目中的文件.即使我/// <reference ...在第一个项目中添加了正确的引用()并链接了所有文件.

Dav*_*ret 23

有很多方法可以做到这一点.

选项1 - 项目参考(TypeScript 3.0+)

如果您使用的是TypeScript 3.0,请查看使用项目引用.在这里阅读更多.

选项2 - 构建脚本

使用gulp-typescript,grunt-ts或只是批处理脚本之类的东西将文件复制到主项目的文件夹中.

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

选项3 - npm包

如果您使用npm,则可以为其他项目创建一个包.然后,您可以在主项目中使用您的包.指定本地依赖项是一种很好的方法,可以使用像sinopia这样的私有存储库服务器.我从来没有使用它,但看起来它会很好用.

选项4 - NuGet包

您可以考虑创建一个nuget包,然后在本地安装它.

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

您可以将--outDir编译器选项或outDir属性设置tsconfig.json为您的其他项目的目录,然后也编译它,--declaration以便它也生成声明文件(.d.ts).例如:--declaration --outDir ../Test1/External.

原始答案(使用--out)

如果右键单击库项目并单击属性,则可以在Visual Studio中执行类似操作.在TypeScript Build选项卡中,选中选项Combine JavaScript output into file并指定主项目中您想要的位置(例如$(SolutionDir)/TypedApp/External/TypedLibrary.js).然后还要检查Generate declaration files以生成.d.ts文件.

为自动构建设置项目

一旦做到这一点,建立自己的图书馆项目,然后包括.js,并.d.ts在您的主项目..js在html中包含该文件,并.d.ts在您的打字稿文件中引用该文件.

在主项目中包含文件

每次重建库项目时,它都会自动使用更改来更新主项目.

  • 太好了,我很高兴能帮忙!只是另外一个注释......说你有一种情况,你想在多个项目中共享一个"打字稿库".要做到这一点,你需要提出自己的构建方法,包括生成`.js`,`.d.ts`和`.js.map`文件(如上所述),然后将这些文件复制到每个项目需要它.生成文件后,可以使用Post-build事件进行复制("项目">"属性">"构建事件">"构建后事件命令行"). (2认同)

Mar*_*627 10

@dhsto建议的解决方案有效但我找到了使用链接文件夹的替代方案.我在本文中详细介绍了它,以下是如何实现它:

它可以通过创建一个文件夹来保存您的引用来实现,我喜欢将其命名为"_referencesTS",该文件夹将包含Test1文件的所有链接.这可以单独完成,但如果必须为每个新的TS文件完成,则会变得非常麻烦.然而,链接文件夹将链接其下的所有文件,这可以通过编辑csproj文件来完成.

要编辑文件,请右键单击Test2项目并单击" Unload Project",然后右键单击该项目并单击" Edit Test2.csproj".导航到<ItemGroup>包含<TypeScriptCompile>标记的内容并插入以下代码:

<TypeScriptCompile Include="..\Test1\**\*.ts">
   <Link>_referencesTS\%(RecursiveDir)%(FileName)</Link>
</TypeScriptCompile>
Run Code Online (Sandbox Code Playgroud)

在Test1中替换TS文件位置的相对路径,这使用通配符(*)链接*.ts所有子文件夹中的所有.ts文件(由其指定)(由此指示\**\).

这些文件夹中的TS文件现在将在Test2中显示为链接,允许自动打字稿引用.

注意:此方法的唯一缺点是,当在链接文件夹中将新文件添加到Test1时,用户必须卸载并加载项目或关闭并打开解决方案,以使其显示在Test2中.


Mic*_*ltu 6

对事态感到沮丧,我写了一个NuGet包,主要解决了这个问题.使用NuGet包你可以只添加一个项目到另一个项目的引用,它将以一种安全的方式复制文件,不会意外编辑错误的文件,仍然提供智能感知和调试.

详细信息可以在Readme.md中找到,或者您可以安装NuGet包并运行(我建议至少阅读如何使用部分).

https://github.com/Zoltu/BuildTools.TypeScript.FromReferences


归档时间:

查看次数:

11203 次

最近记录:

7 年,10 月 前