【发布时间】:2015-06-03 13:52:07
【问题描述】:
在 ASP.NET 缩小和捆绑功能中,我有一个脚本可以清理某些内容,并且必须在加载多个独立文件后运行。
所以我创建了一个包,
new ScriptBundle(virtualPath, cdnPath).Include(
"~/Scripts/a.js",
"~/Scripts/cleanup.js",
"~/Scripts/b.js",
"~/Scripts/cleanup.js",
"~/Scripts/c.js",
"~/Scripts/cleanup.js",
"~/Scripts/d.js",
"~/Scripts/cleanup.js",
);
稍后我使用<script defer="defer" src="{0}"></script> 格式渲染它,期望在每个脚本的代码之后,在调试和发布模式下都会按预期进行清理。然而 ASP.NET Bundling 去除了对同一文件路径的重复调用,因此输出为
<script defer="defer" src="/Scripts/a.js"></script>
<script defer="defer" src="/Scripts/cleanup.js"></script>
<script defer="defer" src="/Scripts/b.js"></script>
<script defer="defer" src="/Scripts/c.js"></script>
<script defer="defer" src="/Scripts/d.js"></script>
在调试模式下,而我的预期,
<script defer="defer" src="/Scripts/a.js"></script>
<script defer="defer" src="/Scripts/cleanup.js"></script>
<script defer="defer" src="/Scripts/b.js"></script>
<script defer="defer" src="/Scripts/cleanup.js"></script>
<script defer="defer" src="/Scripts/c.js"></script>
<script defer="defer" src="/Scripts/cleanup.js"></script>
<script defer="defer" src="/Scripts/d.js"></script>
<script defer="defer" src="/Scripts/cleanup.js"></script>
这也告诉我该文件将在捆绑版本中被遗漏,这不是我想要的。
【问题讨论】:
-
如果清理需要运行多次,那么 a,b,c,d 等就不能在完成后调用清理代码吗?
-
a、b、c 和 d.js 文件是在项目构建时由第三方工具自动生成的,无法入侵。这就是问题所在。
-
您可以做的一件事是为
a.js, cleanup.js、b.js, cleanup.js等创建单独的包。有点烦人,但可以。 -
这将导致多个脚本包被渲染,这是我想避免的。
标签: asp.net asp.net-mvc-5 bundling-and-minification asp.net-bundling