ScriptBundle 在调试模式下添加完整文件和缩小文件
Posted
技术标签:
【中文标题】ScriptBundle 在调试模式下添加完整文件和缩小文件【英文标题】:ScriptBundle adding both full and minified file in debug mode 【发布时间】:2013-09-10 21:13:56 【问题描述】:我在 BundleConfig.cs 中定义了以下 ScriptBundle-
public class BundleConfig
public static void RegisterBundles(BundleCollection bundles)
bundles.Add(new ScriptBundle("~/js/yepnope").Include(
"~/Scripts/yepnope.version.js"));
它实际上不是唯一的捆绑包,但与问题相关的全部内容都在其中 - 其余的只是其他捆绑包定义。
当处于 web.config 中设置的“调试”模式时-
<compilation debug="true" targetFramework="4.5">
脚本的完整版和缩小版都会发送到浏览器-
<script src="/Scripts/yepnope.1.5.4-min.js"></script>
<script src="/Scripts/yepnope.1.5.4.js"></script>
脚本是使用 html 助手添加的,就像这样-
@section HeadScripts
@Scripts.Render("~/js/yepnope")
这是一个 MVC4 项目,在 Windows 7 Professional 64 位的 Visual Studio 2012 中运行。
无论我做什么,我都无法让 version 通配符按照Microsoft documentation-中所述的方式运行-
注意:除非 EnableOptimizations 为 true 或 Web.config 文件中的编译元素设置为 false,文件 不会被捆绑或缩小。此外,.min 版本的 将不使用文件,将选择完整的调试版本。
对于 ASP.NET MVC 4,这意味着使用调试配置,文件 jquery-1.7.1.js 将被添加到包中。在一个版本中 配置,jquery-1.7.1.min.js 将被添加。捆绑 框架遵循几个常见的约定,例如:
当“FileX.min.js”和“FileX.js”时选择“.min”文件发布 存在。 选择非“.min”版本进行调试。 忽略“-vsdoc” 文件(例如 jquery-1.7.1-vsdoc.js),仅由 智能感知。上面显示的 version 通配符匹配用于 自动创建一个带有适当版本的 jQuery 包 脚本文件夹中的 jQuery。在此示例中,使用通配符 提供以下好处:
允许您使用 NuGet 更新到较新的 jQuery 版本,而无需 在您的视图中更改前面的捆绑代码或 jQuery 引用 页。 自动选择完整版本进行调试配置 以及用于发布版本的“.min”版本。
如果我添加“EnableOptimizations”,它的行为似乎符合预期。
有其他人注意到这一点或找到解决方案吗?
【问题讨论】:
不带调试属性的发布似乎也会导致它从完整的 .js 文件生成文件的单个缩小版本 - 缩小的变量名称与提供的缩小版本中的不同。跨度> 您的意思可能是将该文件命名为.min.js
而不是 -min.js
。
@MikeSmithDev 它可能来自-min.js
。将 NuGet 包与 MVC4 一起使用是一个常见问题:您获取一个包,它带有 .js
和 -min.js
或 .min.js
。如果你得到一个.min.js
文件,那么一切应该正常工作。但是如果你得到一个-min.js
文件,它只会导致问题。最好完全摆脱它,就像我的回答一样。
@TimothyShields 删除它是可行的,但遵循文档并拥有一个 '.min.js' 文件也可以,并且在快速测试中,使用 .min 优化的文件比使用时更小不在那里,所以我会提倡重命名文件并按照设计使用优化。
@MikeSmithDev 如果默认压缩器的效率低于用于创建打包min.js
的其他压缩器,则可以将压缩器切换为...
【参考方案1】:
MVC4 只知道如何处理.min.js
文件。它无法识别-min.js
(带有破折号)。
我通常会轻松成功地执行此操作的方法是删除由提供.js
和.min.js
或-min.js
的库提供的任何.min.js
或-min.js
文件。默认情况下,MVC 会在您部署网站时自动缩小任何捆绑的 .js
文件,因此无需使用提供的 .min.js
或 -min.js
文件。
这不一定是对您特定问题的直接回答 - 这是一种完全规避问题的方法。
【讨论】:
以上是关于ScriptBundle 在调试模式下添加完整文件和缩小文件的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET ScriptBundle 不适用于 .min.js?