【发布时间】:2014-03-24 14:24:21
【问题描述】:
我在我的 ASP.Net MVC 5 项目中看到了一种奇怪的捆绑行为。当我如下明确声明 BundleConfig.cs 文件中的所有文件时,我的项目工作得很好:
bundles.Add(new ScriptBundle("~/bundles/app").Include(
"~/app/app.js",
"~/app/config.js",
"~/app/dir1/file1.js",
"~/app/dir1/subdir1/file2.js",
.....
但是,如果我改用IncludeDirectory,则开发过程中的脚本路径(BundleTable.EnableOptimizations = false)不完整。这是我看到的:
bundles.Add(new ScriptBundle("~/bundles/app").Include(
"~/app/app.js",
"~/app/config.js")
.IncludeDirectory("~/app/dir1", "*.js", true)
Chrome 在尝试获取 file2.js 时向我显示 404。捆绑系统将以下内容添加到我的布局页面:
<script src="/app/app.js"></script>
<script src="/app/config.js"></script>
<script src="/app/dir1/file1.js"></script>
<script src="/app/dir1/file2.js"></script>
file2.js 的路径错误。它省略了路径的subdir1 部分。我在这里遗漏了什么吗?
【问题讨论】:
-
It omits the dir2 part of the path。你的意思是subdir1? -
是的 - 很抱歉。修好了。
-
这是奇怪的行为。捆绑器不应该递归地跟随目录,所以如果你包含
~/app/dir1,它应该只包含该目录中的文件。如果它还包括子目录中的文件,而实际上并未在路径中包括该子目录,那对我来说是一个新的。一般来说,您的最佳实践是明确的。如果要包含文件,请明确包含该文件。在我看来,IncludeDirectory之类的东西很危险。 -
我认为您应该在浏览器中看到的 html 源代码类似于 您是在本地运行网站吗?
-
是的,我假设 OP 在本地运行,因为捆绑程序不做任何事情,只是在调试模式下包含所有文件。无论如何,即使在生产中,OP 也可能只有一个文件,但来自
/app/dir1/subdir1/file2.js的代码将在该捆绑文件中丢失。无论哪种方式,它都不会真正影响问题或可能的答案。
标签: c# asp.net-mvc bundling-and-minification