5

我已经使用 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")


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

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

“合并和缩小”输出如下,错误地只包含来自 Site.js 的代码:

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

任何关于为什么会发生这种情况的想法将不胜感激!谢谢

4

2 回答 2

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

希望这可以帮助任何发现此问题的人!

于 2013-03-01T14:51:11.880 回答
1

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

于 2012-12-28T16:52:27.120 回答