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

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”)引用了该bundle。
当我在调试模式下运行网站时(在Web.config中使用<compilation debug =“true”targetFramework =“4.5”/>),我得到了预期的结果-两个警报框一个接一个地显示。
然而,当我切换到发布模式(<compilation debug =“false”targetFramework =“4.5”/>)时,我只看到第一个警报框,并且发送到浏览器的组合JS文件完全忽略了test.js的内容。
组合并压缩的输出如下,错误地仅包括Site.js中的代码:
(function(){alert("this is site.js")})()

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

尝试重命名第二个js文件,某些文件名有特殊处理,我想知道“test”是否有特殊含义。只是猜测。请仔细检查名称的大小写是否匹配,虽然在Windows平台上通常不重要。 - AaronLS
@AaronLS - 感谢您的建议 - 我已经尝试使用 "firstthing.js" 和 "secondthing.js" 并检查了大小写,但不幸的是它仍然无法工作。我认为我的解决方案可能存在问题,因为我无法在空项目中复制它。即使删除所有其他脚本/ CSS /捆绑包似乎也没有改变任何东西 :S - Matt Wilson
2个回答

5
我已经找到了导致这个问题的原因。如果任何javascript文件的最后一行是注释,它们将合并在一起而没有换行符,导致下一个文件的第一行被注释掉。
这里有一个关于stackoverflow的另一个问题的链接,它演示了这一点:https://dev59.com/I2zXa4cB1Zd3GeqPZvco#142239451 在我的情况下,我正在使用Web Essentials Visual Studio插件来压缩我的javascript文件。它为每个JS文件创建了一个.js.map文件,在每个.min.js文件的末尾都有一个注释行,像这样,结果引起了问题:
//@ sourceMappingURL=somefile.min.js.map

因为我不需要映射文件,所以我使用 选项 -> Web Essentials -> Javascript -> 将生成源映射(.map)设置为false 将此功能关闭。

希望这能帮助任何遇到这个问题的人!


1
Matt,你的捆绑代码看起来正确,当在发布模式下运行时,你是否在浏览器控制台中收到任何JS错误?另外顺便提一下,你是否知道你可以简单地定义JS文件夹路径,这样它们就会全部被包含进去?

感谢您的回复。没有js错误 - 它似乎只是忽略了捆绑输出中第二个文件的内容。令人沮丧的是,我只能在这个特定的解决方案中复制该问题,而我似乎无法在空项目中重现它!我知道您可以定义文件夹路径,但我认为您将失去对捆绑文件顺序的控制(我不想麻烦地使用数字前缀重命名我的文件)? - Matt Wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接