在 Web 应用程序中,是否可能有针对调试和生产的不同 JavaScript 文件?

4
我想在我的ASP.NET WebForms应用程序(VS 2008)中有不同版本的.js JavaScript文件:
  • 完整版,包括注释等
  • 压缩版,用于生产
是否有一种方法可以在调试时自动获取完整版,而在应用程序部署到生产环境时获取压缩版?如果答案是一个hack也无妨。
在VS 2010中是否可行?
2个回答

9
当然可以,但这里的问题是“你打算如何设置它”。
我从这里开始关键点是 DEBUG 定义。假设您想在页面上设置它。
因此,在页面上,您可以执行以下操作:
<% #if DEBUG %>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
<% #else %>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<% #endif %>

或者,您可以使用Literal并在代码后端进行切换。

<asp:Literal runat="server" ID="txtScripts" EnableViewState="false" />

并且。
protected void Page_Load(object sender, EventArgs e)
    {
#if DEBUG
        txtScripts.Text = "<script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js\"></script>";
#else
        txtScripts.Text = "<script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js\"></script>";
#endif
    }

另一种方法是使用处理程序读取所有的JavaScript文件并使用代码进行压缩,然后再次使用相同的DEBUG密钥来发送其中一个版本或另一个版本。
个人而言,我使用MS Ajax MInified http://www.asp.net/ajaxlibrary/AjaxMinDocumentation.ashx 我读取所有的JavaScript文件,将它们合并成一个文件,并使用这些参数来对它们进行压缩或不压缩。
Minifier MyMin = new Minifier();
CodeSettings cs = new CodeSettings();
#if DEBUG
    cs.MinifyCode = false;
    cs.OutputMode = OutputMode.MultipleLines;
    cs.PreserveFunctionNames = true;
    cs.RemoveFunctionExpressionNames = false;
    cs.RemoveUnneededCode = false;
    cs.StripDebugStatements = false;
#else                   
    cs.MinifyCode = true;
    cs.OutputMode = OutputMode.SingleLine;              
#endif
Write(MyMin.MinifyJavaScript(AllMyJavascript, cs))

+1 个好答案。我只是想不出要实现哪种处理程序才能使用 Minifier 对象的代码。但我选择了另一个答案。如果你不知道 SquishIt 是什么,你应该看一下:它可以从要缩小的文件列表动态生成缩小文件,并公开生成文件的链接。但如果 #debug 没有定义,则会创建到原始文件的链接。这是一个很好的解决方案。感谢您的帮助! - JotaBe
@JotaBe 是一个 .ashx 处理程序。这并不是很简单,需要一些检查和缓存,但这是一般的想法。顺便说一句,我认为新的 4.5 版本使用一个新的库来完成这个功能 - 从目录中读取所有的 js 文件并将它们作为一个文件发送,就像 squishlt 库 domdenoit 所提到的那样。 - Aristos
当使用您的第一种选项时,我该如何在Visual Studio中启动我的网站以实际看到它使用缩小版本?我尝试过使用F5Ctrl+F5开始,也通过将解决方案配置设置为发布来开始。在所有情况下,生成的HTML引用完整版本。 - comecme
@comecme,你可以在web.config中设置DEBUG版本,如<compiler compilerOptions="/D:DEBUG,TRACE" >。如果你想要发布版本,就不需要设置这些选项,而是设置<compilation debug="false" > - Aristos
@Aristos:谢谢!所以,即使从 Ctrl+F5 开始,它会取消代码后台内的 DEBUG,但 .aspx 的 DEBUG 由 web.config 确定。对我来说似乎不合逻辑。 - comecme

3

我喜欢使用SquishIt库。

该库允许您将CSS和JavaScript保存在多个文件中进行本地开发,并发布单个缩小后的文件以供生产使用。

编辑:此工具允许以编程方式定义要缩小的文件列表。定义此列表的代码嵌入在.aspx文件或MVC视图中的代码块中。运行时会发生两件事:

  • 动态创建一个缩小后的文件
  • 在最终呈现的HTML中创建到动态创建的缩小后的文件的链接

但是,如果定义了#debug,则代码会输出原始文件的链接,以便可以使用原始版本的文件进行调试。

它支持CSS和JavaScript的缩小。

有关更多信息,请参阅上面的链接。


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