我在 MVC4 中尝试使用 Bundle 和 Minification 并遇到了一个有趣的问题。我正在使用 Coffeescript,我想要一个与该@Scripts.Render()
方法有点相似的渲染助手。
例如,假设我有这个捆绑配置:
new ScriptBundle("~/bundle/appfiles").Include(
"~/Scripts/app/sample.js",
"~/Scripts/app/myApp.js");
在 cshtml 中,当我这样做时,@Scripts.Render()
我会根据 web.config 中的调试设置得到不同的结果。如果调试为真,我会为每个文件获得一个脚本标签,否则我会获得一个脚本标签,该标签会返回捆绑和缩小的 js。这可以。
现在让我们假设我想对我的 Coffeescripts 做同样的事情。我创建一个这样的包:
new Bundle("~/bundle/appfiles", new CoffeeBundler(), new JsMinify()).Include(
"~/Scripts/app/sample.coffee",
"~/Scripts/app/myApp.coffee");
现在的问题是,如果我使用@Scripts.Render()
我在调试时得到每个文件一个脚本,但这根本没有转换。我能做的唯一用途是:
<script type="text/javascript" src="@(BundleTable.Bundles.ResolveBundleUrl("~/bundle/appfiles"))"></script>
但是,即使在调试模式下,这也会将所有内容捆绑在一起然后缩小,这当然不是我想要的。
我试图创建一个Coffee.Render()
类似于 Scripts 的帮助器,但它使用 System.Web.Optimization 程序集内部的 AssetManager 类。
我想知道您是否知道如何以干净的方式执行此操作(即:使用可用的公共类,不复制和粘贴整个 AssetManager 代码,在创建捆绑包时不做花哨的 Directory.EnumerateFiles)。
谢谢!
PS:我知道更快的解决方案是使用 Mindscape Workbench 并捆绑生成的 js 文件,我正在寻找使用框架所具有的东西,也许还避免不得不告诉团队安装人们可能不会安装的工具像...