尝试连接调试器时 Azure Functions 崩溃,导致 nodemon 永久重新加载

Posted

技术标签:

【中文标题】尝试连接调试器时 Azure Functions 崩溃,导致 nodemon 永久重新加载【英文标题】:Azure Functions crash when attempting to connect debugger, causes nodemon to perpetually reload 【发布时间】:2020-08-09 15:16:53 【问题描述】:

尝试干净的格式并重新安装 nodemon 无济于事,当使用 azure 函数和 tsc -w 运行时,我在循环中得到了这个(这是一个 sn-p 还有更多):

[nodemon] 触发更改检查的文件:dist/api/index.js.map [nodemon] 匹配规则:**/. [nodemon] 过滤后变化 (之前/之后):1/0 [nodemon] 文件触发更改检查: dist/api/index.js [nodemon] 匹配规则:**/. [nodemon] 更改 过滤器之后(之前/之后):1/1 [nodemon] 由于重新启动 更改... [nodemon] dist/api/index.js

[nodemon] 触发更改检查的文件:dist/graphql/es.js.map [nodemon] 匹配规则:**/. [nodemon] 过滤后变化 (之前/之后):1/0 [nodemon] 文件触发更改检查: dist/graphql/es.js [nodemon] 匹配规则:**/. [nodemon] 更改 过滤器之后(之前/之后):1/1 [nodemon] 由于重新启动 更改... [nodemon] dist/graphql/es.js

[nodemon] 触发更改检查的文件: dist/graphql/databaseInit.js.map [nodemon] 匹配规则:**/. [nodemon] 过滤器后的变化(之前/之后):1/0 [nodemon] 文件 触发更改检查:dist/graphql/databaseInit.js [nodemon] 匹配规则:**/. [nodemon] 在过滤器之后发生变化(之前/之后): 1/1 [nodemon] 由于更改而重新启动... [nodemon] dist/graphql/databaseInit.js

我正在使用的 VSCode 配置:

"name": "启动后端", “类型”:“节点”, “请求”:“启动”, "cwd": "$workspaceRoot", "runtimeExecutable": "nodemon", “运行时参数”:[ "--inspect=5858", “——详细” ], “重启”:是的, “端口”:5858, “控制台”:“集成终端”, "internalConsoleOptions": "neverOpen" ,

和 package.json:

“脚本”: “构建”:“tsc”, “手表”:“tsc -w”, "prestart": "npm run build && func extensions install", "start:host": "func start --cors *", "start": "npm run start:host & npm run watch", "build:production": "npm run prestart && npm prune --production", "test": "echo \"还没有测试...\"" ,

这在训练营中不会发生,因为它的行为符合预期,我已为这些文件所在的文档禁用云同步。

更新

当我绕过 nodemon 运行基本命令时得到这个:

29/04/2020 14:56:36] 主机初始化 (45ms) [29/04/2020 14:56:36] 主机已启动 (46ms) [29/04/2020 14:56:36] 作业主机已启动 [29/04/2020 14:56:36] 在 127.0.0.1:5859 上启动检查器失败:地址已经 正在使用 [29/04/2020 14:56:36] 启动工作进程:节点 --inspect=5859 "/Users/ahmed/.nvm/versions/node/v12.16.2/lib/node_modules/azure-functions-core-tools/bin/workers/node/dist/src/nodejsWorker.js" --host 127.0.0.1 --port 53018 --workerId b6aaf934-a647-46b0-8bde-35ef8584b03a --requestId ef307ac9-edc9-440b-8735-e81f1879029f --grpcMaxMessageLength 134217728 [29/04/2020 14:56:36] Id=11410 的节点进程已启动 [29/04/2020 14:56:36] 在 127.0.0.1:5859 上启动检查器失败:地址已经 正在使用 [29/04/2020 14:56:36] 启动工作进程:节点 --inspect=5859 "/Users/ahmed/.nvm/versions/node/v12.16.2/lib/node_modules/azure-functions-core-tools/bin/workers/node/dist/src/nodejsWorker.js" --host 127.0.0.1 --port 53018 --workerId c12804a8-bb18-485c-95e0-c516c6fc4599 --requestId c93e0c56-cdf0-4360-869b-d6410005227f --grpcMaxMessageLength 134217728 [29/04/2020 14:56:36] Id=11411 的节点进程已启动 [29/04/2020 14:56:36] 在 127.0.0.1:5859 上启动检查器失败:地址已经 正在使用 [29/04/2020 14:56:36] 超过语言工作者重新启动重试 计算运行时:节点。关闭功能主机 [29/04/2020 14:56:36] 停止主机... [29/04/2020 14:56:36] 停止 JobHost [29/04/2020 14:56:36] 作业主机已停止 [29/04/2020 14:56:36] 主机 关机完成。 [29/04/2020 14:56:36] 主机重新启动。 [29/04/2020 14:56:36] 停止 JobHost [29/04/2020 14:56:36] 作业主机已停止

【问题讨论】:

【参考方案1】:

nodemon 要求您指定要观看的文件,否则它将检查 cwd 中的任何内容。您可以使用--watch 标志,即--watch dist/

【讨论】:

【参考方案2】:

经过更多调试后,我发现问题与我的 package.json 有关:

"scripts": 
    "watch": "tsc -w",
    "start:host": "func start --cors *",
    "start": "npm run start:host & npm run watch",
  ,

看起来 & nom run watch 出于某种原因正在杀死 macOS 中的进程。由于 npm run watch 即使在 Windows 上也从未真正工作过(总是必须在文件夹中单独执行 tsc -w 才能重新编译工作),所以我决定删除 eit。

如果有人可以解释原因或提出更好的解决方案,我对此非常开放,因为这是一个非常俗气的解决方案。

【讨论】:

以上是关于尝试连接调试器时 Azure Functions 崩溃,导致 nodemon 永久重新加载的主要内容,如果未能解决你的问题,请参考以下文章

Azure Functions 运行时 2 - 使用 SqlClient 的 SQL 连接

从 Mac 上的 Rider 附加到 Azure Functions 的调试器

Azure Functions .NET Core 中的 EF Core 2.0 连接字符串

Azure Functions 突然找不到入口点错误

Azure Functions - 使用 Azure Functions 的表存储触发器

如何在 Visual Studio 中使用 .NET 5(独立进程)调试 Azure Functions?