我有一个Scripts文件夹,其中包含项目中使用的所有.js文件。使用Ajax Minifier任务,我为每个任务生成.min.js文件。 根据应用程序是在调试模式还是在发布模式下运行,我包含原始.js文件或缩小文件。
Scripts文件夹如下所示:
Scripts/script1.js
Scripts/script1.min.js // Outside the project, generated automatically on build
Scripts/script2.js
Scripts/script2.min.js // Outside the project, generated automatically on build
.min.js文件位于项目之外(尽管与原始文件位于同一文件夹中),并且在我们发布项目时不会将它们复制到目标文件夹中。
我没有任何使用构建任务的经验(除了包括minifier任务之外),所以如果有人能告诉我哪个是正确的方法,我将不胜感激:
谢谢,
编辑:从回复中,我看到我错过了一些细节,也许我正在寻找错误的问题解决方案。我将在问题中添加以下详细信息:
答案 0 :(得分:20)
编辑(2012年10月): ASP.NET 4.5现在包含Bundling and minification。当前版本不能很好地支持动态javascript生成,但它在其他方面非常有用,例如,如下所述,它会监视文件系统的实时更改;在滚动自己的压缩之前,试试吧!
旧答案:
我建议你在运行时这样做,而不是在构建时实现它。这有许多优点:
这是我遵循的流程的大致轮廓:
FileSystemWatcher
来监视更改。00_jquery.js
10_init.js
等前缀等帮助控制订单。存储文件名列表以进行调试。GZipStream
压缩。特定于版本的标记由最新的最后修改日期或结果的散列计算。lock
保护)。如果文件系统观察程序检测到更新,则步骤2再次启动并在后台运行,直到压缩完成 - 因此锁定。IHttpHandler
直接写入http流。使用这种方法,无论何时添加或删除脚本文件,都不需要使用web.config选项;您可以在应用程序运行时更新脚本,客户端将在下一页面视图中请求这些脚本 - 但您仍然会获得最佳缓存行为,因为浏览器甚至不会因为过期标头而发送If-Not-Modified请求。通常,压缩脚本应该花费一秒左右的时间,压缩结果应该很小,以至于静态变量的内存开销可以忽略不计(对于真正大量的脚本/ css,最多只需要几百KB)。
答案 1 :(得分:7)
如果您想通过Visual Studio进行Javascript缩小,这将帮助您入门:http://encosia.com/2009/05/20/automatically-minify-and-combine-javascript-in-visual-studio/
否则,我建议使用一种可以自动组合和缩小Javascript的工具。我查看过的两个工具是Justin Etheredge的Bundler和Combres。我在我当前的项目中使用Bundler,我的一位同事正在使用Combres。 Bundler使用起来有点简单,但它比Combres要少。使用Bundler,如果在web.config中关闭了调试,那么它不会缩小和组合,这意味着您可以在开发环境中调试javascript。
P.S。 Bundler更名为SquishIt。
答案 2 :(得分:3)
您可能希望查看Build Events,您可以使用它来指定命令行来执行构建后。此外,您的问题与these questions类似。
对于实际复制,您可以很容易地使用COPY命令。
答案 3 :(得分:2)
我不太确定这种方法在这种情况下是否有用,但我可以想象...... 您可以将csproj文件修改为例如影响应该包含在某种类型的构建中的文件。
对于某种类型,我指的是配置管理器。
调试和发布是默认的,但没有什么能阻止你制作新的。根据所选配置,您可以将不同的文件作为配置的一部分,我想您可以通过这种方式发布不同的文件。我在我的博客上描述了这个策略:http://realfiction.net/go/130
答案 4 :(得分:1)
这篇关于“在ASP.NET项目中自动缩小,组合,压缩和缓存* .js和* .css文件”的文章可以帮助您
http://www.codeproject.com/KB/aspnet/CssAndJavaScriptOptimizer.aspx?display=Print