捆绑脚本,呈现但在 vs 2017 中发布后不起作用
Bundled scripts, render but don't work after publish in vs 2017
我有一个在 vs 2015 中构建的网站,当我尝试从源代码管理中重新抓取项目时发生了一些事情,长话短说我无法在 vs 2015 中发布它,因为 MSBuildTools我无法修复的错误。
我能够让该网站在 vs 2017 中发布,现在 javascript 全部呈现在该网站上,但其中 none 有效。我不知道发生了什么。它与我在 vs 2015 中处理它时的项目完全相同,当我能够发布它时,javascript 全部呈现并且工作正常。
当我在 vs 2015 或 2017 中调试时,javascript 全部呈现并完美运行。
这是我的 BundleConfig.cs...
的片段
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/Bundles/Scripts/Areas/Admin/AdminBar").Include(
"~/Scripts/Areas/Admin/AdminBar.js"));
BundleTable.EnableOptimizations = true;
}
EnableOptimizations我在本地调试的时候注释掉了
当我发布时,所有捆绑的 css 渲染和工作正常。
哦,我使用他们所谓的模块化脚本?我的 .js 文件看起来像这样...
Scripts.Areas.Admin.AdminBar = (function (my, $)
{
// Local variables
my._settings = {};
my.setup = function (settings)
{
my._settings = settings;
}
return my;
}(Scripts.Areas.Admin.AdminBar || {}, jQuery));
然后在我看来,我将其渲染为...
@Scripts.Render("~/Bundles/Scripts/Areas/Admin/AdminBar")
然后在视图中会像这样调用该文件中的函数...
<script type="text/javascript">
Scripts.Areas.Admin.Adminbar.setup()
</script>
好的,叫狗走开!我想到了。实际上是借助暗黑破坏神的评论。我在浏览器中看到它说加载 Jquery 时出错。所以我查看了我的项目,因为 NuGet 已经重新安装了我所有的包,所以 jquery 脚本在那里但没有包含在我的项目中。这解释了为什么它在本地调试时有效,但在我发布它时却无效。它将那些 jquery 脚本排除在发布之外。
非常感谢暗黑破坏神...会为此赞扬你,但你只发表了评论,我不知道如何将你的评论标记为有用。
当您说“...现在 javascript 全部呈现在站点上,但其中 none 有效”时,您到底是什么意思?您是否在浏览器控制台上看到任何 javascript 错误?如果您没有看到任何错误,您是否尝试在您的 js 文件中添加类似 "alert('This is a test');" 的内容并查看它是否命中?
此外,如果您完全确定脚本已被渲染,为缩小问题范围,请尝试未优化版本的 js,看看它是否有效。如果是这样,那么在优化过程中显然存在某些缺失/错误,我们可能需要采用不同的方法来查看。如果它仍然不起作用,请将 'debugger' 语句放在任何正在调用的 javascript 函数中,看看是否可以使用任何方法在浏览器的控制台中进行中断。执行此操作时保持浏览器控制台打开。
我有一个在 vs 2015 中构建的网站,当我尝试从源代码管理中重新抓取项目时发生了一些事情,长话短说我无法在 vs 2015 中发布它,因为 MSBuildTools我无法修复的错误。
我能够让该网站在 vs 2017 中发布,现在 javascript 全部呈现在该网站上,但其中 none 有效。我不知道发生了什么。它与我在 vs 2015 中处理它时的项目完全相同,当我能够发布它时,javascript 全部呈现并且工作正常。
当我在 vs 2015 或 2017 中调试时,javascript 全部呈现并完美运行。
这是我的 BundleConfig.cs...
的片段public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/Bundles/Scripts/Areas/Admin/AdminBar").Include(
"~/Scripts/Areas/Admin/AdminBar.js"));
BundleTable.EnableOptimizations = true;
}
EnableOptimizations我在本地调试的时候注释掉了
当我发布时,所有捆绑的 css 渲染和工作正常。
哦,我使用他们所谓的模块化脚本?我的 .js 文件看起来像这样...
Scripts.Areas.Admin.AdminBar = (function (my, $)
{
// Local variables
my._settings = {};
my.setup = function (settings)
{
my._settings = settings;
}
return my;
}(Scripts.Areas.Admin.AdminBar || {}, jQuery));
然后在我看来,我将其渲染为...
@Scripts.Render("~/Bundles/Scripts/Areas/Admin/AdminBar")
然后在视图中会像这样调用该文件中的函数...
<script type="text/javascript">
Scripts.Areas.Admin.Adminbar.setup()
</script>
好的,叫狗走开!我想到了。实际上是借助暗黑破坏神的评论。我在浏览器中看到它说加载 Jquery 时出错。所以我查看了我的项目,因为 NuGet 已经重新安装了我所有的包,所以 jquery 脚本在那里但没有包含在我的项目中。这解释了为什么它在本地调试时有效,但在我发布它时却无效。它将那些 jquery 脚本排除在发布之外。
非常感谢暗黑破坏神...会为此赞扬你,但你只发表了评论,我不知道如何将你的评论标记为有用。
当您说“...现在 javascript 全部呈现在站点上,但其中 none 有效”时,您到底是什么意思?您是否在浏览器控制台上看到任何 javascript 错误?如果您没有看到任何错误,您是否尝试在您的 js 文件中添加类似 "alert('This is a test');" 的内容并查看它是否命中?
此外,如果您完全确定脚本已被渲染,为缩小问题范围,请尝试未优化版本的 js,看看它是否有效。如果是这样,那么在优化过程中显然存在某些缺失/错误,我们可能需要采用不同的方法来查看。如果它仍然不起作用,请将 'debugger' 语句放在任何正在调用的 javascript 函数中,看看是否可以使用任何方法在浏览器的控制台中进行中断。执行此操作时保持浏览器控制台打开。