3

我想在我的 ASP.NET WebForms 应用程序(VS 2008)中有不同版本的 .js javascript 文件:

  • 完整版,评论等
  • 缩小版,用于生产

有没有办法在调试时自动获取完整版本,在应用程序部署到生产时自动获取缩小版本?我不介意答案是否是黑客攻击。

VS 2010 有可能吗?

4

2 回答 2

8

当然有可能,但这里的问题是“你将如何设置它。

我从这里的关键开始,即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))
于 2012-04-19T12:49:53.210 回答
3

我喜欢使用 SquishIt 库。

允许您将 CSS 和 JavaScript 保存在多个文件中以供本地开发,并发布单个缩小文件以供生产。

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

  • 动态创建缩小文件
  • 在最终呈现的 HTML 中创建指向动态创建的缩小文件的链接

但是,如果#debug定义了,代码不会这样做,而是在输出中呈现指向原始文件的链接,以便可以使用文件的原始版本进行调试。

它支持 CSS 和 javascript minfication。

欲了解更多信息,请点击上述链接。

于 2012-04-19T13:54:35.277 回答