ASP.NET Bundling - 忽略第二个JS文件

时间:2012-12-19 11:37:52

标签: asp.net bundling-and-minification

我使用ASP.NET的捆绑和缩小功能设置了一个简单的测试。我有两个非常简单的js文件:

〜/ JS / Site.js

(function echo1() {
    alert("this is site.js");
})();

〜/ JS / test.js

(function echo2(value) {
    alert("and this is test.js");
})();

我创建了一个包如下:

bundles.Add(new ScriptBundle("~/bundles/scripts/site-globals").Include(
    "~/JS/Site.js", 
    "~/JS/test.js"));

并使用@Scripts.Render("~/bundles/scripts/site-globals")

引用页面上的包

当我在调试(web.config中的<compilation debug="true" targetFramework="4.5" />)下运行网站时,我得到了预期的结果 - 两个警告框一个接一个显示。

但是,当我运行change to release(<compilation debug="false" targetFramework="4.5" />) - 时,我只看到第一个警告框,并且发送到浏览器的组合JS文件完全忽略了test.js的内容

“合并和缩小”输出如下所示,错误地仅包含Site.js中的代码:

(function(){alert("this is site.js")})()

对于为什么会发生这种情况的任何想法都将非常感谢!感谢

2 个答案:

答案 0 :(得分:5)

我发现了造成这个问题的原因。如果任何javascript文件的最后一行都有注释,则它们将组合在一起,而不会有换行符,从而导致下一个文件的第一行被注释掉。

以下是关于堆栈溢出的另一个问题的链接,该问题演示了这一点:https://stackoverflow.com/a/14223945/1145963 1

在我的情况下,我使用 Web Essentials Visual Studio插件来缩小我的javascript文件。它正在为每个JS文件创建一个.js.map文件,并且在每个.min.js文件的末尾都是这样的注释行,结果导致了问题:

//@ sourceMappingURL=somefile.min.js.map

由于我不需要映射文件,因此我使用Options -> Web Essentials -> Javascript -> Set Generate source maps (.map) to false

关闭了此功能

希望这有助于发现此问题的任何人!

答案 1 :(得分:1)

Matt,您的捆绑代码看起来是正确的,在Release模式下运行时,您是否在浏览器控制台中收到任何js错误?另外作为附注,您是否知道您可以简单地定义JS文件的文件夹路径,它们都将被包含在内?