尝试连接调试器时 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 连接字符串