代码之家  ›  专栏  ›  技术社区  ›  Andy Braham

开发服务器热更新不工作

  •  8
  • Andy Braham  · 技术社区  · 6 年前

    我把我的.NET核心2.1项目升级到Angular6,除了热更新外,所有东西都正常工作。在更新之前,有可能更新typescript,而vs将重新编译和重新加载浏览器,现在这似乎已经被打破了,需要手动运行。 ng build 为了重新编译脚本,VS似乎不再自动重新编译了。

    是否有一个设置(可能是在angular.json中)需要设置以启用开发服务器?

    更新

    出于某种原因,热更新暂时开始工作,不确定我做了什么来启动/停止工作。当我启动调试会话并更新任何.ts文件时,我可以看到编译器输出成功,但当我刷新浏览器时,我看不到任何更改,除非我使用 NG构建 .

    我开始认为在某个地方发生了一些错误通信,或者某个地方可能发生了一个编译器没有发现的错误,导致了某些东西无法更新?

    在观察输出窗口时,我注意到的另一件事是,我的站点开始在本地主机上运行:44359,但在输出中,它说 Angular Live Development Server is listening on localhost:55287 这些端口是否匹配?

    最后一个观察是,在调试会话期间进行了更改之后,输出窗口会列出所有的块,就像手动运行它时一样,它输出的异常。 i 「wdm」: Compiled successfully 可能有什么东西损坏了,或者这只是一个输出错误?

    2 回复  |  直到 5 年前
        1
  •  22
  •   Andy Braham    6 年前

    经过一番周旋,我终于得到了这份工作,我想我会和大家分享发生的事情。

    当你跑步时 ng build 它编译并输出到 ClientApp/dist 文件夹。启动调试会话时,项目将使用此版本。如果在运行时更改文件,它将重新编译文件,但不会覆盖 dist 目录。我认为因为这些文件是在用户界面之外手动生成的,VS认为它不能覆盖它们。

    所以,如果你开始遇到同样的问题,幸运的是有一个简单的解决方法,简单的 删除 客户端应用程序/分发 文件夹 在启动调试会话之前。Visual Studio将在后台编译文件,当您更新源文件或样式表时,浏览器将自动刷新。

    更新

    我发现的另一件事是如果你需要手动运行 NG构建 还有另一种方法可以使文件至少保持最新(需要重新加载):

    包.json

       "scripts": {
        "ng": "ng",
        "start": "ng serve",
        "build": "ng build",
        "test": "ng test",
        "lint": "ng lint",
        "e2e": "ng e2e",
        "debug": "ng serve --watch",
      },
    

    然后运行 ng build --watch 而不是 NG构建 这将使提示进入监视模式(按ctrl c结束),然后每次更改一个源文件时,它都会更新。我添加了“调试”,因为我不确定它是否会影响生产,总是安全地保留现有的东西,或者默认的,如果可以作为备份的话。

    然后在startup.cs(configure(_))中,更新服务器以使用新的“debug”:

    spa.UseAngularCliServer(npmScript: "debug");
    

    更新-2

    我在使用angular和vs(2017)时发现的另一件事是,如果您的代码中有一个不是由cli编译器发现的错误,特别是在任何构造函数或ngoninit()函数中,它甚至会在关闭后挂起angular服务,使其看起来就像热更新不再工作一样。这将导致完全疯狂,因为在服务关闭之前,不会加载任何更改或更新。

    另一个可能的原因是编译时出错.scss或angular。检查“Output”(输出)窗口是否有任何角度的CLI错误或浏览器输出中的错误。

    关闭vs后,确保 VSCompiler.exe ,有多余的吗? Console Windows Host (Angular服务器,不是在SQL用户下运行的服务器,即mssqlfdLauncher…)并且任何Visual Studio服务都将在任务管理器中关闭。

    我意识到,实际上是我的代码中的一个错误导致了所有事情停止工作或根本不工作。Angular和.NET并不总是抛出一个错误,有时这些错误被简单地跳过(尤其是在有语法错误的情况下),或者在所有其他输出中输出。

    如果事情停止工作,很可能是由于错误或其他原因导致编译器停止响应。最后一个需要复查的区域是您的 package.json angular.json ,尤其是任何路径,然后运行以下命令并密切关注需要进行的更新的输出:

    ng update 
    npm update
    npm rebuild
    npm install
    

    默认的.json文件应该可以从包中直接运行,请尝试恢复到那些文件以检查您的配置。删除 距离 文件夹基本上是上述操作的快捷方式(减去实际输出,让vs在调试前编译),强制Angular重新编译所有内容,但请记住,如果服务挂起,在该服务停止之前,您做什么都不重要。

        2
  •  1
  •   Jin Lim    5 年前

    简短的回答。

    删除clientapp文件夹中的“dist”文件夹。在VisualStudio中

    重新启动 运行