VS 2015 ASP.NET 4 MVC 5中的Typescript-设置和选择的工作组合是什么?

VS 2015 ASP.NET 4 MVC 5中的Typescript-设置和选择的工作组合是什么?,asp.net,typescript,types,npm,Asp.net,Typescript,Types,Npm,我正在向VS2015 MVC 5项目添加一个typescript项目,使其成为ASP.NET 4,而不是ASP.NET 5或ASP.NET 6代码:只有MVC是版本5。这是我问题所有方面的唯一目标,我不能对typescript、node.js、模块加载器等使用一般化或理论指导 使用ASP.NET内核,问题更简单。但这不是我所面对的。当涉及ASP.NET4MVC5时,所有常用的示例和指南来源都会避免或提供一些废话,因为这很难。没有人会具体说明障碍有多大或具体是什么 最糟糕的是,Typescript

我正在向VS2015 MVC 5项目添加一个typescript项目,使其成为ASP.NET 4,而不是ASP.NET 5或ASP.NET 6代码:只有MVC是版本5。这是我问题所有方面的唯一目标,我不能对typescript、node.js、模块加载器等使用一般化或理论指导

使用ASP.NET内核,问题更简单。但这不是我所面对的。当涉及ASP.NET4MVC5时,所有常用的示例和指南来源都会避免或提供一些废话,因为这很难。没有人会具体说明障碍有多大或具体是什么

最糟糕的是,Typescript文档就像开源文档:您只能得到一个问题,一个步骤。这产生了一个由无休止的问题树递归组成的研究工作流

我理解意见,我甚至有一个。但我在寻找经验的答案,什么是一个组合,已被证明是一个生产团队的工作

因此,以下是需要解决的具体问题,并使其在可正常工作的中型ASP.NET 4 MVC 5 LOB应用程序范围内工作:

Visual Studio版本的typescript。这是一个使用node最简单的安装问题,工具/选项-typescript设置必须匹配

浏览器风格测试通常是手动TDD工作流或node.js自动测试。这必须提前选择,以防止更多的问题树递归。我们将使用基于浏览器的。。。使用袋鼠的幻影

NPM@types/library name:应该仅基于带有@types引用的package.json,使用library name和library-name.d.ts填充node_modules文件夹。但实际上需要package.json包含@types/library名称和library名称的引用,才能在我的VS 2015 ENT v3和asp.net 4 mvc 5项目中使用。所有指定的版本都需要手动更正,即使如此,版本查找过程也有点可疑。这个@types进程可能不是ASP.NET4MVC5的方式,但是我不知道有什么样的修正方案@类型是当前唯一推荐的typescript选项

哪个版本的ECMAScript:es6显然遥遥领先。es2015是可能的,但这似乎与其他几个问题有关。据推测,这些名称是相同的,但有两个地方可以设置它们。我在tools/options/typescript中选择了es2015。但是现在这3个设置中的任何一个出错都可能是一个问题

模块系统:CommonJs用于节点和自动测试,VS开发测试仅用于服务器端,VS UI测试是手动过程。所以AMD,require JS可能是VS的一个选项,但它添加了自己的工作流程和维护以及在ASP.NET中很难正确获得的注意事项。使用ASP.NET绑定和三重斜杠引用可靠可能会起作用,但将库放入节点模块后,您可能希望在导入语句的文件名slug中使用节点模块的完整路径。这一切都非常笨拙,而且涉及最多的猜测。但解决整个问题可能是整个问题的“关键”

可能还有很多其他的小问题。但是这样做的人将解决所有提到的问题,以及其他问题

我要寻找的是所有这些问题的所有设置细节,这些设置基于ASP.NET 4 MVC 5中的Typescript应用程序,用于VS 2015中基于浏览器的单元/行为测试。做过的人会理解的


非常感谢您的考虑。

您缺少的是关注点的分离,尽管这些启动模板最初有好处,但它们开始导致偶然的依赖性,并使心智模型复杂化。将前端放在单独的项目中要容易得多

不管:

Visual Studio版本的typescript

始终使用可用的最新版本。这控制驱动IDE的TypeScript的版本。在开发过程中,您可能会在单独的过程中或在浏览器中编译。同样,您希望使用最新的软件包管理器,但它可能安装在不同的软件包管理器中

浏览器样式测试通常为手动TDD工作流或node.js 测试自动化。必须提前选择这一点,以防止出现更多的问题 问题树递归

首先,我完全同意预先选择的重要性,但是,如果仍然有可能的话,只是不愉快地将测试添加到现有项目中

TDD工作流涉及自动化测试,因为它们依赖于快速反馈。这与您是在浏览器中运行测试还是使用NodeJS是正交的

您应该使用对您的应用程序最有意义的方法,这可能是两者的混合

因为您正在编写前端JavaScript a 应用程序您可能希望在浏览器中运行一些测试。然而,正如Bob Robert C.Martin叔叔所说,观点应该是愚蠢的,不需要什么测试。我对这一点的解释是,我们不应该花太多时间测试Angular或React组件,以确保它们正确呈现,而应该专注于测试系统的行为元素,如服务和简单的旧功能

也就是说,您可能希望针对实际的浏览器运行时运行客户端服务测试,而不仅仅是Node.js,这是合理的

有许多测试库可以帮助您实现这一点。除了说您应该找到一个可靠的测试运行程序和一个简单的断言库之外,我没有具体的建议。像QUnit和Tape这样久经考验的测试库就是可靠选项的例子

最后一点需要注意的是,不要将集成测试的概念与在web浏览器中运行测试混为一谈,在web浏览器中运行TDD风格的测试是完全有效的,这意味着单元测试

NPM@types/library name:应该用 library name和library-name.d.ts,但需要package.json 保存@types/library名称和 在我的VS 2015 ENT v3和asp.net 4 mvc 5项目中使用的库名称

简单地说,这是为了将前端与后端解耦。Visual Studio和ASP.NET与类型包的版本控制毫无关系

如果一个包带有它自己的类型声明,那么您不需要安装辅助类型包,否则就需要安装辅助类型包

无论哪种方式,都可以使用面向JavaScript的包管理器(如NPM、JSPM或Thread)安装JavaScript和TypeScript依赖项

不要使用NuGet进行这些操作

正如您所说,存在版本控制问题,这是TypeScript中当前的一个难题。然而,它再次与ASP.NET或Visual Studio无关

哪个版本的ECMAScript:es6显然遥遥领先。es2015 很有可能,但这似乎与几个 其他问题

ES6与ES2015相同,后者是前者最终发布的名称。ECMAScript现在大致遵循每年一次的节奏,ES2017即将到来

使用transpiler(如TypeScript)的好处在于,您可以使用es2017的最新功能,并且仍然将es5作为发射的目标,这样您就没事了

模块系统:CommonJS用于NodeJS和自动测试,以及VS 开发测试只在服务器端和VSUI测试中自动进行 这是一个手动过程。因此,AMD/UMD要求JS可能是 VS,但它添加了自己的工作流程、维护和注意事项。 使用三重斜杠引用可能有效,但在您 已将您/他们的库放在您想要使用的节点模块中 导入中文件名slug中节点模块的完整路径 陈述解决整个项目可能是整个项目的“关键” 问题

这是一个非常复杂的问题,可能是你真正需要花大量时间考虑的唯一问题。正如我前面所说的,是否使用NodeJS与自动化测试是正交的。但是如果您使用测试代码以nodej为本机目标,那么您将需要使用CommonJS输出

对于实际的应用程序代码,选择与您是否使用VisualStudio无关,很抱歉再次重申这一点,但将这些想法分开确实很重要

前端应用程序代码使用哪种模块格式是一个非常重要且有争议的问题

Triple///引用不是一种模块格式,而是一种声明跨多个文件声明和引用的全局变量之间依赖关系的方法

它们不能很好地扩展,当您只有少量文件时,它们可以正常工作

不应使用三重///引用。它们不是模块化机制,它们的使用与您提到的任何模块系统/模块格式(包括CommonJS)完全不同

永远不要将它们与模块系统相结合,这是在NodeJS下运行测试或使用RequireJS或其他任何东西加载应用程序所必须做的

RequireJS是一个很好的选择,正如您所说,它意味着AMD模块。RequireJS不需要使用任何三重斜杠引用。事实上,当使用此格式或任何其他模块格式时,应避免使用它们

我强烈建议不要使用UMD模块。同构JavaScript是一个有问题的想法,它不会给您带来任何好处,因为您正在创建一个带有.NET后端的浏览器应用程序

许多开发人员实际上在浏览器中使用CommonJS模块。这需要 s使用诸如Webpack之类的工具不断地捆绑它们。这种方法有优点也有缺点。主要优势是能够通过Webpack或Browserify依赖现有的NodeJS JavaScript服务器端工具,如npm。这听起来可能不是一个很大的优势,但是CommonJS模块可用的丰富工具的数量没有什么可嘲笑的,这使得它成为一个强大的选择

考虑使用模块格式和SystemJS加载程序via来管理包和加载代码。通过这种方法,您获得了RequireJS的优势,能够在NodeJS下运行测试,并使用jspm运行浏览器,而无需切换目标格式或捆绑代码进行测试。在开发过程中也不需要捆绑代码,尽管这是受支持的。更重要的是,您可以利用编写未来兼容的代码的优势,因为它提供了唯一的模块格式和加载程序,可以正确地建模ES模块在浏览器中本机实现时最终将具有的语义。JSPM对TypeScript、Babel和Traceur具有一流的支持。 以下是从上述链接中获取的系统模块格式的说明:

System.register可被视为一种新的模块格式,旨在支持ES5中ES6模块的确切语义。它是一种通过协作开发的格式,在Traceur中作为实例化,在Babel和TypeScript中作为系统支持作为模块输出。此格式支持ES6模块支持的所有动态绑定和循环引用行为。通过这种方式,它可以作为进入ES6模块的polyfill路径的安全和全面的目标格式

免责声明:
我是JSPM GitHub组织的成员,在维护注册表方面发挥了作用,并且对JSPM cli做出了非常微小的贡献。

这确实是一个令人惊讶的答案!然而,我在一个VisualStudio项目中专门关注了typescript与ASP.NET4和MVC5的集成,但我一直无法实现。你的考虑是笼统的。可以在node.js或webstorm中基于浏览器的应用程序或ASP.NET Core中获得我所需的所有内容,但我找不到ASP.NET 4 MVC 5的工作指南或完整指南。正如我所说,这样做的人将解决所有提到的问题,以及其他问题。这就是我要寻找的信息。有趣的是,我想说TypeScript是一个更好的文档化项目。VisualStudio已经拥有内置支持很长时间了。您可以从突出显示语言服务插件的位置获得该插件的最新版本。关键的一点是,就TypeScript集成而言,您基本上拥有与JavaScript集成相同的选项集,大致上没有增加也没有减少。关键之处在于,对于asp.net这样的平台,没有特定于typescript的集成,因为。。。只是JavaScript.Aluan,只有Typescript站点是可靠的,而且它很简陋。我已经完成了所有的多重观察,阅读了所有的书籍。翻阅帖子就像在交换会上寻找左撇子司机一样。如果你在engo星球的一个小区域工作,它就可以生存下来。对我来说,研究是一个可能的解决方案的首要基础。在VS中,我在两年内放弃了六次打字。TS git博客是零碎的,没有上下文。当另一个图书馆的团队“前进”时,一个月固定下来的东西会重新出现。这真的是缺乏可理解性。所以我终于有一件事要做了:我删除了bluebird和es6。Promise目前没有任何错误。现在,我在vs的msbuild的CompileTypeScriptWithTSConfig目标中的VsTsc操作中得到一个生成错误。错误是“未能从”从ts文件输出的每个js和js.map上创建URI。缺少js和map文件。听起来很熟悉吗?谢谢,Aluan,如果您在Visual Studio ASP.NET 4 MVC 5 LOB应用程序中有一个实质性的工作Typescript项目,不使用ASP.NET Core,不在Node.JS上运行,而是使用MVC控制器和Razor视图,以及模型、视图模型、EF7和ASP.NET 4 MVC 5堆栈的其余部分,那么我会花钱获得您的Typescript设置副本。我会花更多的钱来获取ASP.NET 4 MVC 5解决方案文件夹的副本,包括项目文件和除控制器文件夹、API文件夹视图文件夹、模型文件夹和ViewModels文件夹之外的所有内容。请注意,@aluan haddad的回答是typescript和决策树中关于这些问题考虑的一个极好的背景。然而,根据他的回答,我对我的问题进行了编辑,以便更清楚地表明,我只是在寻找一个完整的ASP.NET 4 MVC 5的typescript解决方案,其中包括基于浏览器的typescript代码的单元/行为测试。虽然我感谢您
澄清了你的问题,我只想说,你永远不会找到一个TypeScript测试解决方案,而不是一个JavaScript测试解决方案。Aluan,请记得我说过这句话,但我在寻找经验的答案,什么是一个组合,已经证明对生产团队有效。我相信我面临的一切都是配置问题。所有配置问题都与不正确理解特定配置的目的有关,或者与无法解释配置组合的总体目的有关。我将跟随您。也许我误解了你问题的目的。由于您的问题涉及到一个项目的某个阶段,即选择模块加载器和transpilers之类的工具,所以我没有想到您可能有一个复杂的现有设置,您在其中投入了大量资金。