Jacky's blog Jacky's blog
首页
  • 编码专题
  • 深入浅出 Vite
  • 深入浅出 babel
  • 快速上手API
  • 深入浅出 react
  • Node

    • code-notebook
  • 状态管理

    • redux
  • 前端工程化

    • Wepack
  • React源码

    • React源码
  • 组件库封装

    • 组件库
  • 开发工具

    • Vscode 插件
  • 项目展示
  • 案例中心 (opens new window)
  • First Project
  • 基础算法题
  • 链表题
  • 动态规划
  • 双指针
  • 递归
  • 数据结构
  • 前端学习计划 (opens new window)
  • 技术随笔
  • 转载文章
  • 包管理工具
  • 前端学习周报
  • VSCode插件
  • Promise 专题
  • 函数技巧
  • React 专题
  • 配置文件

    • TSCONFIG-配置 (opens new window)
    • NGINX-配置 (opens new window)
    • 正则规则查询手册 (opens new window)
    • Lint 配置 (opens new window)
  • 教程

    • GIT-教程
    • NPM SCRIPTS-工作流 (opens new window)
    • DOCKER-教程 (opens new window)
    • LERNA-教程 (opens new window)
    • GIT-常用操作整理 (opens new window)
  • VSCode

    • LAUNCH.JSON (opens new window)
  • 指令

    • NPM 指令 (opens new window)
    • NVM 指令 (opens new window)
    • Nginx 指令 (opens new window)
    • YARN 指令 (opens new window)
    • PNPM 指令 (opens new window)
  • 库

    • FS-EXTRA 库 (opens new window)
    • NODE 库-PATH (opens new window)
  • 永远的神

    • 魔法师卡颂-自顶向下学 React 源码 (opens new window)
    • 全栈潇晨 (opens new window)
    • 博客-程序员山月-Daily (opens new window)
    • 淘系前端:冴羽 (opens new window)
  • 系列文章

    • 《图解HTTP》 (opens new window)
    • 《ES6标准入门》 (opens new window)
    • 《现代JavaScript教程》 (opens new window)
    • 《深入浅出Webpack》 (opens new window)
    • VSCode 插件系列:小茗同学 (opens new window)
    • JEST 教程 (opens new window)
    • 前端精读周刊:各种精读系列 (opens new window)
    • 一文吃透系列 (opens new window)
    • 图解 REACT 原理 (opens new window)
  • 实用网站

    • MDN (opens new window)
    • CAN I USE (opens new window)
    • TYPESCRIPT-ESLint-RULES (opens new window)
    • ESLint-RULES (opens new window)
    • FRONT-END TREND (opens new window)
    • NPM TREND (opens new window)
    • 在线分析 Node 依赖 (opens new window)
    • FIND NPM (opens new window)
    • CODE PEN (opens new window)
    • 印记中文 (opens new window)
    • TOOL.LU (opens new window)
    • 阮一峰-网道 (opens new window)
    • DIGITAL OCEAN (opens new window)
    • DEVDOCS.IO (opens new window)
    • JOI (opens new window)
  • 算法

    • 小浩算法 (opens new window)
    • LABULADONG 的算法小抄 (opens new window)
    • 力扣 SOLUTION (opens new window)
    • HACKER RANK (opens new window)
    • 代码随想录 (opens new window)
  • 博客系列

    • 美团大佬 (opens new window)
    • 蜡笔小伟 (opens new window)
    • 优秀博客1 (opens new window)
    • 优秀博客2-umi (opens new window)
    • 优质博客 (opens new window)
  • CSS

    • CSS-EASING 库 (opens new window)
    • ROUGH.JS (opens new window)
    • CSS 网站收集
    • UNOCSS (opens new window)
  • 前端

    • PROMISE (opens new window)
    • UNDERSCORE.JS (opens new window)
    • study with BGM (opens new window)
    • nginx【B站视频】 (opens new window)
    • 机器学习
    • Js基础
  • 掘金已购课程

    • 前端自动化测试精讲 (opens new window)
    • 深入浅出 Vite (opens new window)
    • 现代 Web 布局 (opens new window)
    • 前端算法与数据结构 (opens new window)
    • 基于 Vite 的 SSG 框架开发实战 (opens new window)
    • SSR 实战:官网开发指南 (opens new window)
    • WebGL 入门与实践 (opens new window)
    • 玩转 CSS 的艺术之美 (opens new window)
    • 前端调试通关秘籍 (opens new window)
    • React 进阶实践指南 (opens new window)
    • TypeScript 全面进阶指南 (opens new window)
    • 前端缓存技术与方案解析 (opens new window)
    • npm scripts 前端工作流 (opens new window)
    • Webpack5 核心原理与应用实践 (opens new window)
  • 购物车

    • 张鑫旭-技术写作指南 (opens new window)
    • 深入剖析 Node.js 底层原理 (opens new window)
    • 前端开发者的现代 C++ 课 (opens new window)
    • 从前端到全栈 (opens new window)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Jacky Wang

行到水穷处,坐看云起时
首页
  • 编码专题
  • 深入浅出 Vite
  • 深入浅出 babel
  • 快速上手API
  • 深入浅出 react
  • Node

    • code-notebook
  • 状态管理

    • redux
  • 前端工程化

    • Wepack
  • React源码

    • React源码
  • 组件库封装

    • 组件库
  • 开发工具

    • Vscode 插件
  • 项目展示
  • 案例中心 (opens new window)
  • First Project
  • 基础算法题
  • 链表题
  • 动态规划
  • 双指针
  • 递归
  • 数据结构
  • 前端学习计划 (opens new window)
  • 技术随笔
  • 转载文章
  • 包管理工具
  • 前端学习周报
  • VSCode插件
  • Promise 专题
  • 函数技巧
  • React 专题
  • 配置文件

    • TSCONFIG-配置 (opens new window)
    • NGINX-配置 (opens new window)
    • 正则规则查询手册 (opens new window)
    • Lint 配置 (opens new window)
  • 教程

    • GIT-教程
    • NPM SCRIPTS-工作流 (opens new window)
    • DOCKER-教程 (opens new window)
    • LERNA-教程 (opens new window)
    • GIT-常用操作整理 (opens new window)
  • VSCode

    • LAUNCH.JSON (opens new window)
  • 指令

    • NPM 指令 (opens new window)
    • NVM 指令 (opens new window)
    • Nginx 指令 (opens new window)
    • YARN 指令 (opens new window)
    • PNPM 指令 (opens new window)
  • 库

    • FS-EXTRA 库 (opens new window)
    • NODE 库-PATH (opens new window)
  • 永远的神

    • 魔法师卡颂-自顶向下学 React 源码 (opens new window)
    • 全栈潇晨 (opens new window)
    • 博客-程序员山月-Daily (opens new window)
    • 淘系前端:冴羽 (opens new window)
  • 系列文章

    • 《图解HTTP》 (opens new window)
    • 《ES6标准入门》 (opens new window)
    • 《现代JavaScript教程》 (opens new window)
    • 《深入浅出Webpack》 (opens new window)
    • VSCode 插件系列:小茗同学 (opens new window)
    • JEST 教程 (opens new window)
    • 前端精读周刊:各种精读系列 (opens new window)
    • 一文吃透系列 (opens new window)
    • 图解 REACT 原理 (opens new window)
  • 实用网站

    • MDN (opens new window)
    • CAN I USE (opens new window)
    • TYPESCRIPT-ESLint-RULES (opens new window)
    • ESLint-RULES (opens new window)
    • FRONT-END TREND (opens new window)
    • NPM TREND (opens new window)
    • 在线分析 Node 依赖 (opens new window)
    • FIND NPM (opens new window)
    • CODE PEN (opens new window)
    • 印记中文 (opens new window)
    • TOOL.LU (opens new window)
    • 阮一峰-网道 (opens new window)
    • DIGITAL OCEAN (opens new window)
    • DEVDOCS.IO (opens new window)
    • JOI (opens new window)
  • 算法

    • 小浩算法 (opens new window)
    • LABULADONG 的算法小抄 (opens new window)
    • 力扣 SOLUTION (opens new window)
    • HACKER RANK (opens new window)
    • 代码随想录 (opens new window)
  • 博客系列

    • 美团大佬 (opens new window)
    • 蜡笔小伟 (opens new window)
    • 优秀博客1 (opens new window)
    • 优秀博客2-umi (opens new window)
    • 优质博客 (opens new window)
  • CSS

    • CSS-EASING 库 (opens new window)
    • ROUGH.JS (opens new window)
    • CSS 网站收集
    • UNOCSS (opens new window)
  • 前端

    • PROMISE (opens new window)
    • UNDERSCORE.JS (opens new window)
    • study with BGM (opens new window)
    • nginx【B站视频】 (opens new window)
    • 机器学习
    • Js基础
  • 掘金已购课程

    • 前端自动化测试精讲 (opens new window)
    • 深入浅出 Vite (opens new window)
    • 现代 Web 布局 (opens new window)
    • 前端算法与数据结构 (opens new window)
    • 基于 Vite 的 SSG 框架开发实战 (opens new window)
    • SSR 实战:官网开发指南 (opens new window)
    • WebGL 入门与实践 (opens new window)
    • 玩转 CSS 的艺术之美 (opens new window)
    • 前端调试通关秘籍 (opens new window)
    • React 进阶实践指南 (opens new window)
    • TypeScript 全面进阶指南 (opens new window)
    • 前端缓存技术与方案解析 (opens new window)
    • npm scripts 前端工作流 (opens new window)
    • Webpack5 核心原理与应用实践 (opens new window)
  • 购物车

    • 张鑫旭-技术写作指南 (opens new window)
    • 深入剖析 Node.js 底层原理 (opens new window)
    • 前端开发者的现代 C++ 课 (opens new window)
    • 从前端到全栈 (opens new window)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Node

  • VSCode插件

    • 如何打包 VSCode IDE(Mac)
    • 如何查看 VSCode 官网
    • VSCode目录结构分析
    • VSCode插件-yo脚手架创建
    • VSCode插件-debug
    • VSCode插件-TreeView
    • VSCode插件-WebView
    • VSCode插件-i18n
    • VSCode插件-Color Theme
    • VSCode插件-Node进程交互
    • VSCode 插件-Edge_devtools 源码
    • VSCode插件-使用 gulp 打包插件
    • VSCode-Tasks模式
      • 0.前言
      • 1.如何启动VSCode Task
      • 2.自定义 tasks 编写
        • 2.1 自定义 shell 脚本
        • 2.2 task.json
        • 2.3 处理 command 中存在的空格
        • 2.4 复合任务的写法
        • 2.5 快捷键设置
      • 3.输出控制
      • 4.参考
    • VSCode插件-存储方式
    • VSCode插件-开发 code-snippets 插件
  • Webpack

  • Redux

  • React源码

  • 组件库

  • React高阶系列

  • UMI插件

  • 前端工程化

  • 单元测试vitest

  • 重点技术
  • VSCode插件
wangjiasheng
2022-04-26
目录

VSCode-Tasks模式

# 0.前言

本篇博客介绍的主要内容是:launch.json 以及 task.json 的使用。

在项目中经常遇到执行一些自动化任务(automate tasks) ,如校验(linting)、构建(build)、打包(package)、测试、发布等行为。

常用的一些工具有:TypeScript、ESLint、Gulp、Make、MSBuild 等等。

这些工具一般情况下是通过在命令行中敲击指令执行,而 VSCode 提供一种 Task 模式可以将各个自动化流程步骤以配置的形式串联起来。

# 1.如何启动VSCode Task

菜单栏【终端】 Termianl - 启动任务

VSCode 会自动检测当前系统下的任务,如 Gulp,Grunt,Jake 和 NPM 。

  • 如,通过读取 package.json 中的 scripts 获取 npm task 。
  • 如,通过读取 gulpfile.js 文件获取 gulp task。

当然也可以在 .vscode 文件夹下创建 task.json 文件,进行自定义 task 的编写。

# 2.自定义 tasks 编写

并非所有的 task或 scripts 在当前的 workspace 会被自动检测,有时需定义自己的 task 任务。

# 2.1 自定义 shell 脚本

举例:如何通过编写 VSCode task ,达到在终端中运行 .sh 可执行文件同等效果:

./scripts/test.sh
1

在 .vscode 文件夹下新建 task.json 文件:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Run tests",
      "type": "shell",
      "command": "./scripts/test.sh",
      "windows": {
        "command": ".\\scripts\\test.cmd"
      },
      "group": "test",
      "presentation": {
        "reveal": "always",
        "panel": "new"
      }
    }
  ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

以上属性过多,想要将代码跑起来,只需两个条件:

  1. 当前命令是在什么环境? 答:shell
  2. 由于操作系统间的差异,command 略有不同:
    • Mac 直接指定 command 字段。
    • windows 则需要配置在 windows:{"command":xxxx} 字段上。

除了type 和 command 两个字段外,完整可配置的字段见下节。

# 2.2 task.json

task 具有的属性如下:

  • label:在交互界面中的显示文本,简单来说就是一个 task 的名称。
  • type:当前任务的类型,一般可选:shell 和 process。
    • shell:命令会被解析为一个shell命令,即可以被运行在bash/cmd/PowerShell等shell 脚本解释器中。
    • process:直接就是一个进程。
  • command 以及 windows 就是命令的主体。
  • group:可以对 task 进行分类,这一点可以在唤醒 task 的 Command Palette 可见。
  • presentation:控制命令的输出行为。
  • options:可以覆盖一些内部的变量,常用的有:
    • cwd:即 current working directory ,可重定向工作目录。
    • env:环境变量。
    • shell:覆盖当前系统默认的 shell 解释器。
  • runOptions:定义一个 task 是何时或以何种方式被运行的。

# 2.3 处理 command 中存在的空格

在 cmd 或者 shell 中运行 ls 'folder with spaces' 这类命令时,不能写成如下形式:

{
  "type": "shell",
  "command": "dir 'folder with spaces'"
}
1
2
3
4

因为,此时 dir 后面接的是一个字符串,而非一个带空格的文件路径,需要修正下引号的解析方式,一般有三种模式:escape 、weak、strong。

正确的写法为:

{
  "label": "dir",
  "type": "shell",
  "command": "dir",
  "args": [
    {
      "value": "folder with spaces",
      "quoting": "escape"
    }
  ]
}
1
2
3
4
5
6
7
8
9
10
11

# 2.4 复合任务的写法

当存在多个 task ,并且希望以某种顺序执行时,可以添加一个新的 task ,在这个新的 task 通过 dependsOn 指定任务的串联顺序,以及dependsOrder 控制是串行还是并行。

  • 只存在dependsOn 字段:并行模式,会同时打开多个 terminals。
  • 指定dependsOrder:"sequence" : 串行模式,串行顺序取决于 dependsOn 数组的顺序。
{
  "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"]
    }
  ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 2.5 快捷键设置

通过编写 keybindings.json 可以为每个 task 设置一个快捷键。

{
  "key": "ctrl+h",
  "command": "workbench.action.tasks.runTask",
  "args": "这里填写task的label即可"
}
1
2
3
4
5

点击左下角齿轮 -> 键盘快捷方式->点击右上角转为文本图标,即可唤起 keybindings.json 文件。

# 3.输出控制

以上,介绍了一个 task 是如何编写的,对于指令执行后,以一种形式输出到页面上,也是一个比较常见的需求。

通过设置 isBackground 属性可以始终让 task 运行在后台。

(开发暂时涉及不到此部分,待补充....)

# 4.参考

  1. task.json 以及 launch.json 中的 Built-in 属性 (opens new window)
  2. task模式【官方】 (opens new window)
编辑 (opens new window)
上次更新: 2023/06/17, 10:06:00
VSCode插件-使用 gulp 打包插件
VSCode插件-存储方式

← VSCode插件-使用 gulp 打包插件 VSCode插件-存储方式→

最近更新
01
如何理解浏览器的 user agent 用户代理的含义?
11-05
02
浏览器事件循环机制
10-31
03
浏览器页面渲染机制【2023】
10-15
更多文章>
Theme by Vdoing | Copyright © 2020-2023
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式