【问题标题】:How to put TypeScript sources into separate VS project?如何将 TypeScript 源代码放入单独的 VS 项目中?
【发布时间】:2017-01-03 12:12:21
【问题描述】:

我有一个长期运行的 Web 项目(3-4 岁),它基于 ASP.NET MVC 5。我也有一个用 TypeScript 编写的大型客户端代码库。由于早期的约定,TypeScript 源代码是 MVC 5 csproj 项目的一部分,因此它与后端一起编译。

由于许多原因,这种结构非常不幸。主要有:违反SRP、与后端强耦合、后端无法单独维护和构建、前端无法单独维护和构建等。

我想将客户端代码库分离到一个新的 Visual Studio 项目中,但是,我不知道最好的方法是什么,因为 Visual Studio 不提供拥有干净的 TypeScript 项目的方法(在至少据我所知)。

我正在使用带有 TypeScript 2.0 的 Visual Studio 2015。我有什么选择?

【问题讨论】:

    标签: asp.net-mvc visual-studio typescript


    【解决方案1】:

    首先,如果您的客户端代码(TypeScript 应用程序)不需要自己的Web.config 文件——也就是说,您不需要配置 IIS 授权、重定向等——您可以简单地 在 Visual Studio 中使用“带有 TypeScript 的 HTML 应用程序”项目类型

    但是,如果您的客户端和服务器代码都需要自己的 Web.config 并且它们被部署到同一个 IIS 网站,那么拥有两个单独的 ASP.NET 项目会变得更加困难,因为需要合并两个 Web.config 文件......这是不可能的,AFAIK。

    我遇到了类似的问题,但在我的例子中,我有一个用 TypeScript 编写的基于 AngularJS 的 Web 应用程序和一个 ASP.NET Web API 后端。

    到目前为止,我能想到的最好的不需要任何额外构建步骤的方法就是不要将 TypeScript 代码移动到单独的项目中,而是移动 Web API / MVC 代码。客户端 TypeScript 最终出现在 ASP.NET Web 项目中,Web API 进入类库。

    剩下的两个痛点是共享的Web.config 和通过Global.asax 引导的Web API,这最终导致了“错误”的项目。关于Web.config,可以通过configSource 机制进一步将Web API 配置提取到单独的.config 文件中。我看不到从(否则仅客户端代码)ASP.NET 项目中获取 Global.asax 中的 Web API 引导的方法。

    【讨论】:

    • 感谢您分享您的想法。我正在考虑它,但对我来说听起来有点脏。刚刚找到项目类型HTML application with TypeScript,正在试验中。
    • 听起来不错。如果您找到一种方法将该 TypeScript 项目的 Web.config 与您的 ASP.NET MVC 5 的 Web.config 合并,如果您在此处发布您的解决方案作为答案,我将不胜感激!
    • HTML Application with TypeScript 项目类型似乎有效。乍一看,它似乎是一个带有预配置 TypeScript 支持的小空 Web 项目。我刚刚复制了所有的来源和类型,它似乎工作正常。我猜你必须做出决定的时候并不在场。
    • 我现在不明白为什么需要将 TypeScript 项目的 web.config 合并到 Web MVC 项目的项目中。虽然它确实存在于 TypeScript 项目中,但它几乎没有内容,似乎只是一个技术性的东西。我想我什至会尝试删除它,因为它只有几个看似无关的设置。
    • @ZoltánTamási:完成。祝你的项目好运,新年快乐!
    【解决方案2】:

    IMO,像您的 javascript 或 css 这样的客户端代码应该与您的“后端”代码一起使用,后端代码并不意味着您的整个后端代码,它应该是一个仅处理 http 请求的瘦控制器层应用程序和服务器端渲染

    你可以将你的单体应用分成多个service layer和一个frontend layer,它们只处理httprequest和渲染

    仅将 javascript 和 css 分离到一个项目中的问题是

    1. 它使部署变得复杂,当您的客户端代码和服务器代码不兼容时,您不知道应该先部署哪个

    2. 当你将你的客户端代码和后端分开时,你不能做 js hash(你不需要处理客户端缓存)

    【讨论】:

    • 感谢您的回答。我已经有了一个带有底层业务服务层的瘦控制器层,但出于其他原因我仍然需要这种分离。
    猜你喜欢
    • 2014-12-13
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多