【问题标题】:Referencing files minified by Web Essentials in Visual Studio 2013在 Visual Studio 2013 中引用由 Web Essentials 缩小的文件
【发布时间】:2014-08-28 22:20:24
【问题描述】:

我已经缩小了由 Web Essentials 自动生成的 CSS 和 JS 文件,并且每次我更新和保存原始文件时都会自动更新。

在原始(开发/测试)和缩小(生产)文件之间自动切换 HTML 中的实际(脚本/导入)引用的最佳方法是什么?

这是在 MVC ASP.NET Web 应用程序中。

一个想法是让服务器端标签根据环境变量呈现“.min”或空字符串。但我想知道是否有更好、更智能、更简单、更有效的方法来处理这个问题。

提前致谢。

更新:

我的样式包是这样定义的:

bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site{version}.css"));

我这样引用它:

@Styles.Render("~/Content/css")

但是,这会呈现以下内容:

<link href="/Content/css?v=" rel="stylesheet"/>

如果我从包定义中取出“{version}”,它会正常工作,但如果我包含“{version}”,则会呈现一个空的“v=”。

更新 2:

我刚刚意识到,由于应用程序的某些复杂性,我不能使用捆绑解决方案。我还有哪些其他选择?

【问题讨论】:

    标签: asp.net asp.net-mvc visual-studio-2013 minify web-essentials


    【解决方案1】:

    在这种情况下,捆绑会为您提供帮助。您应该已经能够在 App_Start 的 BundleConfig.cs 文件中看到一个示例。

    这是一个关于如何配置它的教程http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

    从该教程中,这就是您实际配置包本身、将在其中包含的文件等的方式。这包括脚本文件夹中的任何 jquery 到一个名为 ~/bundles/jquery 的包中。

    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                     "~/Scripts/jquery-{version}.js"));
    
        // Code removed for clarity.
        BundleTable.EnableOptimizations = true; // <-- this line overrides the debug check to show you the minified version even in debug mode... remove it for normal .min in debug/un-minned when not in debug behaviour
    }
    

    然后您使用

    从您的视图中引用这些
     @Scripts.Render("~/bundles/jquery")
    

    然后,如果您未处于调试状态,这将使用 jquery 的 .min 版本呈现脚本标记,如果您处于调试状态,则将其排除在外。在同一个脚本文件夹中需要有一个 .min 版本和一个未缩小的版本(如果 Web Essentials 正在为您创建 .min,您应该拥有它。

    如果您使用 ScriptBundles,您实际上可以停止使用 Web Essentials 进行缩小,因为它们会在将 javascript 打包到包中时为您缩小。

    供您更新

    "~/Scripts/jquery-{version}.js" 表示匹配脚本文件夹中以jquery- 开头并以.js 结尾并且之间有一些版本号的任何文件。如果文件中没有版本号,请不要尝试使用 {version} 替换。

    在这种情况下,他们使用 jquery 执行此操作,因此如果您升级您正在使用的 jquery 版本,您不必返回到您的 BundleConfig 并手动更改 jquery 引用的文件名。

    如果您的文件名为 site1.3.7.css,那么这可能会起作用。

    bundles.Add(new StyleBundle("~/Content/css")
                       .Include("~/Content/site{version}.css"));
    

    但听起来您更有可能只需要site.css

    bundles.Add(new StyleBundle("~/Content/css")
                       .Include("~/Content/site.css"));
    

    我不确定您认为是什么阻止了您使用它们,但您可以链接到 CDN 中的文件并缩小或不缩小。甚至只是将单个文件打包在一起,以便在调试之外获得缩小的好处,而无需“捆绑”它们。所以可能有办法。

    【讨论】:

    • 你说的是“{version}”这块?
    • 是的,除此之外。这只是说可以使用任何版本的 jquery。
    • 您也可以将它用于 CSS minfication,顺便说一句...只需使用 StyleBundle() 代替。如果您想在不缩小的情况下包含某些内容,我认为也有一个普通的Bundle(),它只在同一个输出文件中包含多个文件而不缩小。
    • 我刚刚意识到由于应用程序的某些复杂性,我无法使用捆绑解决方案。
    • 是什么阻止您使用它?至于{version},如果您的文件不包含版本号,则不需要使用它,它仅适用于您将来可能会更新库时,例如 jQuery,您不想每次下载新版本时都必须手动进入 BundleConfig 并更改它。
    猜你喜欢
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2014-08-21
    • 2013-12-30
    • 2014-08-10
    相关资源
    最近更新 更多