磁带束与MVC4捆绑包

43

我目前正在开发一个ASP.NET MVC 3的原型解决方案,将用作多个项目重写的基础(从Web表单迁移而来)。

我的一个目标是实现应用程序级别的一些脚本管理,而不是我们当前完全没有的情况。

MVC 3 在我看来存在一个缺陷:如果您需要在局部视图或模板视图上指定特定的脚本,则可能会失去对呈现的HTML中脚本块所在位置的控制,或者不得不在父视图上指定每个依赖的javascript文件。

我一直在认真考虑使用 http://getcassette.net/ 作为解决上述问题的框架。然而,MVC4 beta的最新版本让我再次产生了疑问:MVC的Bundles看起来与Cassette的Bundles非常相似,我又感到困惑:

  1. 我现在应该实现cassette,然后迁移到MVC4 bundles吗?

  2. 我应该自己实现一些简化的脚本管理器(类似于MVC4预览中的Scripts helper class),然后迁移到MVC4吗?

  3. 还是应该将cassette集成到项目中,并希望它比MVC的实现更具未来性(我现在确实不喜欢这个选项,因为cassette带有大量依赖)。

我没有使用过Cassette本身,发现很难自己进行比较,并且会感激任何答案或提示。

编辑: 我刚刚发现还有另一种选择:安装MVC捆绑的beta nuget包:https://nuget.org/packages/Microsoft.Web.Optimization

结论: 我越看MVC4 bundle实现就越发现它与之前描述的MVC3问题存在很大差异-它们只是打包和压缩。此外,cassette不仅能够在特定位置呈现脚本标记,还能够按正确的顺序排列它们,这并不容易。

目前,我对这两种解决方案都不满意,因此我将尝试自己进行最小化的实现,希望未来情况会有所改善。

但是,如果你不介意在项目中添加5个以上的依赖项和大量的web.config更改,请选择cassette。我希望它会在某个时候得到更新,利用MVC捆绑来减少功能重复,并且希望它能变得更加模块化。


更新: 自Cassette 2.0版本起,如果您只需要捆绑和js依赖关系解析,就不再需要包括咖啡脚本和其他功能。因此,目前Cassette对我来说是一个明显的胜者。


非常感谢您提供的所有更新,仅仅这个问题就帮了我很多! :) - keisar
1
是的,谢谢您提供的更新,这比答案更有帮助,因为它包括了实际的使用经验。 - Mike Mooney
4个回答

10

这里提供有关ASP.NET MVC绑定的信息:http://weblogs.asp.net/scottgu/archive/2011/11/27/new-bundling-and-minification-support-asp-net-4-5-series.aspx

ASP.NET正在添加一个功能,使得将多个CSS和JavaScript文件“捆绑”或“合并”成更少的HTTP请求变得容易。这会导致浏览器请求较少的文件,同时减少获取它们所需的时间。

下一代ASP.NET也添加了一个新功能,使其轻松减少内容的下载大小。

看起来这与Cassette基本相同。所有其他条件相同的情况下,请使用与ASP.NET MVC本地集成的解决方案。


1
谢谢,我之前读过这篇博客,对于我这样一个新用户来说,两个库看起来差不多。我想知道在 Cassette 中是否有一些不太明显的功能/用法模式,而当前的 MVC 捆绑实现中则没有。 - bushed
Cassette似乎在缓存和压缩方面稍微更加积极,但如果您不需要最新的功能... - Robert Harvey
现在,一切都取决于评估从盒式磁带切换到默认的MVC4实现的风险(我相信我们会尽快将项目迁移到它上面)。 - bushed
2
对于 Cassette,我了解得不多,似乎它唯一真正的特点是能够解决已注明脚本/样式表之间的分辨率。现在它有许多其他功能,比如将 HTML 模板压缩成 JS 代码。看起来是一个不错的框架,但比 MVC4 + dotLess 更重。 - one.beat.consumer
我喜欢https://bundletransformer.codeplex.com/,因为它在MVC4的捆绑支持基础上进行了扩展。 - Drew Freyling
如果需要管理少量相互依赖的内容,MVC bundles是不错的选择。如果您正在构建大型JS框架,请毫不犹豫地使用Cassette。它在处理脚本/样式表之间的解析冲突方面非常出色。 - regisbsb

9
我在上一个项目中使用了Cassette,效果还不错。如果你使用NuGet,那么它实际上没有太多的配置,因此我的想法是,如果你现在使用Cassette,之后想要切换也不会太难。
另外需要考虑的一件事是,Cassette可以进行Less编译。我不确定MVC4捆绑是否会这样做,因为我没有时间去研究它。

1
据我所知,它并不支持dotless。然而,dotless是一个相当独立的NuGet包。从这个意义上来说,在MVC4环境中,Cassette仍比dotless更重。 - bushed

4

Cassette仍然是一个有趣的选择,因为它原生支持less和coffeescript。如果你对客户端mvc框架(如backbone、knockout等)感兴趣,它还支持HTML模板。


目前我不喜欢 Cassette 的一点是(除非我漏掉了什么),它缺乏特性可配置性: 我们不需要 CoffeeScript 支持。 dotLESS 实现很好 - 不过它仍然是可选的。 至于模板 - 我不认为 Cassette 所做的有多大好处 - 看起来与 PartialView 没有太大区别。 - bushed
我认为LESS、SASS和CoffeeScript现在都是通过Nuget作为单独的插件:http://getcassette.net/ - John B

1
作为对此的更新,Visual Studio 2012的Update 2包中添加了对LESS和CoffeeScript的支持,因此看起来将所需的转换添加到MVC4内置的Bundling/Minification实现中比长期使用Cassette更好。

1
我说的对吗?目前还没有内置支持在部分文件中注册脚本需求的功能吧?(例如,多个部分声明需要引用fancybox.js,并且框架只在需要时包含它一次)。 - James Morcom
@JamesMorcom 你现在对这个更了解了吗?我自己还在疑惑。如果ASP.NET可以全局解决页面的脚本依赖关系,那就太好了。 - oligofren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接