首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捆绑包不包括.min文件

捆绑包不包括.min文件
EN

Stack Overflow用户
提问于 2012-08-16 11:46:49
回答 9查看 99.2K关注 0票数 261

我在mvc4捆绑包中没有包含扩展名为.min.js的文件时遇到了一个奇怪的问题

在我的BundleConfig类中,我声明

代码语言:javascript
复制
public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/Scripts/jquery")
        .Include("~/Scripts/jquery-1.8.0.js")
        .Include("~/Scripts/jquery.tmpl.min.js"));            
}

在我看来,我宣布

代码语言:javascript
复制
<html>
    <head>
    @Scripts.Render("~/Scripts/jquery")
    </head><body>test</body>
</html>

当它渲染时,它只渲染

代码语言:javascript
复制
<html>
    <head>
         <script src="/Scripts/jquery-1.8.0.js"></script>
    </head>
    <body>test</body>
</html>

如果我将jquery.tmpl.min.js重命名为jquery.tmpl.js (并相应地更新包中的路径),两个脚本都可以正确呈现。

是否有一些配置设置导致它忽略'.min.js‘文件?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-08-17 19:53:39

我最初发布的解决方案是有问题的(是一个肮脏的黑客)。正如许多评论者指出的那样,Microsoft.AspNet.Web.Optimization包中的调整行为已经改变,调整不再起作用。现在我不能在1.1.3版本的包中重现这个问题。

请参阅System.Web.Optimization.BundleCollection的源代码(例如,您可以使用dotPeek ),以更好地理解您将要做的事情。另请阅读Max Shmelev's answer

原始答案

将.min.js重命名为.js或执行以下操作

代码语言:javascript
复制
    public static void AddDefaultIgnorePatterns(IgnoreList ignoreList)
    {
        if (ignoreList == null)
            throw new ArgumentNullException("ignoreList");
        ignoreList.Ignore("*.intellisense.js");
        ignoreList.Ignore("*-vsdoc.js");
        ignoreList.Ignore("*.debug.js", OptimizationMode.WhenEnabled);
        //ignoreList.Ignore("*.min.js", OptimizationMode.WhenDisabled);
        ignoreList.Ignore("*.min.css", OptimizationMode.WhenDisabled);
    }

    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.IgnoreList.Clear();
        AddDefaultIgnorePatterns(bundles.IgnoreList);
        //NOTE: it's bundles.DirectoryFilter in Microsoft.AspNet.Web.Optimization.1.1.3 and not bundles.IgnoreList

        //...your code
     }
票数 257
EN

Stack Overflow用户

发布于 2012-10-16 01:39:36

微软暗示了以下行为(我更喜欢在我的项目中遵循它):

简短版本

在同一文件夹下的项目中,您可以同时获得调试版本和精简版本的脚本:

  • script.js
  • script.min.js

  1. 在代码中仅将script.js添加到包中。

因此,您可以将script.js包含在模式中,并将script.min.js包含在RELEASE模式中。

长版本

您还可以使用.debug.js版本。在这种情况下,该文件包含在调试中的以下优先级中:

  1. script.debug.js
  2. script.js

在版本中:

  1. script.min.js
  2. script.js

备注

顺便说一下,在MVC4中拥有脚本的.min版本的唯一原因是当缩小的版本不能被自动处理时。例如,下面的代码不能被自动混淆:

代码语言:javascript
复制
if (DEBUG) console.log("Debug message");

在所有其他情况下,您可以只使用脚本的调试版本。

票数 180
EN

Stack Overflow用户

发布于 2013-12-11 00:20:58

如果您所拥有的只是一个文件的缩小版本,我找到的最简单的解决方案是复制缩小的文件,从复制的文件名中删除.min,然后在捆绑中引用未缩小的文件名。

例如,假设您购买了一个js组件,他们给了您一个名为some lib-3.2.1.min.js的文件。要在捆绑包中使用此文件,请执行以下操作:

  1. 复制some-lib-3.2.1.min.js并将复制的文件重命名为some-lib-3.2.1.js。在project.
  2. Reference中包含这两个文件包中的非最小化文件,如下所示:

Bundles.Add(新包(“~/ScriptBundle/库”).Include(“~/脚本/some-lib-{版本}.js”));

仅仅因为名称中没有'min‘的文件实际上是缩小的,应该不会引起任何问题(除了它本质上是不可读的)。它只在调试模式下使用,并作为单独的脚本写出来。当不在调试模式下时,预编译的min文件应该包含在包中。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11980458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档