在ASP.net的构建过程中压缩内联JavaScript?

8
我们有一些包含50多行特定于该页面的javascript的ASP.net页面。我们希望在CruiseControl构建过程中对该javascript进行压缩。我们已经使用YUI Compressor来压缩我们的完整javascript和css文件。但是我们无法弄清楚如何处理内联javascript。是否有MSBuild任务可以遍历asp.net页面并最小化javascript?
5个回答

4

嗨,朋友,这个内联脚本压缩器正在破坏我的小部件模板。它会压缩任何被包含在<script>标签中的内容,即使它们不是JavaScript。 - Allan Chua

2
我会将JavaScript提取到方法中,并将它们移动到.js文件中。然后从页面中使用相关参数调用这些方法。这不是一个复杂的过程,而且更容易维护(代码更少)。您还可以从客户端内容缓存中受益。
另外:不确定是否有帮助,但 Google 的 Closure 看起来非常不错。

http://code.google.com/closure/

压缩选项:http://code.google.com/closure/compiler/docs/api-tutorial3.html 可作为Java可执行文件或Web服务使用。

1

如果没有自定义编码,您将无法完成此操作。最简单的方法可能是在msbuild文件中创建一个PreBuild步骤,该步骤通过所有.aspx文件并使用正则表达式将所有javascript删除。然后使用YUI来压缩内容并用压缩版本替换原始版本。

您还可以检查MbCompression,它可以压缩很多内容,包括您的asp.net页面,尽管我不认为它也会缩小内联javascript。


0

可以将内联JavaScript捆绑和压缩。使用模板化的Razor帮助程序,您可以创建像下面这样的扩展方法:

public static MvcHtmlString AddScriptSource(this HtmlHelper helper, Func<dynamic, HelperResult> source, string key)
{
    string scriptSource = source(null).ToHtmlString();

    // Cache scriptSource here

    return MvcHtmlString.Empty;
}

你可以像这样使用它:

@Html.AddScriptSource(@<text>$(document).ready(function() { $('h1').text('The current controller is @ViewContext.RouteData.Values["controller"].ToString()'); });</text>, "test")

我几周前创建了一个打包器和压缩器,网址是:

https://github.com/philpeace/CodePeace.StrawberryJam


0

3
这将仅压缩页面中外部的脚本,而不是像问题要求的那样内联。 - azog

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