ASP.NET Core + Angular 2 Template for Visual Studio

多个月以来,我和多个Github上的社区贡献者一起建立支持库、包,我们最终的目的是希望完成这样一个作为起点的模板,也就是基于把Typescript代码和Angular2宿主在ASP.NET Core项目中,这个模板包含一下这些方面:

  • 服务端预加载(预渲染):这样你的UI可以快速的显示,甚至在浏览器下载Javascript之前。

  • Webpack中间件集成:在开发期间,你不需要一直重新编译你的客户端项目,或者你可以用一个watcher工具在后台帮你做这些事。

  • 模块热拔插:在开发期间,一旦你编辑了一个Typescript文件、CSS文件、或者其他客户端资源,你的改变也将在不刷新页面的情况下立即推送到浏览器。

  • 快速构建:对于开发来说,你不需要再等待再每次更改之后,webpack去重新解析第三方代码,因为第三方类库将会独立到另外的一个bundle中,另外,超快速的构建包含了所有的map文件便于调试,再发布版本的文件中却将直接输出压缩版本,再发布过程中,这些工作将自动完成。

那如果你想使用一个不一样的framework呢?如果你倾向于React、React+Redux或者Knockout,我们也同样为他们提供了模板。

假如你是在Linux和MacOS开发,或者使用其他IDE,使用我们的Yeoman生成器来获得在VS Code或者其他编辑器上对于Angular2、React、React+Redux或者knockout项目的相同支持,.NET Core是完全跨平台的。

 

安装

 

首先,确保你已经安装了一下必须内容,没有他们事情就无法进行下去了:

  • Visual Studio 2015 Update3:注意Update2是不够的,你需要Update3,因为它修复了一些关于npm的bug,而且它是使用Typescript的先决条件。

  • .NET Core 1.0.1

  • TypeScript 2.0 for Visual Studio 2015: 如果你的VS2015一直"抱怨" Cannot find name 'require',这就是因为你忘记了安装本插件。

  • Node.js 4及以上: 因为一些issue ,我们暂时不支持Node 0.x,使用node -v检查你的Node版本。

当你确认过以上内容安装之后,下载并安装 ASP.NET Core Template Pack Extension

 

创建并且运行项目

 

当你完成安装以上所有内容后,你可以打开VS2015 创建新项目,展开Web目录,选择 ASP.NET Core Angular2 Starter Application(.NET Core)

 

键入一个名字,点击OK,现在耐心等待一段时间,让Node.js安装所有依赖项目,考虑你的网络环境,这可能需要一段时间(而且,考虑国内环境)

 

一切就绪之后,项目中看起来可能回出现一点问题,但是实际上并不是这样,当VS2015完成安装依赖后将会显示not installed

 

然后,VS犯了个错,事实上是因为一个只在macos上的可选依赖没有安装成功,你可以选择视而不见,但是如果你是个强迫症患者,那么看这里,追随大神的脚步,去解决掉它。

现在,你可以运行这个项目了,按下Ctrl+F5试试吧,以下内容将会显示在你的浏览器里:

 

服务端预渲染

 

在浏览一遍这个站点之后,你会发现一些简单的angluar2 component的例子,这看起来倒不是什么牛逼了的事,但是歧视已经在你看不见的地方发生了一些牛逼拉瞎的事情。

第一件事,虽然通常angular2运行在浏览器里,但是ASP.NET Core Server也可以让他运行在服务器端,所以它可以仅将HTML代码发送到浏览器,不需要javascript就可以显示内容。

为了证明它,你可以通过禁用浏览器的Javascript功能,然后刷新页面来查看内容,对于Chrome来说,你可以打开F12控制台,点击设置,在里面找到Disable Javascript复选框,并且反选它。

刷新页面,你会发现一切看起来和之前一样,左边的tab还是可以工作,但是一些依赖javascript的内容就不再可以运行了,比如counter。

 

服务器端预加载的意义何在?

 

意义并不在于让支持哪些不运行javascript的浏览器,它只是一种极端情况而已(如果为了这种极端情况,那还为什么要建立一个SPA应用呢?)

它真正的意义在于:

  1. 它极大的提高了用户体验:及时他们是在一个较慢的网络环境或者设备上,也可以在很快的看到你想显示给他们的内容,在这背后,你可能又一个很大的捆绑javascript正在下载、转换并且执行,然后紧接着接管页面实现绑定你的那些功能,这比花很长时间加载javascript代码,让客户看到一个空白的网页好的多。

  2. 它支持一些能不运行javascript的爬虫:对于搜索引擎来说,返回简单的HTML代码对于他们来说是更简单的理解和收录的。

假如你不想使用预加载,可以通过移除在Views/Home/Index.cshtml中的app标签的asp-prerender-module属性来禁用它。

 

Webpack集成

 

当前系统里的代码使用typescript编写,这就是说你需要在运行它之前先构建它,就像你使用SASS一样,需要在使用之前编码,甚至捆绑和压缩它。

目前最兴盛的modern javascript构建系统是Webpack,它类似Grunt和Gulp,但是在2017的今天(原文中是2016),Webpack是最流行的typescript编译、捆绑和压缩工具,我们在template中使用它的几个非常酷的功能:

 

Webpack 开发中间件

 

通常来说,一旦你改变任何一个Typescript文件,你都需要去运行webpack来重新生成javascript文件,但是webpack开发中间件会帮助你做这些工作。

如果你的项目运行在VS默认开发模式下,webpack会在后台监控你每一个到http://yoursite/dist的请求,它处理每一个请求并且返回一个编译过的代码文件。

 

模块热拔插(HMR)

 

在有任何代码修改之后,通常我们需要刷新页面来应用这些修改,但是这对于效率和调试方便性来说是很不友好的。

模块热拔插(HMR)解决了这个问题,在默认的开发模式下,它会监测对于angular项目文件的任何改变(Typescript,css,html),当改变发生,它会自动触发一次快速的编译,并且托送所有改变的文件到活动的浏览器窗口,你的应用程序将会在不刷新页面的情况下啊立即应用改变。

你可以通过打开控制才来观测它的工作,当VS开始调试,浏览器控制台将会显示以下内容:

看到[HMR] Connected的字眼了吗?它代表已经准备好接收新的文件了,尝试更改一个源文件。比如:ClientApp/app/components/home/home.component.html。

原文地址:http://www.dotnet.online/Article/66/ASP-NETCoreAngular2TemplateforVisualStudio

源地址:http://blog.stevensanderson.com/2016/10/04/angular2-template-for-visual-studio/

本文翻译征得了原作者Steve Sanderson的同意,感谢他为ASP.NET Core做出的杰出贡献。 

原文地址:http://www.cnblogs.com/xiaoyaojian/p/6272292.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis中if - else if - else 的使用

http://www.leftso.com/blog/765.html 不过有他的替代 choose,写法如下&#xff1a; <choose><when test"params!null">right JOIN</when><otherwise>LEFT JOIN</otherwise></choose> 复制 <choose><when test…

C#高性能TCP服务的多种实现方式

☆ 哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣&#xff0c;为了吸引眼球所以标题中一定要突出&#xff0c;其实我更喜欢的标题是《猴赛雷&#xff0c;C#编写TCP服务的花样姿势&#xff01;》。 本篇文章的主旨是使用 .NET/C# 实现 TCP 高性能服务的不同方式&a…

mysql中 where in 用法详解

https://blog.csdn.net/haibo0668/article/details/52584307 sssss mysql中 where in 用法详解 我是高手高手高高手 2016-09-19 11:33:29 102915 收藏 14 分类专栏&#xff1a; php MY SQL &#xfeff;&#xfeff; 这里分两种情况来介绍 WHERE column IN (value1,valu…

HashSet的存储方式

存储结构 存储过程

写给新手的WebAPI实践

此篇是写给新手的Demo&#xff0c;用于参考和借鉴&#xff0c;用于发散思路。老鸟可以忽略了。 自己经常有这种情况&#xff0c;遇到一个新东西或难题&#xff0c;在了解和解决之前总是说“等搞定了一定要写篇文章记录下来”&#xff0c;但是当掌握了之后&#xff0c;就感觉好简…

用limit 实现java的简单分页

https://blog.csdn.net/xinyuezitang/article/details/84324359 用limit 实现java的简单分页 xinyuezitang 2018-11-21 16:01:13 4447 收藏 9 分类专栏&#xff1a; Java 小Demo 文章标签&#xff1a; 分页 limit mysql 实现java分页 版权 一 mysql 中limit 用法 select …

Mybatis使用IN语句查询

https://blog.csdn.net/u011781521/article/details/79669180 Mybatis使用IN语句查询 lfendo 2018-03-23 16:45:03 201525 收藏 140 分类专栏&#xff1a; MyBatis 文章标签&#xff1a; mybatis JAVA sql 版权 一、简介 在SQL语法中如果我们想使用in的话直接可以像如下一…

IdentityServer4 实现 OpenID Connect 和 OAuth 2.0

关于 OAuth 2.0 的相关内容&#xff0c;点击查看&#xff1a;ASP.NET WebApi OWIN 实现 OAuth 2.0 OpenID 是一个去中心化的网上身份认证系统。对于支持 OpenID 的网站&#xff0c;用户不需要记住像用户名和密码这样的传统验证标记。取而代之的是&#xff0c;他们只需要预先在一…

Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

转载自 Java动态代理机制详解&#xff08;JDK 和CGLIB&#xff0c;Javassist&#xff0c;ASM&#xff09; class文件简介及加载 Java编译器编译好Java文件之后&#xff0c;产生.class 文件在磁盘中。这种class文件是二进制文件&#xff0c;内容是只有JVM虚拟机能够识别的机器码…

彻底理解JAVA动态代理

转载自 彻底理解JAVA动态代理 代理设计模式 定义&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。 代理模式的结构如下图所示。 动态代理使用 java动态代理机制以巧妙的方式实现了代理模式的设计理念。 代理模式示例代码 public interface Subject { pu…

docker 安装redis 挂载到宿主机

1.首先去redis获取对应版本的配置文件redis.conf&#xff1a; http://download.redis.io/releases/ 我选择的是 6.0.9 解压以后 有一个redis.conf 2.将 bind 127.0.0.1注释&#xff0c;daemonize yes注释掉&#xff0c;如果需要redis密码则找到 requirepass 并填上你的密码 …

搭建consul 集群

上图是官网提供的一个事例系统图&#xff0c;图中的Server是consul服务端高可用集群&#xff0c;Client是consul客户端。consul客户端不保存数据&#xff0c;客户端将接收到的请求转发给响应的Server端。Server之间通过局域网或广域网通信实现数据一致性。每个Server或Client都…

Java类加载的那些事

转载自 Java类加载的那些事 前言 Java源代码被编译成class字节码&#xff0c;最终需要加载到虚拟机中才能运行。整个生命周期包括&#xff1a;加载、验证、准备、解析、初始化、使用和卸载7个阶段。 加载 1、通过一个类的全限定名获取描述此类的二进制字节流&#xff1b; …

JAVA集合(笔记)

集合简介 概念&#xff1a;对象的容器&#xff0c;定义了对多个对象进项操作的的常用方法。可实现数组的功能。和数组的区别&#xff1a; 数组长度固定&#xff0c;集合长度不固定。数组可以存储基本类型和引用类型&#xff0c;集合只能存储引用类型。 位置&#xff1a; jav…

公司技术需求备忘录

业务现状领导要求 1) 部署环境要求: 公有云&#xff0c;私有云&#xff0c;原有院内系统。三套环境&#xff0c;兼容部署&#xff0c;一套代码多环境支持。2) 数据库要求&#xff1a;sqlserver&#xff0c;orcale&#xff0c;mysql要兼容&#xff0c;一套代码多库运行。3) 性能…

equals 和 hashCode 到底有什么联系?一文告诉你

转载自 equals 和 hashCode 到底有什么联系&#xff1f;一文告诉你 写在前面 Java的基类Object提供了一些方法&#xff0c;其中equals()方法用于判断两个对象是否相等&#xff0c;hashCode()方法用于计算对象的哈希码。equals()和hashCode()都不是final方法&#xff0c;都可…

如何将Excel的单元格设置成下拉选项?-excel设置下拉菜单

https://www.qiaoshan022.cn/excel/excel14169.html 如何将Excel的单元格设置成下拉选项&#xff1f;-excel设置下拉菜单 作者&#xff1a;乔山办公网日期&#xff1a;2019-09-24 21:13:23 返回目录&#xff1a;excel表格制作 在用Excel表录入数据时&#xff0c;有时需要限制…

写一个高性能的敏感词检测组件

最近写了一个高性能的敏感词检测组件【ToolGood.Words】。 一、高性能&#xff0c;它的效率到底有多快&#xff1f; 如果将正则表达式的算法效率设为1&#xff0c;高性能可达到正则表达式的1.5万倍。 二、选一个巧妙的算法&#xff1a; AC自动机&#xff08;Aho-Corasick Autom…

win10系统excel2019单元格显示完整的年月日时分秒设置方法

https://www.pianshen.com/article/88671983757/ win10系统excel2019单元格显示完整的年月日时分秒设置方法 技术标签&#xff1a; Windows excel显示年月日时分秒 excel显示完整的详细时间 excel2019显示完整时间 excel2019显示具体时间 excel显示具体的时间 描述&#…