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 在调试模式下添加完整文件和缩小文件的主要内容,如果未能解决你的问题,请参考以下文章

在调试模式下运行 NPX 命令

ASP.NET ScriptBundle 不适用于 .min.js?

为啥 Qt 用户界面在发布模式和调试模式下看起来不同

Firebase 手机身份验证仅在发布模式下不启动 OTP,但即使在为发布模式添加 sha1 后也可以在调试模式下工作

在集群模式下添加子表的行时 H2 参照完整性违规

找不到类型或命名空间名称“ScriptBundle”(您是不是缺少 using 指令或程序集引用?)