VScode任務(wù)配置(task.json與launch.json)及異常詳解
簡(jiǎn)介
vscode非常強(qiáng)大,有很多可以自定義的東西,但是也不容易上手,例如搭建一個(gè)新環(huán)境是如何配置運(yùn)行程序。
本篇文章就將詳細(xì)說(shuō)明vscode的如何配置任務(wù)來(lái)完成編譯等操作,如何配置launch來(lái)debug。
- tasks.json:配置和管理自動(dòng)化任務(wù),如編譯、構(gòu)建、運(yùn)行腳本…
- launch.json:配置調(diào)試器,定義調(diào)試會(huì)話的啟動(dòng)和運(yùn)行參數(shù)
task
可以配置功能
- 編譯代碼:用javac、gcc、tsc編譯工具編譯代碼
- 執(zhí)行腳本:執(zhí)行shell、Python、bat腳本
- 構(gòu)建項(xiàng)目:用Maven、Make、Gradle等構(gòu)建工具構(gòu)建腳本
- 其他任務(wù):清理生成文件、打包、上傳…
task配置的是命令,所以它可以非常靈活,可以看作是一個(gè)執(zhí)行腳本的快捷方式。
參數(shù)說(shuō)明
參數(shù) | 說(shuō)明 |
---|---|
label | 任務(wù)名稱,標(biāo)識(shí),以便于執(zhí)行的時(shí)候知道是哪一個(gè)任務(wù) |
type | 任務(wù)類型,shell、process、typescript,shell通常是腳本如python、bat、各種命令,process作為獨(dú)立的進(jìn)程運(yùn)行 |
command | 執(zhí)行的命令,gcc、javac、python、ps、echo等命令 |
args | 命令的參數(shù),數(shù)組 |
group | 任務(wù)分組,build(構(gòu)建)、test(測(cè)試) |
presentation | 控制任務(wù)輸出的呈現(xiàn)方式,例如是否顯示在終端中,是否清除之前的輸出等 |
problemMatcher | 配置錯(cuò)誤和警告的匹配器,用于從任務(wù)輸出中解析錯(cuò)誤和警告,vscode內(nèi)置g c c 、 gcc、gcc、eslint |
options | 任務(wù)執(zhí)行的選項(xiàng),環(huán)境變量、當(dāng)前工作目錄等 |
dependsOn | 任務(wù)依賴,數(shù)組[“task-a”,“task-c”] 任務(wù)運(yùn)行前先執(zhí)行依賴任務(wù) |
dependsOrder | 依賴執(zhí)行順序,sequence按照"dependsOn任務(wù)列表順序執(zhí)行 |
shell | 配置執(zhí)行shell終端,cmd、git,如在Windows下不能執(zhí)行shell腳本,可以配置git來(lái)執(zhí)行 |
type的一個(gè)作用就可以根據(jù)文件匹配,例如在ts文件中按F5進(jìn)行debug,vscode就知道去找type支持ts的task,例如typescript。
默認(rèn)會(huì)去找group配置為kind為build,isDefault為true的task,如果有多個(gè),就會(huì)讓手動(dòng)選擇。
presentation參數(shù):
- echo: 是否輸出執(zhí)行的command,默認(rèn)ture
- reveal: 輸出面板控制,never、silent、always, 是否在用戶界面顯示輸出,默認(rèn)always
- focus:顯示任務(wù)輸出的面板是否處于焦點(diǎn)狀態(tài),默認(rèn)false
- panel: 面板控制,shared默認(rèn),共享; dedicated專用;new每次任務(wù)創(chuàng)建新面板
- “showReuseMessage”: true-顯示重用消息
- “clear”: false-不清除之前的輸出
task外部程序示例
task中也可以單獨(dú)指定執(zhí)行shell的終端
{ "version": "2.0.0", "tasks": [ { "label": "task-測(cè)試shell", "type": "shell", "group": { "kind": "build", "isDefault": true, }, "command": "ls", "args": [ "-al" ], "options": { "cwd": "${workspaceFolder}", "shell": { "executable": "E:\\tool\\Git\\bin\\bash.exe", "args": [ "-c" ] } } } ] }
前面介紹了task可以通過(guò)F5調(diào)試的方式匹配執(zhí)行。
還可以Ctrl+F8手動(dòng)執(zhí)行。
還可以在Terminal菜單選擇Run Task來(lái)執(zhí)行。
task輸入?yún)?shù)示例
task也可以交互輸入?yún)?shù),又2中方式:
- 一種是配置選項(xiàng),運(yùn)行是下拉選擇pickString
- 一種是手動(dòng)輸入,promptString
pickString參數(shù):
- description:變量說(shuō)明
- options:可選項(xiàng)數(shù)組
- default:默認(rèn)值。它必須在options中
promptString參數(shù):
- description:變量說(shuō)明
- default:默認(rèn)值
- password:是否是密碼,如果是輸入用*代替
{ "version": "2.0.0", "tasks": [ { "label": "task-測(cè)試變量輸入", "type": "shell", "windows": { //windows下執(zhí)行操作 "command": "echo", "args": [ "下拉參數(shù):${input:manual_pick}", "輸入?yún)?shù):${input:manual_input}" ] }, "group": { "kind": "build", "isDefault": true, }, } ], "inputs": [ { "id": "manual_pick", "type": "pickString", //"輸入?yún)?shù)類型: 挑選預(yù)設(shè)的選項(xiàng)", "default": "選項(xiàng)B", "options": [ "選項(xiàng)A", "選項(xiàng)B", "選項(xiàng)C", "選項(xiàng)D" ], "description": "task輸入?yún)?shù)預(yù)設(shè),執(zhí)行時(shí)下拉選擇", }, { "id": "manual_input", "type": "promptString", // 輸入?yún)?shù)類型: 直接輸入的字符串 "password": false, // 如果是true,表示密碼用*表示 "default": "你干嘛啊!", // 默認(rèn)字符串 "description": "task參數(shù)手動(dòng)輸入", }, ], }
task內(nèi)置參數(shù)示例
{ "version": "2.0.0", "tasks": [ { "label": "task-測(cè)試vscode內(nèi)置變量", "type": "shell", "command": "print.sh", "args": [ "workspaceFolder=${workspaceFolder}", "workspaceFolderBasename=${workspaceFolderBasename}", "file=${file}", "fileWorkspaceFolder=${fileWorkspaceFolder}", "relativeFile=${relativeFile}", "relativeFileDirname=${relativeFileDirname}", "fileBasename=${fileBasename}", "fileBasenameNoExtension=${fileBasenameNoExtension}", "fileExtname=${fileExtname}", "fileDirname=${fileDirname}", "fileDirnameBasename=${fileDirnameBasename}" ], "options": { "shell": { "executable": "E:\\tool\\Git\\bin\\sh.exe", "args": [ "-i" ] } }, "presentation": { "echo": true, // 顯示命令 "reveal": "always", // 顯示輸出面板 "focus": false, // 不自動(dòng)聚焦輸出面板 "panel": "new", // 共享輸出面板 "showReuseMessage": true, // 顯示重用消息 "clear": false // 不清除之前的輸出 }, "group": { "kind": "build", "isDefault": true, }, } ] }
for arg in "$@"; do echo "$arg" done
更多參數(shù)說(shuō)明請(qǐng)查看官方文檔
任務(wù)依賴關(guān)系
我們把前面整合起來(lái),來(lái)看一下任務(wù)的依賴設(shè)置:
{ "version": "2.0.0", "tasks": [ { "label": "task-運(yùn)行腳本", "type": "shell", "options": { "cwd": "${workspaceFolder}", }, "windows": { "command": "base.bat", "args": [ "參數(shù)1", "參數(shù)2" ], }, "group": { "kind": "build", "isDefault": true, }, "dependsOrder": "sequence", "dependsOn": [ "task-測(cè)試變量輸入", "task-測(cè)試shell", "task-測(cè)試vscode內(nèi)置變量" ] }, { "label": "task-測(cè)試變量輸入", "type": "shell", "group": "build", "windows": { //windows下執(zhí)行操作 "command": "echo", "args": [ "下拉參數(shù):${input:manual_pick}", "輸入?yún)?shù):${input:manual_input}" ] } }, { "label": "task-測(cè)試shell", "type": "shell", "group": "build", "command": "ls", "args": [ "-al" ], "options": { "cwd": "${workspaceFolder}", "shell": { "executable": "E:\\tool\\Git\\bin\\bash.exe", "args": [ "-c" ] } } }, { "label": "task-測(cè)試vscode內(nèi)置變量", "type": "shell", "command": "print.sh", "args": [ "workspaceFolder=${workspaceFolder}", "workspaceFolderBasename=${workspaceFolderBasename}", "file=${file}", "fileWorkspaceFolder=${fileWorkspaceFolder}", "relativeFile=${relativeFile}", "relativeFileDirname=${relativeFileDirname}", "fileBasename=${fileBasename}", "fileBasenameNoExtension=${fileBasenameNoExtension}", "fileExtname=${fileExtname}", "fileDirname=${fileDirname}", "fileDirnameBasename=${fileDirnameBasename}" ], "options": { "shell": { "executable": "E:\\tool\\Git\\bin\\sh.exe", "args": [ "-i" ] } } } ], "inputs": [ { "id": "manual_pick", "type": "pickString", //"輸入?yún)?shù)類型: 挑選預(yù)設(shè)的選項(xiàng)", "default": "選項(xiàng)B", "options": [ "選項(xiàng)A", "選項(xiàng)B", "選項(xiàng)C", "選項(xiàng)D" ], "description": "task輸入?yún)?shù)預(yù)設(shè),執(zhí)行時(shí)下拉選擇", }, { "id": "manual_input", "type": "promptString", // 輸入?yún)?shù)類型: 直接輸入的字符串 "password": false, // 如果是true,表示密碼用*表示 "default": "你干嘛啊!", // 默認(rèn)字符串 "description": "task參數(shù)手動(dòng)輸入", }, ], }
@echo off echo "打印所有命令行參數(shù)" for %%i in (%*) do ( echo %%i )
launch
launch用來(lái)配置debug,常用參數(shù):
- name: 配置名稱,便于區(qū)分就可以
- type: 調(diào)試器類型,python、cppdbg、node、java
- request: 調(diào)試請(qǐng)求類型,launch、attach
- program: 要調(diào)試的程序路徑或文件
- args: 傳遞給程序的命令行參數(shù),數(shù)組形式
- cwd: 當(dāng)前工作目錄
- env: 環(huán)境變量設(shè)置
- sourceMaps: 是否啟用源映射(JavaScript、TypeScript)
- preLaunchTask: 調(diào)試前要執(zhí)行的任務(wù),通常是編譯任務(wù)
- postDebugTask: 調(diào)試結(jié)束后要執(zhí)行的任務(wù)
- stopOnEntry: 是否在程序入口處停止。
- console: 控制臺(tái)類型integratedTerminal、externalTerminal、internalConsole
{ "version": "0.2.0", "configurations": [ { "name": "debug-Go程序", // 名稱可以在debug面板中看到區(qū)分 "type": "go", // 定義調(diào)試器的類型 "request": "launch", "program": "${file}", // 待調(diào)試的可執(zhí)行程序的路徑 "args": [], // 設(shè)置可執(zhí)行程序所需要的參數(shù) "stopAtEntry": false, // 程序不會(huì)再入口點(diǎn)處停止(即main函數(shù)),從頭運(yùn)行到結(jié)束或設(shè)置的斷點(diǎn)處 "cwd": "${workspaceFolder}", // 設(shè)置當(dāng)前的工作目錄 "environment": [], // 設(shè)置調(diào)試的環(huán)境變量 "externalConsole": false, // 不使用外部控制臺(tái),調(diào)試輸出將顯示在內(nèi)置的調(diào)試控制臺(tái)中 "preLaunchTask": "go-build" // tasks.json創(chuàng)建的任務(wù)中的label匹配 } ] }
配置TyepScript的task和launch
首先我們來(lái)看一下完整的目錄結(jié)構(gòu):
task.json
{ "version": "2.0.0", "tasks": [ { "label": "編譯TS項(xiàng)目", "type": "typescript", "tsconfig": "tsconfig.json", "problemMatcher": [ "$tsc" ], "group": { "kind": "build", "isDefault": true } } ] }
注意type是typescript,特殊的,可以指定任務(wù)配置文件
tsconfig.json
這個(gè)是typescript的配置文件。
{ "compilerOptions": { "target": "ES2016", "module": "CommonJS", "outDir": "dist", "sourceMap": true } }
outDir是編譯之后的JS文件目錄。
launch.json
{ "version": "0.2.0", "configurations": [ { "name": "調(diào)試當(dāng)前TS", "type": "node", "request": "launch", "skipFiles": [ "<node_internals>/**" ], "program": "${file}", "preLaunchTask": "編譯TS項(xiàng)目", "outFiles": [ "${workspaceFolder}/dist/**/*.js" ] } ] }
type是node,program要執(zhí)行的文件,這里配置的是當(dāng)前文件,可以配置為固定路徑的入口文件。
outFiles配置的是編譯之后的JS文件,就是要執(zhí)行的文件,如果不配或者找不到,執(zhí)行的是program的ts文件,有問(wèn)題,所以一定要檢查是否正確。
Debug
我們可以在debug中看到launch的name,終端中的task tab中看到task的label。
代碼文件
入口文件main.ts
// import tarray = require("./ts-array"); // import amap = require('./ts-map'); import { getArray } from "./ts-array"; import * as amap from "./ts-map"; // let array: string[] = tarray.getArray(); let array: string[] = getArray(); array.forEach(function (value) { console.log(value); }) amap.testMapIter(); amap.testMapBaseFun();
測(cè)試文件:
export {getArray} function getArray(): string[] { return new Array("Java", "Go", "C++", "Rust", "Python", "C", "PHP", "SQL", "TypeScript"); } function testArrayBase() { let array: string[]; array = getArray(); console.log(array[0]); console.log(array[1]); let nums: number[] = [1, 2, 3, 4] console.log(nums[0]); console.log(nums[1]); console.log(nums[2]); console.log(nums[3]); } function testArrayLength() { let nums = new Array(4); for (let i = 0; i < nums.length; i++) { nums[i] = i * 2; } for (let i in nums) { console.log(nums[i]); } var language = getArray(); for (var i = 0; i < language.length; i++) { console.log(language[i]); } } testArrayBase(); testArrayLength();
export {testMapBaseFun,testMapIter} function testMapIter() { let map = new Map(); map.set("Java", 1); map.set("C++", 2); map.set("Go", 3); // 迭代 Map 中的 key for (let key of map.keys()) { console.log(key); } // 迭代 Map 中的 value for (let value of map.values()) { console.log(value); } // 迭代 Map 中的 key => value for (let entry of map.entries()) { console.log(entry[0], entry[1]); } // 使用對(duì)象解析 for (let [key, value] of map) { console.log(key, value); } } function testMapBaseFun() { let map = new Map(); map.set("Java", 1); map.set("C++", 2); map.set("Go", 3); // 獲取鍵對(duì)應(yīng)的值 console.log(map.get("Go")); // 判斷 Map 中是否包含鍵對(duì)應(yīng)的值 console.log(map.has("Python")); console.log(map.has("Java")); // 返回 Map 對(duì)象鍵/值對(duì)的數(shù)量 console.log(map.size); // 刪除元素,刪除成功返回true console.log(map.delete("Go")); console.log(map); // 移除 Map 對(duì)象的所有鍵/值對(duì) map.clear(); console.log(map); } testMapIter(); testMapBaseFun();
異常情況
powershell不能用的情況:
Executing task: tsc -p d:\project\front\ts\tsconfig.json tsc : 無(wú)法加載文件 E:\language\nodejs16\node_global\tsc.ps1,因?yàn)樵诖讼到y(tǒng)上禁止運(yùn)行腳本。 有關(guān)詳細(xì)信息,請(qǐng)參閱 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1 + tsc -p d:\project\front\ts\tsconfig.json + ~~~ + CategoryInfo : SecurityError: (:) [],PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess The terminal process "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -Command tsc -p d:\project\front\ts\tsconfig.json" terminated with exit code: 1. Terminal will be reused by tasks, press any key to close it.
我們?cè)?a href="/program/341102kb6.htm" target="_blank">vscode終端不能打開(kāi)中已經(jīng)有過(guò)一點(diǎn)介紹。
我們知道默認(rèn)使用的終端也是settings.json中配置:
"terminal.integrated.defaultProfile.windows": "Command Prompt"
總結(jié)
到此這篇關(guān)于VScode任務(wù)配置(task.json與launch.json)及異常的文章就介紹到這了,更多相關(guān)VScode任務(wù)配置task.json與launch.json內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解window啟動(dòng)webpack打包的三種方法
這篇文章主要介紹了window啟動(dòng)webpack打包的三種方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11git版本回退_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
Git的版本回退速度非常快,因?yàn)镚it在內(nèi)部有個(gè)指向當(dāng)前版本的HEAD指針。接下來(lái)通過(guò)本文給大家分享git版本回退問(wèn)題,感興趣的朋友一起看看吧2017-08-08UTC時(shí)間、GMT時(shí)間、本地時(shí)間、Unix時(shí)間戳的具體使用
本文主要介紹了UTC時(shí)間、GMT時(shí)間、本地時(shí)間、Unix時(shí)間戳的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09玩轉(zhuǎn)markdown 分享幾個(gè)需要用到的工具
markdown是一個(gè)面向?qū)懽鞯恼Z(yǔ)法引擎,markdown的最終目的都是解析成html用于網(wǎng)頁(yè)瀏覽,所以它兼容html語(yǔ)法,即你可以在 markdown文檔中使用原生的html標(biāo)簽2016-08-08K8ssandra入門教程之Linux上部署K8ssandra到Kubernetes的過(guò)程
K8ssandra不僅幫助我們可以快速可靠地在Kubernetes上部署Cassandra,同時(shí)提供了許多組件,如監(jiān)控、備份、同步、訪問(wèn)等,這篇文章給大家介紹K8ssandra入門教程之Linux上部署K8ssandra到Kubernetes的過(guò)程,一起看看吧2021-10-10git工作區(qū)暫存區(qū)與版本庫(kù)基本理解及提交流程全解
這篇文章主要為大家介紹了git工作區(qū)暫存區(qū)與版本庫(kù)基本理解及提交流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-04-04DedeCMS 5.7 sp1遠(yuǎn)程文件包含漏洞(CVE-2015-4553)
這篇文章主要介紹了DedeCMS 5.7 sp1遠(yuǎn)程文件包含漏洞(CVE-2015-4553)的相關(guān)知識(shí),本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08