没有ASP的捆绑和缩小.净MVC
本文关键字:缩小 MVC ASP 没有 | 更新日期: 2023-09-27 17:49:34
是否可以在没有MVC项目的情况下使用microsoft . asp.net . web . optimization中的捆绑和最小化?
我正在创建一个与REST API通信的AngularJS站点。对于REST API,我使用ASP。. NET Web API。我还创建了一个"ASP。. NET空Web应用程序"。在这个项目中只有HTML, js和CSS文件(和一个web.config)。我想我的js和CSS文件被捆绑和缩小,但我不想创建一个MVC项目只是为了得到。这可能吗?
在空白项目中使用捆绑和缩小是完全可能的。
- 使用Nuget安装包:
Install-Package Microsoft.AspNet.Web.Optimization
-
创建一个bundlecconfig类并定义你的bundle:
using System.Web.Optimization; public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/bundles/js").Include( "~/Scripts/*.js")); bundles.Add(new StyleBundle("~/bundles/css").Include( "~/Styles/*.css")); } }
-
将bundlecconfig类注册到应用程序的global.asax
void Application_Start(object sender, EventArgs e) { BundleConfig.RegisterBundles(BundleTable.Bundles); }
- 在你的HTML文档中引用bundle。
- 通过禁用调试模式启用绑定。
除了上面给出的答案,我还想提一下,有一个重要的步骤被忘记了:
在为Microsoft.AspNet.Web.Optimization
安装了NuGet包并在Global. exe中注册了bundle之后。asax(正如claes回答中解释的那样),您需要为样式和脚本添加如下的呈现方法:
<%= Styles.Render("~/bundles/css") %>
<%= Scripts.Render("~/bundles/MattsUIBundle/js") %>
这需要添加到ASPX页面的头部部分,以便渲染之前添加到页面中的"~/bundles/js"answers"~/bundles/css"。如果没有渲染,它将不会出现(参见为什么我需要渲染?)。它要求你添加
<%@ Import Namespace="System.Web.Optimization" %>
到页面的第2行,以便注册名称空间,假设您已经在代码中添加了NUGET包Microsoft.AspNet.Web.Optimization
。
如果你想包含更多的相关文件,像
void Application_Start()
{
BundleCollection bundles=BundleTable.Bundles;
var jsMattsUIBundle = new ScriptBundle("~/bundles/MattsUIBundle/js");
jsMattsBundle.Include("~/Scripts/lib/jquery.min.js");
jsMattsBundle.Include("~/Scripts/lib/jquery-ui.custom.min.js");
jsMattsBundle.Include("~/Scripts/lib/jquery.watermark.min.js");
bundles.Add(jsMattsBundle);
}
或更简单的
jsMattsBundle.Include("~/Scripts/lib/jquery.min.js",
"~/Scripts/lib/jquery-ui.custom.min.js",
"~/Scripts/lib/jquery.watermark.min.js");
将在虚拟路径"~/bundles/MattsUIBundle/js"
下捆绑所有3个脚本。
重要提示: bundle将检查您是在调试模式还是发布模式。优化只适用于删除web.config
中的调试标志。<compilation debug="true" />
或者如果您在Application_Start
中显式定义,则无论在调试模式下都希望进行优化:
BundleTable.EnableOptimizations = true;
同样,如果你使用的是CDN支持,通过
打开它BundleTable.Bundles.UseCdn = true; //enable CDN support
允许你声明
var jqueryCdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js";
BundleTable.Bundles.Add(new ScriptBundle("~/bundles/jquery",
jqueryCdnPath).Include("~/Scripts/jquery-{version}.js"));
注意 CDN只在发布模式下使用。下面的脚本确保在CDN加载失败时加载jQuery的本地副本:
<%= Scripts.Render("~/bundles/jquery") %>
<script type="text/javascript">
if (typeof jQuery == 'undefined') {
var e = document.createElement('script');
e.src = '@Url.Content("~/Scripts/jquery-1.7.1.js")';
e.type = 'text/javascript';
document.getElementsByTagName("head")[0].appendChild(e);
}
</script>
假设您在"~/Scripts"
提供了jQuery 1.7.1的本地副本。
注意:在MVC Razor语法渲染是在视图中完成如下:
@Scripts.Render("~/bundles/MattsUIBundle/js")
@Styles.Render("~/bundles/css")
更多信息可以在这里找到。
@Matt,实际上你不需要添加
<%@ Import Namespace="System.Web.Optimization" %>
<%= Styles.Render("~/bundles/css") %>
<%= Scripts.Render("~/bundles/MattsUIBundle/js") %>
你不需要使用CSHTML-template。你可以这样从html页面引用你的bundle:
<link href="bundles/css" rel="stylesheet"/>
<script src="bundles/MattsUIBundle/js"></script>
它将保存您的页面从视图引擎。
要在SPA中获得文件加载速度,您需要手动设置时间。错误的答案是实现Razor,特别是如果你的整个目标是远离MVC和它的朋友(如果你的目标是AngularJS SPA,这是一件好事)。当你实现在其他答案中提到的优化框架时,你现在必须点击视图引擎来构建CSHTML文件,这对你的速度是一个明显的打击,可能比你认为你节省的还要多。
所以就像我说的,你需要开发人员的时间来最小化文件。您必须手动将它们发送到您自己(或需要设置)的CDN。然后你可以用你自己的包来引用你自己的CDN,这个CDN将被用户的浏览器缓存。
然后,当一个或多个SPA需要指向更新的HTML/CSS/JS时,您可以在SPA应用程序中增加CDN版本。其他SPA应用程序甚至可以与旧版本保持相同(尽管我建议尝试坚持使用最新版本的CDN)。用户的浏览器会识别新的CDN版本,并将新版本拉到缓存中。
您可以使用YUI或Google Clouser Mapper
这是如何在Visual Studio
中使用YUI的示例http://peronnemyr.wordpress.com/2012/09/26/using-yui-compressor-for-net-integrated-to-builds-in-visual-studio-2010/这个链接有Visual Studio扩展http://visualstudiogallery.msdn.microsoft.com/5469b7e2 - 90 d7 - 4 - f54 b299 ae47e26323e6
您可以使用JSMINhttp://www.crockford.com/javascript/jsmin.html
您可以像下面这样将JsMin作为Post Build Event运行个& lt;"$()管理扫描' debug.js "> " $()管理扫描' min.js "
是运行JSMIN的链接http://jasonfaulkner.com/RunJSMinInVisualStudio.aspx
如果这回答了你的问题,请在左边的右边打勾。
你也可以使用VS扩展WebEssentials minification,它可以从项目编译中独立地缩小你的js/css文件(这样你就不需要任何第三方dll依赖)。它也有捆绑,非常方便。