0

是否可以使用 .NET 缩小/捆绑机制来创建一个捆绑包,该捆绑包将在子目录中搜索缩小的文件:

未压缩:

/css/jquery-ui.css
/css/fullcalendar.css
/css/bootstrap.css

缩小:

/css/minified/jquery-ui.min.css
/css/minified/fullcalendar.min.css
/css/minified/bootstrap.css

我有大约 12 个单独的样式表和 20 多个脚本,并且压缩版本加倍。我想让它们分开只是为了有点组织。这可能吗?

4

1 回答 1

2

在 Asp.Net MVC 中进行捆绑和缩小的方式是通过运行时的动态处理。当您创建一个包时,它可以被注入到任何 Asp.Net 页面中。如果您处于调试模式,则捆绑程序将以完整形式发送捆绑包中的每个项目,以便于调试。如果您处于发布模式,则捆绑器会自动将捆绑中各个文件的内容解析为单个内存文件流,然后将其缩小。无需在项目中明确包含 css/javascript 文件的完整版本和缩小版本。但是,根据ASP.Net 文档

捆绑框架遵循几个常见的约定,例如:

  • 当“FileX.min.js”和“FileX.js”存在时选择“.min”文件发布。
  • 选择非“.min”版本进行调试。
  • 忽略仅由 IntelliSense 使用的“-vsdoc”文件(例如 jquery-1.7.1-vsdoc.js)。

基本上,如果您同时拥有完整版本和缩小版本,那么框架将更喜欢使用预缩小版本而不是缩小文件本身。

在发布模式下加载页面时,捆绑和缩小的效果表现为整个捆绑包的单个 css 或 js 文件流,由对服务器的单个调用表示,例如http://localhost/MvcBM_time/bundles/AllMyScripts?v=r0sLDicvP58AIXN_mc3QdyVvVj5euZNzdsa2N1PKvb81.

实际上,创建了一个与捆绑包名称匹配的唯一路由(AllMyScripts在本例中)。查询字符串v有一个值标记,它是用于缓存的唯一标识符。只要捆绑包没有更改,ASP.NET 应用程序就会AllMyScripts 使用此令牌请求捆绑包。如果捆绑包中的任何文件发生更改,ASP.NET 优化框架将生成一个新令牌,确保浏览器对捆绑包的请求将获得最新的捆绑包。

至于包含来自多个目录的文件,最简单的方法是使用通配符模式匹配。方法中指定的虚拟路径Include和方法中的搜索模式IncludeDirectory可以接受一个*通配符作为最后一个路径段的前缀或后缀。搜索字符串不区分大小写。该IncludeDirectory 方法具有搜索子目录的选项。

于 2013-10-13T22:37:03.590 回答