在VS Code中打开项目时自动启动应用程序?

18

打开项目时,是否可以让VS Code运行多个命令并启动一个或多个应用程序?

我的理想情况是:

  1. 在VS Code中打开项目
  2. 运行特定的ngrok命令
  3. 启动Mongo
  4. 启动一个NPM脚本

目标是在VS Code中打开项目后立即开始工作,而不是运行多个设置步骤。


1
https://code.visualstudio.com/docs/editor/tasks#_custom-tasks - Hans Passant
已经对此进行了一些测试,看起来这是一个强有力的选择,可以卸载大约80%的开启/启动项目的负担,虽然不像自定义扩展选项那样完全被动,但似乎具有潜在的能力。暂时可能会选择这个选项。同时也在等待Matt的反馈,看是否有一个样板扩展程序可以启用扩展事件并运行。 - PaulIsLoud
@HansPassant,这最终是我采取的方法,并且在过去一周中一直表现出色。如果您将您的评论添加为答案,我会接受它。 - PaulIsLoud
这只是一堆链接,分享一下你在自己的帖子中实际利用该功能所做的事情。并将其标记为答案,它应该是正确的。 - Hans Passant
3个回答

19
将以下内容添加到项目文件夹中的.vscode/tasks.json中,以便在VS Code中打开文件夹时运行脚本或执行命令:
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Launch app", // Name of task
      "type": "shell",
      "command": "npm start", // Enter your command here
      "group": "none",
      "presentation": {
        "reveal": "always",
        "panel": "new"
      },
      "runOptions": {
        "runOn": "folderOpen"
      }
    }
  ]
}

接下来需要启用自动任务:

  1. 按下 CTRL + shift + P,然后键入 > Tasks: Manage Automatic Tasks in Folder
  2. 按 Enter 键,然后选择“允许在文件夹中使用自动任务”。

在该文件夹中下次打开 VS Code 时将执行您的任务。


我该如何找到这个? - magic gum
2
在您的项目根目录中有一个名为.vscode的文件夹,请创建一个名为tasks.json的文件,并粘贴上面的JSON。 - Coco

5

2019年8月12日更新:

@Andrew Wolfe在评论中提出了一个很好的观点,询问工作区激活事件。随着我在未来项目中实现类似配置,我可能会朝这个方向发展。

原始答案:

最终使用了@HansPassant的解决方案:https://code.visualstudio.com/docs/editor/tasks#_custom-tasks

所以,我的.vscode/tasks.json文件类似于以下内容:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Launch Ngrok",
      "type": "shell",
      "command": "ngrok http -subdomain=<SUBDOMAIN> <PORT>",
      "windows": {
        "command": "ngrok http -subdomain=<SUBDOMAIN> <PORT>"
      },
      "group": "none",
      "presentation": {
        "reveal": "always",
        "panel": "new"
      }
    },
    {
      "label": "Launch App",
      "type": "shell",
      "command": "npm start",
      "windows": {
        "command": "npm start"
      },
      "group": "none",
      "presentation": {
        "reveal": "always",
        "panel": "new"
      }
    }
  ]
}

我还将我的项目命名为工作区,这样我在循环浏览打开的项目时可以快速识别它。

对于每个项目,在.vscode文件夹中添加了类似的tasks.json文件,然后只需使用命令面板启动每个任务,每次想要处理某些事情时就可以启动它们。

每个应用程序都有不同的依赖要求,需要同时运行一些依赖项,有些是通过本地节点启动的,有些是在远程服务器上启动的,有些需要始终运行TypeScript,然后通过Rsync到远程开发服务器(并将Rsync任务绑定到cmd+option+s以进行快速更新,更多信息请参见此处)。

这个解决方案使得所有以上操作都变得轻松,并且不必每次记住每个项目的魔术咒语来启动它。


那你没有尝试过一些工作区激活事件吗? - Andrew Wolfe
对于当前项目,我觉得没有必要深入研究这个问题,但是工作区激活事件看起来很不错。我会在我的回答中提到它们。 - PaulIsLoud

2
是的,扩展可以访问节点,因此它们可以运行几乎任何脚本。您还可以使用VS Code扩展API在VS Code终端中启动shell脚本。使用激活事件来在用户加载工作区时启动扩展。其中workspaceContains可能是最适合的选项。

谢谢Matt。看了一下这个和自定义任务选项。看起来如果要追求这个,我至少需要制作一个基本的样板扩展,然后使用你提到的激活事件自定义package.json文件?如果是这样,似乎自定义扩展肯定可以完成工作,并且可能比自定义任务更被动,但需要维护更多的代码,可能需要更多的关注/开发时间,而我现在无法给予它。您知道相对较小的方法来启动并运行仅执行您所描述的基本扩展吗? - PaulIsLoud

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接