2012-03-16 39 views
8

我甚至不确定像我想要的东西是否可能,所以我要求你们让我知道是否有人这样做过。所以,我的目标是当我点击VS2010中的“发布”网站时,将所有JavaScript文件压缩成一个,与CSS相同,然后在我的布局文件中将所有不同js和css文件的引用更改为仅这两个合并那些。这是可行的吗?或者,也许这是可行的,但以更人工的方式?在网站推送时压缩.js和.css文件

当然,这里的目标是在网站上只有两个对外部文件的调用,但是当我开发时,我需要查看所有文件,以便我可以使用它。我想我可以在每次推送前手动完成,但我宁愿使用脚本或其他东西自动完成。我还没有尝试任何东西,而且我也没有寻找现成的解决方案,我只是希望更好地了解这个问题,也许还有一些提示。

非常感谢!

+1

请务必保留许可证头在所有这些JS文件。 – 2012-03-16 13:52:11

回答

13

这是内置到ASP.net 4.5。但在此同时,你应该看看下面的项目

  • YUI Compressor
    • 这个项目的目标是压缩任何JavaScript和层叠样式表到该工程完全按照原来的源的效率水平,在它被缩小之前。
  • Cassette
    • 磁带自动排序,会连接,minifies,高速缓存和版本的所有的JavaScript,CoffeeScript中,CSS,LESS和HTML模板。
  • RequestReduce
    • 超级简单的自动拼合,缩小和捆绑解决方案
    • 没有必要告诉RequestReduce您的资源是
    • 你的CSS和Javascript可以在任何地方 - 甚至是外部主机
    • RequestReduce在运行时自动发现它们
  • SquishIt
    • SquishIt让你压扁一些JavaScript和CSS。还有一些LESS和CoffeeScript。
  • Combres
    • .NET库,能够缩小,压缩,合并,和JavaScript的缓存和CSS资源ASP.NET和ASP.NET MVC的Web应用程序。简而言之,它可以帮助您的应用程序在YSlow和PageSpeed上更上一层楼。
  • Chirpy
    • 捣烂,minifies,并验证你的JavaScript,样式表,和带点文件。 Chirpy还可以自动更新T4MVC和其他T4模板。

斯科特Hanselman的写a good overview blog post这个话题而回。

+0

因为它已经在使用RAZOR,所以我会和Casette一起去。谢谢! – 2012-03-16 16:57:40

0

我不知道是否有任何可能的方式以某种方式挂钩到“发布”按钮的功能/不管它是什么,但它肯定有可能有这种'静态构建过程'。

就我个人而言,我使用Apache ANT来描述您在那里描述的内容。因此,您正在开发未压缩的js/html/css文件,当您完成后,您会调用像ant build,然后缩小,压缩,条纹并发布您的整个Web应用程序。

示例脚本:https://github.com/jAndreas/typeof-NaN-2.0/blob/master/build/build.xml

1

我还没有听说过发布缩小。我认为使用应该选择像SquishIt这样的动态缩减或者像YuiCompressor或AjaxMinifier那样的编译时间。

我更喜欢编译时间。我不认为编译时间更改文件是非常重要的。如果你有大量的css/js代码行,你可以选择这个动作只用于发布编译,以及它是否有助于仅在需要的构建cinfigurations中发布这些文件。

3

我投了,所提到录像带的答案,但我会的细节,特别是选择多一点。磁带是相当配置的,但在最常见的选择,它可以让你通过语法引用CSS和Javascript资源这样的:

Bundles.Reference("Scripts/aFolderOfScriptsThatNeedsToLoadFirst", "first"); 
Bundles.Reference("Scripts/aFolderOfScripts"); 
Bundles.Reference("Styles/aFolderOfStyles"); 

这样,你会在你的主人或布局页像这样使这些:

@Bundles.RenderStylesheets() 
@Bundles.RenderScripts("first") 
@Bundles.RenderScripts() 

在开发过程中,你的脚本和样式将作为单独的文件,磁带将尝试通过检测变化和试图使浏览器重新加载这些文件来帮助你。这种方法非常适用于像淘汰赛这样的库,当他们正在做你不期望的事情时。而且,最好的部分是,当您启动网站时,您只需更改web.config并且Cassette会缩小并将所有文件捆绑到尽可能少的捆绑包中。

你可以找到它们的文档更详细(这是相当不错的,虽然有时会滞后于发展):http://getcassette.net/documentation/getting-started

+0

(我问过一个类似的问题,SO相同)你知道,如果盒可以在发布时工作,所以有缩小的唯一资产部署的站点?谢谢 – superjos 2013-03-20 18:45:06

+0

是超级用户,只需在web.config中将'debug'设置为'false':http://getcassette.net/documentation/v2/web-config – Milimetric 2013-03-20 21:15:09

+0

感谢您的快速回复!我无法从文档中得知,但是对于我来说这听起来像是* runtime * minification,也就是说资产在Web服务器上清楚地部署,并且在请求的页面上,资产被缩小并通过线路发送(并且页面引用缩小束)。 我所追求的是在* publish * -time缩小,所以要有一个只有缩小资产的可部署包。因此,所有参考文件的缩小和更改都会在那一刻发生。 – superjos 2013-03-21 12:08:44