力ASP.Net MVC捆绑来呈现一定的顺序JavaScript文件(Force ASP.Net M

2019-07-18 20:28发布

我工作的一个ASP.Net MVC 4应用程序和使用捆绑和minifiction渲染风格和脚本文件。

我有一个脚本文件( 文件 )在另一个文件( 文件B),其通话功能,当我使用
@Scripts.Render()方法,它使link文件标记文件 B之前,因此触发一个错误,并且脚本无法正常工作。

有没有办法强迫@Script.Render()来渲染link在一定的顺序代码,而无需使用单独的包对每个文件????

编辑

我使用IncludeDirectory方法包括该文件夹中的所有脚本文件

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/js").IncludeDirectory(
                    "~/Scripts/js",
                    "*.js"));
    }
}

Answer 1:

写你自己的订货在这个问题达林季米特洛夫回答: 我怎么能指定一个明确的ScriptBundle包括订单?

public class MyBundleOrderer : IBundleOrderer
{
    public virtual IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
    {
        //any ordering logic here

        return files;
    }
}


Answer 2:

默认情况下,将捆绑按字母顺序添加脚本。 它走动知名图书馆和以正确的顺序(它将把jQuery的在第一位,然后jQuery的用户界面,例如)添加。

最简单的方法是自己订购的脚本。 一种方法是你的自定义脚本移动到不同的文件夹,然后所有的脚本添加到您想要的顺序自己的包:

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/js").IncludeDirectory(
                    "~/Scripts/js","*.js"));

        bundles.Add(new ScriptBundle("~/bundles/myScripts").Include(
            "~/Scripts/custom/scriptB.js",
            "~/Scripts/custom/scriptA.js"));
    }
}

另一种选择是通配符。 该选项还包括移动您的自定义脚本自己的文件夹,但只有一包( 源 ):*

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {       
        bundles.Add(new ScriptBundle("~/bundles/js").Include(
            "~/Scripts/*.js",
            "~/Scripts/custom/scriptB.js",
            "~/Scripts/custom/scriptA.js"));
    }
}

另外关于您的评论“有没有办法强迫@Script.Render()来渲染link在一定的顺序代码,而无需使用单独的包对每个文件” -注意,单独的链接标签仅在调试模式下发生。 一旦你在释放模式部署,只会有一个链接标签和一个文件。



Answer 3:

看看BundleCollection.FileSetOrderList为bundeled文件的排序。 我发现这个博客帖子大约是: http://weblogs.asp.net/imranbaloch/archive/2012/09/30/hidden-options-of-asp-net-bundling-and-minification.aspx这也解释了它相当不错。

对于JQuery的排序的示例代码:

BundleFileSetOrdering bundleFileSetOrdering1 = new BundleFileSetOrdering("jquery");
bundleFileSetOrdering1.Files.Add("jquery.js");
bundleFileSetOrdering1.Files.Add("jquery-min.js");
bundleFileSetOrdering1.Files.Add("jquery-*");
bundleFileSetOrdering1.Files.Add("jquery-ui*");
bundleFileSetOrdering1.Files.Add("jquery.ui*");
bundleFileSetOrdering1.Files.Add("jquery.unobtrusive*");
bundleFileSetOrdering1.Files.Add("jquery.validate*");
bundles.FileSetOrderList.Add(bundleFileSetOrdering1);


Answer 4:

您应该考虑使用盒式http://getcassette.net/它支持基于每个文件里面找到脚本引用脚本依赖自动检测。

如果你更喜欢坚持MS网络优化解决方案,但像基于脚本引用安排脚本的想法,你应该阅读我的文章的博客http://blogs.microsoft.co.il/oric/2013/12/27/building-single -page应用束-订货者/



文章来源: Force ASP.Net MVC Bundle to render the javascript files in a certain order