【问题标题】:How can I preserve individual files when bundling?捆绑时如何保留单个文件?
【发布时间】:2014-10-16 17:48:25
【问题描述】:

可以通过这种方式创建目录包...

bundles.Add(new ScriptBundle("~/bundles/mybundle").IncludeDirectory(
            "~/Scripts/app/", "*.js"));

@Scripts.Url("~/bundles/mybundle") 的输出(不带令牌)是这个..

/bundles/mybundle

指向单个文件,其中整个目录内容捆绑并缩小。

有没有办法让捆绑器创建一个捆绑包,以便将文件缩小但不捆绑到单个文件中?

/bundles/mybundle/myScript1.js
/bundles/mybundle/myScript2.js
/bundles/mybundle/myScript3.js

Scripts.Url("~/bundles/mybundle") 然后会引用虚拟路径的根目录

【问题讨论】:

  • 为每个文件制作一个捆绑包?这很乏味,但它会工作。
  • @gunr2171 如果您再次指定相同的捆绑路径,那不会覆盖其他虚拟路径吗?我想我会在 /bundles/mybundle/ 获得 1 个文件,最后一个文件添加到包中。
  • 捆绑路径必须是 ~/bundles/mybundle/myScript1 等等。我不喜欢它,但这是我的建议。如果您的年龄在 10 岁以下,那应该不是什么大问题。
  • Bundler 的重点是 bundling,即将所有文件组合在一起 - 缩小只是肉汁。如果您不想捆绑,请不要使用 Bundler,而只需直接引用脚本的缩小版本或使用构建后脚本来运行 Grunt/Ant 任务或其他东西。
  • @ChrisPratt 说了什么。如果您不想捆绑,为什么要使用捆绑?如果您解释为什么需要单个缩小文件,也许我们可以提供适当的答案。现在你在问your attempted solution rather than your actual problem

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-5 bundling-and-minification


【解决方案1】:

您可以像 @gunr2171 所说的那样为每个文件创建一个捆绑包,但更简洁的解决方案是创建您自己的自定义捆绑转换,如下所示:

public class MinifyTransform : IBundleTransform
{
    public void Process(BundleContext context, BundleResponse response)
    {
        string bundleResponse = string.Empty;
        foreach (FileInfo file in response.Files)
        {
            //Minify file
        }
        response.Content = bundleResponse ;
    }
}

然后您可以像这样使用捆绑器转换器:

Bundle myBundle = new Bundle("~/bundles/mybundle", new MinifyTransform());

【讨论】:

  • 这与以前的结果基本相同,不是吗?捆绑包中的所有文件都将放入response.Content,因此是一个文件。
猜你喜欢
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 2013-05-01
相关资源
最近更新 更多