【问题标题】:Script Minification and Continuous Integration with MSBuild脚本缩小和与 MSBuild 的持续集成
【发布时间】:2010-09-21 16:32:27
【问题描述】:

在我最近使用 C#/ASP.NET 进行的一个项目中,我有一些相当复杂的 JavaScript 文件和一些漂亮的样式表。当然,随着这些脚本资源的大小增加,is advisable to minify the resources 并让您的网页尽可能轻巧。我知道许多开发人员在调试后将 JavaScript 资源手动输入到压缩器中,然后部署他们的应用程序。

在令人满意的持续集成世界中涉及源代码控制和自动化构建(谢谢CruiseControl.NET);手压根本不行。维护源代码控制和提供压缩资源的唯一方法是将 JS/CSS 源代码及其缩小的兄弟保存在单独的目录结构中。然后在代码隐藏中仅注册一组资源或另一组。但是,如果开发人员对 JS/CSS 源代码进行了更改,然后无法重新压缩它并检查两个版本,那么您的代码行现在不同步了。更别提不雅了。

我认为为 CC.NET 任务块编写一个自定义可执行文件(如果尚不存在)会很好,该任务块将在构建操作后查找并压缩目标目录中的所有 JavaScript 和 CSS 资源,但是在 asp.net 发布到目标之前。这样,开发者只需要处理 JS 和 CSS 源代码,而用户只能获得缩小的资源。

是否有已执行此任务的应用程序,如果没有,我应该在构建服务器上安装哪种资源以执行 CC.NET?

closest question 我可以在这里找到这个必需的 NAnt,在我的情况下这不是一个选项。)

编辑: Dave Ward 现在在他的网站上有一篇关于 how to automatically minify in Visual Studio 的精彩文章。

【问题讨论】:

  • 通过缩小我认为你的意思是最小化...
  • 没有。我的意思是缩小(en.wikipedia.org/wiki/Minify),但我认为它是一个或十几个中的 12 个。我相信这两个术语是可以互换的。

标签: javascript msbuild continuous-integration build-automation minify


【解决方案1】:

不是一个完美的答案,但如果您使用的是 MVC4,他们会将其作为新功能内置。运行 Debug 配置时,它会输出带有 cmets 等的单个文件,但是当您切换到 Release 时,它​​会自动捆绑、缩小和更改对缩小文件的页面引用。您可以为 jquery 和您自己的 js 设置单独的包。这适用于 CSS 和 JS 文件。

http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

如果 MVC4 不适合您,您还可以在 Nuget 上找到可以提供帮助的软件包,例如:

https://www.nuget.org/packages?q=minify

【讨论】:

  • 是的,与 2008 年发布此问题时相比,现在有更多选择。
【解决方案2】:

MSBuildCommunityTasks Project 有一些 MSBuild 任务可以执行您正在寻找的任务,包括 Merge 和 JSCompress。

您可以在 AfterBuild 目标中将这些添加到您的 MSBuild 项目中,以允许项目在每次构建项目时执行此操作,并且不会出现任何不同步的情况。然后,您的 Web 应用程序可以引用压缩版本来运行,但开发人员将编辑完整版本。

除了 MSBuild 社区任务程序集之外,服务器上不需要其他任何东西。您可以将此程序集放在您自己的源代码树中并从那里引用,您的 CI 构建应该会获得该程序集以及构建时所需的一切。

【讨论】:

  • 嘿,我今晚将把它放到 StackOverflow 中真是太棒了,谷歌搜索出现了我们的网站!好样的!很好的答案,托德 +1
  • 我必须补充一点,msbuild tasks 社区项目非常出色。我在构建过程中使用 jscompress。请注意,您必须将 jquery.min 文件保留在压缩之外,因为它会阻塞它。
  • 仅供参考:MSBuildTasks 项目已移至 GitHub:github.com/loresoft/msbuildtasks
【解决方案3】:

另一个用于 MSBuild 的 JS(和 CSS!)压缩库:

http://www.codeplex.com/YUICompressor

这是基于 java 的 Yahoo! compressor 的 .NET 端口。

【讨论】:

  • 很高兴找到贾罗德。我将研究一个自动化的 CSS 缩小器,以将其合并到自动构建中。这是一个很好的发现。
  • Jarrod,你们能再看看 YUICompressor 的 .NET 端口吗(上面的链接)。昨天发布了一个新版本。上次你们在 SO 播客中说你们有问题。很想看看这个构建是否适合您的部署计划......如果不是,请发布原因/内容等:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多