【问题标题】:Can I search documents and add any js files I find to a bundle in ASP.NET MVC?我可以搜索文档并将找到的任何 js 文件添加到 ASP.NET MVC 中的包中吗?
【发布时间】:2017-06-15 00:36:13
【问题描述】:

所以我们正在制作一个带有插件的网站,我想知道是否可以在插件文件夹中搜索任何 js 文件并将它们添加到 BundleConfig.cs 类中的包中.

我曾考虑将我想要捆绑的所有文件命名为 Plugin.pluginName.js,然后搜索所有文件以查找与“Plugin..js*”匹配的任何文件,但是我不确定该怎么做。

如何创建插件包?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    按照命名约定命名要捆绑的所有文件的想法是一个很好的约定。

    将脚本包添加到包集合中

    public static void RegisterBundles(BundleCollection bundles) {
        bundles.Add(new ScriptBundle("~/bundles/plugins").Include(
                "~/Scripts/*.Plugin.js")); //{pluginName}.Plugin.js convention
    
        //...other bundles
    }
    

    如果您想放弃命名约定,也可以在 plugins 文件夹中搜索任何 js 文件

    public static void RegisterBundles(BundleCollection bundles) {
        bundles.Add(new ScriptBundle("~/bundles/plugins")
                .IncludeDirectory("~/Plugin‌​s", "*.Plugin.js", true));
        //above recursively search subdirectories of directoryVirtualPath.
    
        //...other bundles
    }
    

    在视图中使用注册的名称引用包

    @Scripts.Render("~/bundles/plugins")
    

    参考Using Bundling and Minification with ASP.NET MVC

    【讨论】:

    • 所以使用"~/Plugins/*.Plugin.js" 似乎只能搜索~/Plugins 文件夹的直接内容。我需要搜索每个直接子文件夹,例如"~/Plugins/*/*.Plugin.js",但您不能使用它,因为通配符只能在最后一部分(文件名所在的位置)。
    • include 方法使用参数。您可以使用 system.io 获取所有插件目录并构建模板以提供给捆绑包。
    • 感谢参考,我找到了解决办法!您可以使用IncludeDirectory() 方法代替Include() 方法,如下所示:bundles.Add(new ScriptBundle("~/bundles/plugins").IncludeDirectory("~/Plugins", "*.Plugin.js", true)); 谢谢!
    【解决方案2】:

    什么是捆绑?

    捆绑是 ASP.NET 4.5 中的一项新功能,可以轻松地将多个文件合并或捆绑到一个文件中。 您可以创建 CSS、JavaScript 和其他包。更少的文件意味着更少的 HTTP 请求,这可以提高首页加载性能。

    如何启用捆绑?

    通过在 Web.config 文件的编译元素中设置调试属性的值来启用或禁用捆绑。在以下 XML 中,debug 设置为 true,因此禁用了捆绑和缩小。 XML

    <system.web>
        <compilation debug="true" />
    
    </system.web>
    

    要启用捆绑和缩小,请将调试值设置为“false”。

    您可以使用 BundleTable 类的 EnableOptimizations 属性覆盖 Web.config 设置。 以下代码启用捆绑和缩小并覆盖 Web.config 文件中的任何设置。

    示例

    public static void RegisterBundles(BundleCollection bundles) {
    
    
        bundles.Add(new ScriptBundle("~/bundles/AnyName").Include(
                "~/Scripts/Plugins/*.js"));    // this will all the files in the plugins folder with .js extension
                                               //you can specify files separately if dont want to use wildcards
    
          BundleTable.EnableOptimizations = true;
    }
    

    重要提示: Include 方法中指定的虚拟路径和 IncludeDirectory 方法中的搜索模式可以接受一个“*”通配符作为最后一个路径的前缀或后缀段

    官方文档:https://docs.microsoft.com/en-us/aspnet/mvc/overview/performance/bundling-and-minification#using-bundling-and-minification-with-aspnet-mvc

    谢谢

    卡提克

    【讨论】:

      猜你喜欢
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      相关资源
      最近更新 更多