当前位置:编程学习 > C#/ASP.NET >>

请教各位mvc的js打包压缩有关的问题(ScriptBundle)

我在mvc4新建项目中App_Start/BundleConfig.cs文件中有如下代码:


        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/Index/jquery_easyui").Include(
                "~/Content/Scripts/jquery.min.js",
                "~/Content/Scripts/jquery.easyui.min.js"
                ));

            bundles.Add(new StyleBundle("~/Index/css_easyui").Include(
                "~/Content/Css/themes/default/easyui.css",
                "~/Content/Css/themes/icon.css"));
        }

然后在razor视图中引用:
     

@Styles.Render("~/Index/css_easyui")
    @Scripts.Render("~/Index/jquery_easyui")


运行起来,查看页面的源文件如下:

<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <link href="/Content/Css/themes/default/easyui.css" rel="stylesheet"/>
<link href="/Content/Css/themes/icon.css" rel="stylesheet"/>

    
  
    
    
    
    
</head>

只看到有css文件的引用,js文件死活找不到,各位有没有能给个解决方法的?小弟不胜感激 mvc mvc4 --------------------编程问答-------------------- 没人回吗。。 --------------------编程问答-------------------- 没看出什么明显的错误。

检查下Content/Scripts/jquery.min.js Content/Scripts/jquery.easyui.min.js这两个文件名是否真实存在。 --------------------编程问答-------------------- 是不是JS文件太大了 --------------------编程问答-------------------- 是文件太大了,这样就好了
 <script src="../../Scripts/EasyUI/jquery.easyui.min.js" type="text/javascript"></script> --------------------编程问答-------------------- 后缀名不能为 .intellisense.js、-vsdoc.js、.debug.js、.min.js、.min.css~以这些结尾的文件名会自动被过滤掉~ --------------------编程问答--------------------
引用 1 楼 wudi3121113 的回复:
没人回吗。。


bundles.Add(new ScriptBundle("~/Index/jquery_easyui").Include(
                "~/Content/Scripts/jquery.min.js",
                "~/Content/Scripts/jquery.easyui.min.js"
                ));

==
请确认路径是否正确、文件是否存在! --------------------编程问答-------------------- mvc4新建项目中App_Start/BundleConfig.cs文件的ScriptBundle,有自己的规则写法,你的写法完全不正确。 --------------------编程问答-------------------- 为啥要这样写 直接写html不上更直接么 连编译都省了 --------------------编程问答--------------------
引用 8 楼 wmq15080078423 的回复:
为啥要这样写 直接写html不上更直接么 连编译都省了

呵呵  你就不知道这样做的好处了  这样做  可以把一个以上的js或css文件全部打包整合成一个js或css文件 并发给浏览器,这样可以减少很多次浏览器与服务器之间的连接次数,另外还有一点,这种方式可以把你的js文件或css文件全部压缩成一行  你可以看看jQuery.js(200kb+)和jQuery.min.js(90kb+) 差距有多大,所以压缩技术很重要。这样做省去了开发人员去做压缩工作 --------------------编程问答-------------------- 现在来说说楼主的问题

1.引用js文件,如果有.min.js和.js文件  最好只引用.js文件 而不去引用.min.js文件,因为系统在Release之后会自动去查找相应的.min.js文件的 而在debug时会引用.js文件  这样方便调试

2.确定文件是否存在,如果不存在,知道怎么改了吧??

3.我发现楼主还不了解BundleConfig的使用方法。
new StyleBundle("绑定实例名")  这里明明是名称,但为什么这名称看起来像路径
比如你这里的 new StyleBundle("~/Index/css_easyui")
为什么会像路径??
这是有原因的

当你在Release之后 BundleConfig会把你这个Include中的所有文件进行压缩成一个文件,但这个文件的路径是什么,就是这个"绑定实例名"
也就是说 在这里,当你Release之后  你的css将会生成 <link type="text/css" rel="stylesheet" href="~/Index/css_easyui?随机数"/>

接着说:
如果 你的css文件~/Content/Css/themes/icon.css里面有句话:
.cls
{
   background-image:url(../img/xxxx.gif);
}
发现问题没有呢?  在Release之前
这个背景图的路径是:~/Content/Css/img/xxxx.gif

而在Release之后 因为你的css文件已经整合到了~/Index/css_easyui?随机数这个文件里面
所以Release之后这个图片路径却变成了:~/img/xxxx.gif

试想  浏览器还能找到这张图片吗? --------------------编程问答--------------------
引用 9 楼 vermilion3618 的回复:
Quote: 引用 8 楼 wmq15080078423 的回复:

为啥要这样写 直接写html不上更直接么 连编译都省了

呵呵  你就不知道这样做的好处了  这样做  可以把一个以上的js或css文件全部打包整合成一个js或css文件 并发给浏览器,这样可以减少很多次浏览器与服务器之间的连接次数,另外还有一点,这种方式可以把你的js文件或css文件全部压缩成一行  你可以看看jQuery.js(200kb+)和jQuery.min.js(90kb+) 差距有多大,所以压缩技术很重要。这样做省去了开发人员去做压缩工作

受教了
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,