65.9K
CodeProject 正在变化。 阅读更多。
Home

Gulp 带来的乐趣以及创建自动化项目构建 - 系列文章的第一部分

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2018 年 5 月 29 日

CPOL

9分钟阅读

viewsIcon

6302

在 VS 2015+ 中构建 Web 应用程序时,使用 NuGet 并不总是首选的包管理方法,因为它会限制您的创造力并阻碍学习。

如何利用 Bower 和 Gulp 进行自动化项目构建,以创建最快的 Content Delivery Speed

Bower and Gulp for Automated Project Builds

引言

有时,使用 NuGet 管理 Web 项目中的所有包是错误的选择,因为它会限制自动化构建在未来使用的全部潜力。当我提到自动化构建时,我提议有机会利用 Bower 和 NuGet 一起做一些真正令人兴奋且有益的事情,然后能够使用 Gulp 通过脚本自动化完全构建一个项目。

Gulp 自动化非常酷,因为您可以编写脚本从您的 bower 库中获取包,然后运行分发构建到您 Web 项目中的指定文件夹。这个指定的文件夹还将包含您的自定义 CSS、Artwork 和原始格式的脚本,并将与 bower 包库一起作为您的资源存储库。现在您在项目中拥有了一个我们可以称之为“Assets”的资源存储库,您可以自由地将您的资源分发到适当的位置。但是,如果我告诉您,您还可以 Minify、Uglify、Concat 并将单个文件捆绑到文件组中;这将是最终 Web 项目部署的构建块或基础。

那么,什么是最终的项目构建?我将其定义为能够获取 BootStrap、JQuery、Font-Awesome 和其他技术,然后将脚本、CSS 和图像分开,并将它们重新打包成单个文件,这些文件会去除注释、被压缩或缩小,然后将每个类别合并成一个单元。考虑一下;在构建您的 Web 项目的 CSS 部分时,大多数最终会得到大约 12 到 30 个 CSS 链接,代表单个文件。使用 Gulp,您可以将这些自动化成 1、2 或 3 个捆绑文件,这些文件被压缩以获得尽可能小的文件大小,并减少对 Web 服务器的调用,从而提高页面加载速度。

历史

我曾经非常忠于微软,十多年来,我一直接受 Visual Studio 的构建方式,认为这是构建项目基础的正确方法。但当我不知道所有包的作用以及如何使用它们时,我总是被困住并陷入困境。所以是时候停止这种做法,向前迈进,尝试一些新的东西了。我阅读了关于 Walmart 的文章,了解他们是如何使用 Gulp 和 Bower 的,这引起了我的兴趣,并尝试了一下。

三年前,我对这个发现感到非常兴奋,并在一个帖子中分享了它,很多人也对此感兴趣并想了解更多。我答应他们我会回来记录整个过程,但被推迟了,因为这个概念太庞大了,我认为它不会被接受,而 VS 2015 需要过多的自定义来构建这个环境。然后 VS 2017 发布了,我之前的很多自定义工作实际上已经被包含或内置进去了。经过 VS 2017 的多次更新,使用它现在更加容易,因为他们添加了 Bower 包管理,这对我来说意味着我走在正确的道路上,是时候谈论它了。

jkirkerx

使用 Visual Studios 预定义的项目在开始时很有用,但很快就会明智地从空白项目开始,这样您就可以从头开始构建,真正了解每个包的作用以及如何分发它。这是一个巨大的倒退,但回报是巨大的进步和知识与薪资的巨大飞跃。

CDN 与自托管

我不想争论是使用 CDN 的正确方法还是您的组织选择不使用 CDN。两者都有优点和缺点,我们可以争论个没完。我个人使用 CDN 来测试代码,仅此而已。

NuGet vs Bower

管理 Bower 包我只将 NuGet 用于技术包,如 MVC、X.PagedList 和 System Stuff,如 Linq 和 System.Runtime。但我使用 Bower 来处理 Bootstrap、Font-Awesome、JQuery 等。我永远不会为 Bootstrap 使用 NuGet 的原因是,我不喜欢 NuGet 分发包的方式。您知道这些 NuGet 包是由许多不同想法的个人创建的,他们选择不同的文件夹来存储资源。随着时间的推移,这些文件夹将无法匹配另一个包的位置,这会将您逼入困境。

对我来说,Bower 更易于处理。它易于控制包的版本,并且所有包都下载到您指定的指定位置。将 bower 视为处理仅包含脚本和 CSS 的包(如 LightSlider)的理想选择。对于这些类型的包,无需更新 web.config,因此没有必要使用 NuGet。

我宁愿直接从 GitHub 上的作者那里添加包,也不愿使用 NuGet 包。这让我可以更细致地选择,获取一个没有不必要东西的包,不像典型的 NuGet 包那样臃肿。

jkirkerx

不要让 NuGet 将您的项目平台困住。对于与 .Net 无关且在其环境之外的包,请使用 Bower。请记住,Bootstrap 与 .Net 没有任何关系,因为它只是 CSS、脚本与 HTML 的组合。

什么是 Gulp?

Gulp 是一个用于自动化构建项目任务的工具包。它基本上是一些 JavaScript 或 JQuery,可以将命令通过管道连接起来。使用 gulp,您可以构建一个包含 minification、Uglification、Concatenation 等工具的库,并在您的构建中使用这些工具。起初很难理解,有点令人费解,但有了正确的教程,它可以很容易地解释。

我们可以在 gulp 文件中编写 gulp 脚本,并从 Task Runner Explorer 中运行单个任务。所以目前我使用五个任务。

  • run_Distrubution_Unpack

    我使用这个任务来解压我的 bower 库中的包并将它们复制到我的 assets 存储库。我仔细选择我想要使用的文件,留下其余的。我并不使用库中的所有包,我可以自由选择加载哪些包。

  • run_Distrubution_Build

    这是我的魔法脚本,它压缩、缩小、混淆我 assets 存储库中来自我的 Bower 库的 CSS 和脚本。然后,我对我自己编写的 CSS 和 JS 执行相同的操作。

  • run_Project_Build

    这是另一个魔法脚本,它将混淆、缩小并去除注释的文件捆绑或创建成新的单个文件包。然后将它们复制到最终目的地。

    之后,我获取该单个文件的 URL 并将其放置在 CSS 的头部或脚本的尾部。我还压缩我存储在存储库中的所有图像文件,然后将它们复制到图像目的地。

  • run_Project_Clean

    我使用这个任务来删除我的 assets 存储库,同时保留我的自定义脚本。

那么,为什么我有一个 Assets Depository?

项目解决方案在我最初的设计时,我选择创建一个名为 assets 的文件夹,因为我开始时完全不知道自己在做什么。我有一些包,然后我有一些自己编写的代码,我需要一个地方来存储原始副本,以防我犯错误,最终结果是错误的。我发现我不能将所有东西都打包到一个文件中,因为有时代码会出错。所以做这件事有点实验性。

我可以看到在这里就我的存储库概念展开争论或辩论,我自己也在辩论这个问题,因为我想摆脱它。一方面,这有点傻,因为我有一个标记为“请勿发布”的库,可以使我的项目更小。当然,我可以将我的存储库标记为“请勿发布”,但有时我不得不去服务器上备份原始文件。

立即开始

三年前,我不得不解释如何创建这个环境,这对于支持各种 VS 版本来说将是复杂的。我认为 VS2015 是第一个可以实现这一点的版本。

我选择不发布关于如何安装这些组件的文章,因为对于想要立即开始的每个人来说,这将是不同的。相反,我将在本文的下一部分介绍如何编写 Gulp 文件,并深入探讨哪些有效,哪些无效。

所以,请使用搜索引擎学习如何准备或构建您的 Visual Studio 版本以支持 Node.js、Bower 和 Gulp,并确保您已准备就绪。我将回来撰写第二部分,以便您可以为自己实现神奇的效果,并将下一篇文章链接到此处以继续。

优势和原因

我现在将解释我走这条路的“疯狂”背后的原因。这一切都始于 SEO 优化和我提高分数、超越 WordPress 的追求。我的目标只是让 MVC 成为一个值得关注的工具,并提供我在这里提交的框架作为大家跟随的胡萝卜,将 MVC 项目提升到一个消费者需求的高度。

Download Speed

速度对您的 SEO 评分和加载时间至关重要,无论设备是通过有线连接还是通过 RF 信号(如蜂窝网络)传输。

考虑更快的下载速度、完美的 CSS 和脚本整合以及我们构建的项目(无论是 MVC、Core 还是 WebForms)的顶级 SEO 排名。

速度是赛车之王

在赛车中,我们使用测功机测量发动机的马力和扭矩,并使用计算机对 ECU 进行微调。网站与汽车无异,需要进行调整以获得最佳性能。不要依赖服务器的 CPU 来解决速度问题,因为糟糕的项目部署会使您的网站成功或失败,您将输掉比赛。

Speed Rating

定期测量和检查您的速度评分是微调您的网站性能评分的关键。缓慢的网站(页面尺寸也很大)会在一天内耗尽用户的流量套餐。

敬请期待更多内容

请继续关注本系列文章的下一部分,介绍如何使用 Bower 和 Gulp 进行自动化项目构建,以及如何利用这些工具实现最快的 Content Delivery。接下来,我将向您展示如何使用 Bootstrap V4、JQuery、Font-Awesome Free 构建 Gulp 文件,以及如何将它们合并为单个包加载。

© . All rights reserved.