如何在VS代码中使用tasks.json正确延迟Node/Express API的加载

bprjcwpo  于 2023-01-08  发布在  Node.js
关注(0)|答案(1)|浏览(164)
    • bounty将于明天到期**。此问题的答案可获得+200声望奖励。Tsar Bomba正在寻找规范答案

我在一个VS Code示例中调试了一个微服务项目,我使用launch.json中的Compounds来启动/调试。
有一个"元数据"服务,所有其他服务都依赖于它,因此它需要在任何其他服务启动之前运行。
我已经解决了这个问题,在过去的10个月里,它对我来说工作得很顺利,但最近它自发地坏了。
这是我找到的。

  • 启动. json:*

化合物:

{
    "name": "API-only",
    "stopAll": true,
    "configurations": [
        "Metadata API",
        "Auth API"
    ]
}

......以及组合中的各个API配置:

{
    "type": "node",
    "request": "launch",
    "name": "Metadata API",
    "program": "${workspaceFolder}/metadata-api/bin/www",
    "envFile": "${workspaceFolder}/metadata-api/.env",
    "skipFiles": [
        "<node_internals>/**/*.js",
        "${workspaceRoot}/node_modules/**/*.js"
    ],
    "presentation": {
        "hidden": false,
        "group": "apis",
        "order": 1
    }
},
{
    "type": "node",
    "request": "launch",
    "name": "Auth API",
    "program": "${workspaceFolder}/auth-api/bin/www",
    "envFile": "${workspaceFolder}/auth-api/.env",
    "skipFiles": [
        "<node_internals>/**/*.js",
        "${workspaceRoot}/node_modules/**/*.js"
    ],
    "preLaunchTask": "Preload Delay",
    "presentation": {
        "hidden": true,
        "group": "",
        "order": 1
    }
}

你可以看到"preLaunchTask"是在Auth API中设置的,而不是在Metadata API中设置的。

  • 任务. json *:
{

    "version": "2.0.0",
    "tasks": [
        {
            "label": "Preload Delay",
            "type": "shell",
            "command": "sleep 3",
            "windows": {
                "command": "ping 127.0.0.1 -n 3 > nul"
            },
            "group": "none",
            "presentation": {
                "reveal": "silent",
                "panel": "shared",
                "revealProblems": "onProblem"
            }
        }
    ]
}

我以前可以在VSC调用堆栈面板中先看到元数据加载,然后在3秒后看到Auth。现在,它们都立即出现,而且经常出现,Auth失败是因为它不再考虑等待元数据先加载的延迟,所以它可以调用它并加载自己。
当然,如果我先手动启动Metadata,或者手动暂停Auth以等待Metadata加载,它每次都能正常工作。
这些配置在过去的10个月里都没有改变,所以我怀疑最近的VSC更新已经破坏了这个配置?还有别的方法吗?我没有找到太多可以继续下去的东西。

vhmi4jdf

vhmi4jdf1#

我浏览了VS代码文档,发现tasks.json有两个问题。
1-您需要为上面提到的场景分别创建两个不同的任务,例如

{
  "version": "2.0.0",
  "tasks": [{
      "label": "Client Build",
      "command": "gulp",
      "args": ["build"],
      "options": {
        "cwd": "${workspaceFolder}/client"
      }
    },
    {
      "label": "Server Build",
      "command": "gulp",
      "args": ["build"],
      "options": {
        "cwd": "${workspaceFolder}/server"
      }
    },
    {
      "label": "Build",
      "dependsOn": ["Client Build", "Server Build"]
    }
  ]
}

2-您需要设置“dependsOrder”:“排序”并配置依赖项,例如

{
  "label": "One",
  "type": "shell",
  "command": "echo Hello ",
  "dependsOrder": "sequence",
  "dependsOn": ["Two", "Three"]
}

了解更多关于复合任务的信息?祝你好运!

相关问题