我的角度应用程序由ASP.NET webapi支持,我在那里提供index.html和angular处理其他所有内容。我想使用捆绑,但我看不出我是怎么做的。我是否必须使用剃须刀(或网络表单)来引用捆绑包?或者是否有一个选项可以为bundle输出提供一个固定名称,我可以在src / hrefs中引用它?
为了澄清,我没有使用MVC或Webforms来提供html。您只需重定向到index.html,路由就是客户端。我的bundle配置是使用WebActivator.PostApplicationStartMethod完成的。
答案 0 :(得分:1)
首先,只回答问题,你可以在你的html文件中使用普通链接
<script src='bundles/mybundle' type='text/javascript' language='text/javascript'></script>
=&GT;这将包含您的javascript包到页面
此方法存在的问题是,如果修改包中包含的* .js文件,则修改将不会在包中显示。 这就是“捆绑缓存破坏”,这是ASP.NET的一个很好的功能,但只能从剃须刀模板中使用... 显然,你也可以重新启动池(但这很慢并且难以自动化):)
要解决此问题,您可以使用以下
定义自己的ASP.NET MVC控制器using System.Linq;
using System.Web.Mvc;
using System.Web.Optimization;
namespace Controllers
{
public class DebugBundlesController : Controller
{
// GET: debugbundles/mybundle
public ActionResult Mybundle()
{
return InlineBundleJavaScript("~/bundles/mybundle");
}
private ActionResult InlineBundleJavaScript(string bundlePath)
{
//see https://blog.mariusschulz.com/2015/10/25/inlining-css-and-javascript-bundles-with-asp-net-mvc
var bundleContext = new BundleContext(HttpContext, BundleTable.Bundles, "~/bundles");
var bundle = BundleTable.Bundles.Single(b => b.Path == bundlePath);
var js = bundle.GenerateBundleResponse(bundleContext).Content;
return JavaScript(js);
}
}
}
你可以这样使用:
<script src='debugbundles/mybundle' type='text/javascript' language='text/javascript'></script>
=&GT;现在,每次进行更改时,都会重新生成包。
请注意,仅在开发期间使用它,因为您几乎删除了捆绑包的所有好处(即特别是客户端和服务器缓存)