Asp.net 在Visual Studio 2013中引用由Web Essentials缩小的文件
我已经缩小了由WebEssentials自动生成的CSS和JS文件,并在每次更新和保存原始文件时自动更新 在原始(在开发/测试中)和缩小(在生产中)文件之间自动切换HTML中的实际(脚本/导入)引用的最佳方式是什么 这在MVC ASP.NET web应用程序中 一个想法是让服务器端标记根据环境变量呈现“.min”或空字符串。但我想知道是否有更好、更聪明、更容易、更有效的方法来处理这个问题 提前谢谢 更新: 我的样式包定义如下:Asp.net 在Visual Studio 2013中引用由Web Essentials缩小的文件,asp.net,asp.net-mvc,visual-studio-2013,minify,web-essentials,Asp.net,Asp.net Mvc,Visual Studio 2013,Minify,Web Essentials,我已经缩小了由WebEssentials自动生成的CSS和JS文件,并在每次更新和保存原始文件时自动更新 在原始(在开发/测试中)和缩小(在生产中)文件之间自动切换HTML中的实际(脚本/导入)引用的最佳方式是什么 这在MVC ASP.NET web应用程序中 一个想法是让服务器端标记根据环境变量呈现“.min”或空字符串。但我想知道是否有更好、更聪明、更容易、更有效的方法来处理这个问题 提前谢谢 更新: 我的样式包定义如下: bundles.Add(new StyleBundle("~/Con
bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site{version}.css"));
@Styles.Render("~/Content/css")
我这样引用它:
bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site{version}.css"));
@Styles.Render("~/Content/css")
但是,这会导致以下情况:
<link href="/Content/css?v=" rel="stylesheet"/>
如果我从bundle定义中提取“{version}”,它可以正常工作,但是如果我包含“{version}”,则呈现一个空的“v=”
更新2:
我刚刚意识到,由于应用程序的某些复杂性,我不能使用捆绑解决方案。我还有什么其他选择吗?在这种情况下,捆绑将对您有所帮助。您应该已经能够在App_Start中的BundleConfig.cs文件中看到一个示例 这里有一个关于如何制作它的教程 从该教程中,您可以实际配置捆绑包本身、将包含在其中的文件等。这包括将脚本文件夹中的任何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
}
然后,如果您不在调试中,这将使用jquery的.min
版本呈现一个脚本标记,如果您在调试中,则将其忽略。同一脚本文件夹中需要有.min
版本和未缩小的版本(如果Web Essentials正在为您创建.min
,则应该有该文件夹)
如果您使用ScriptBundles,您实际上可以停止使用WebEssentials进行缩小,因为当它将javascript打包到捆绑包中时,它们会为您缩小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细化。只需使用
StyleBundle()
即可。如果你想在不缩小的情况下包含某些内容,我想有一个简单的Bundle()
也是,它只在同一输出文件中包含多个文件而没有缩小。我刚刚意识到,由于应用程序的某些复杂性,我无法使用捆绑解决方案。是什么阻止了您使用它?至于{version}
如果您的文件不包含版本号,则无需使用它,它仅适用于您将来可能在某个时候更新库的情况,例如jQuery,您不希望每次下载新版本时都手动进入BundleConfig并对其进行更改。