[C#] Bundler不包括.min文件



Answers

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

简洁版本

  1. 您可以在同一个文件夹下同时在项目中调试和缩小脚本版本:
    • 的script.js
    • script.min.js
  2. 您只能将script.js添加到代码中的包中。

因此,您将自动script.js包含在DEBUG模式中,并将script.min.js包含RELEASE模式中。

长版

你也可以有.debug.js版本。 在这种情况下,该文件在DEBUG中包含在以下优先级中:

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

在RELEASE:

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

注意

顺便说一句,在MVC4中有一个.min版本的脚本的唯一原因就是缩小版本无法自动处理的情况。 例如,以下代码不能自动混淆:

if (DEBUG) console.log("Debug message");

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

Question

我对mvc4捆绑器有一个奇怪的问题,不包括扩展名为.min.js的文件

在我的BundleConfig类中,我声明

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"));            
}

在我看来,我宣称

<html>
    <head>
    @Scripts.Render("~/Scripts/jquery")
    </head><body>test</body>
</html>

当它呈现时,它只会呈现

<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'文件?




Bundler有很多好处检查这个页面 但是

Microsoft MVC4平台考虑到每个脚本或样式包至少包含缩小版本和未缩小版本(另外还有类似Debug和vsdoc的文件)。 所以我们在只有其中一个文件的情况下遇到了麻烦。

您可以永久更改web.config文件中的调试状态以处理输出:

<compilation debug="false" targetFramework="4.0" />

查看输出更改! 文件过滤已更改。 为了达到目的,我们必须改变忽略病例过滤,这将改变应用逻辑!




对于我的情况,我使用的是(精彩!)Knockout.js库,它以Debug / Non版本形式出现:

"~/Scripts/knockout-{Version}.js"
"~/Scripts/knockout-{Version}.Debug.js"

为了完成这个工作,我在我的Bundle中包含了“Knockout- {Version} .js”(非调试版)并获得了.debug。 js文件处于调试模式。




我发现了一个很好的解决方案,至少可以在MVC5中使用,你可以使用Bundle而不是ScriptBundle 。 在这种情况下,它不具备我们不喜欢的ScriptBundle的智能行为(忽略.min等)。 在我的解决方案中,我使用包含.min和.map文件的3d派对脚本的Bundle ,并使用ScriptBundle代码。 我没有注意到这样做的任何缺点。 为了使它以这种方式工作,您将需要添加原始文件,例如angular.js,并且它将在调试中加载angular.js,并且它会将发布模式下的angular.min.js捆绑在一起。




Links