Mar*_*gas 3 asp.net-mvc asp.net-mvc-5
我正在开发一个MVC 5.0(.Net 4.5)应用程序,我需要将自定义JavaScript转换应用于我包含的bundle文件.其中一个文件,我为了说明目的而调用dummy.js,有一个名为dummy.min.js的缩小文件.
我创建了一个自定义脚本转换,用window.jQuery不同的表达式替换注入的引用.当我在本地运行并处于调试模式时,一切正常,但是当在Web.config文件中关闭调试模式时,Bundle会返回dummy.min.js文件的内容,但我的脚本转换不适用于它.它仅适用于没有关联的.min.js文件的JavaScript 文件.
有没有人知道如何解决这个问题?它几乎听起来像MVC中的一个错误.
解决方法是删除缩小的文件.这篇文章通过建议删除.min.js文件来解决我的情况,因为MVC默认缩小,但我正在寻找替代解决方案(如果有的话).
非常感谢你提前.
以下是如何重现以上内容:
如果您有兴趣重现我的问题,这里是一个快速BundleConfig和实际的自定义脚本转换.它取代了window.jQuerywith的所有实例window.$jq1_9||window.jQuery,假设它是通过自执行的匿名函数注入的.
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(
new ScriptBundle("~/bundles/dummy")
.Include("~/Scripts/dummy.js", new InjectedJQueryVariableRewriteTransform()));
}
}
public class InjectedJQueryVariableRewriteTransform : System.Web.Optimization.IItemTransform
{
public string Process(string includedVirtualPath, string javaScriptCode)
{
// TODO: I understand this approach is naiive, but it does the trick for now.
return javaScriptCode.Replace("window.jQuery", "window.$jq1_9 || window.jQuery");
}
}
Run Code Online (Sandbox Code Playgroud)
如果您有Visual Studio 2012和MVC 4,则需要1.1.0版的System.Web.Optimization程序集,您可以通过在Nuget程序包管理器中运行以下命令来获取该程序集.在撰写本文时,它会安装该软件包的1.1.2版本.
Install-Package Microsoft.AspNet.Web.Optimization
这是JavaScript示例dummy.js.您可以创建它的副本并命名它dummy.min.js:
(function ($) {
"use strict";
// TODO: Do something interesting...
})(window.jQuery);
Run Code Online (Sandbox Code Playgroud)
在Web.config的以下元素中将debug属性设置为false:
<compilation debug="false" targetFramework="4.5" />
Run Code Online (Sandbox Code Playgroud)
假设应用程序的端口是9221,请在Firefox或Chrome中呈现该包:
http://localhost:9221/bundles/dummy
Run Code Online (Sandbox Code Playgroud)
您将看到当debug设置为时true,将应用变换,如下所示:
(function(){"use strict"})(window.$jq1_9||window.jQuery)
Run Code Online (Sandbox Code Playgroud)
设置为时false.它被忽略,只使用.min.js文件:
(function(){"use strict"})(window.jQuery)
Run Code Online (Sandbox Code Playgroud)
小智 5
如果你添加这一行:
bundles.FileExtensionReplacementList.Clear();
Run Code Online (Sandbox Code Playgroud)
启用捆绑后,您将删除使用.min文件的规则.不幸的是,您将删除所有规则,因此如果您需要任何其他规则,则需要手动添加它们.此外,这将更改所有捆绑包的规则.
如果您只想为一个捆绑包禁用这些替换规则,则只需在该特定捆绑包上将EnableFileExtensionReplacements属性设置为false:
var bundle = new ScriptBundle("...");
bundle.EnableFileExtensionReplacements = false;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1645 次 |
| 最近记录: |