Я видел, что в VSCode можно определить задачу. Но я не уверен, как определить несколько задач в файле tasks.json.
Определить несколько задач в VSCode
Ответ 1
На всякий случай это помогает кому-то.... Если у вас нет /want gulp/grunt/etc... или дополнительной оболочки script, чтобы проксировать ваши команды задач, "npm run" уже есть.
это для webpack и mocha, как в "Build and Test", Shift + Ctrl + B, Shift + Ctrl + T
.vscode/tasks.json:
{
"name": "npmTask",
//...
"suppressTaskName": true,
"command": "npm",
"isShellCommand": true,
"args": [
"run"
],
"tasks": [
{
//Build Task
"taskName": "webpack",
//Run On Shift+Ctrl+B
"isBuildCommand": true,
//Don't run when Shift+Ctrl+T
"isTestCommand": false,
// Show the output window if error any
"showOutput": "silent",
//Npm Task Name
"args": [
"webpack"
],
// use 2 regex:
// 1st the file, then the problem
"problemMatcher": {
"owner": "webpack",
"severity": "error",
"fileLocation": "relative",
"pattern": [
{
"regexp": "ERROR in (.*)",
"file": 1
},
{
"regexp": "\\((\\d+),(\\d+)\\):(.*)",
"line": 1,
"column": 2,
"message": 3
}
]
}
},
{
//Test Task
"taskName": "mocha",
// Don't run on Shift+Ctrl+B
"isBuildCommand": false,
// Run on Shift+Ctrl+T
"isTestCommand": true,
"showOutput": "always",
"args": [
"mocha"
]
}
]
}
package.json:
{
...
"scripts": {
"webpack": "webpack",
"mocha": "/usr/bin/mocha"
},
...
}
Ответ 2
Попробуйте это
{
"version": "0.1.0",
"command": "cmd",
"isShellCommand": true,
"args": ["/C"],
"tasks": [
{
"taskName": "install",
"args": ["npm install"]
},
{
"taskName": "build",
"args": ["gulp build"],
"isBuildCommand": true,
"problemMatcher": "$gulp-tsc"
}
]
}
Ответ 3
Что мне лучше понять, так это последовательность аргументов, переданных команде. Это может быть очевидным для некоторых, но это не ясно в документации.
Опуская некоторые поля, чтобы сосредоточиться только на отправляемой команде:
{ "command": "myCommand"
"args": ["myCommandArguments"],
"tasks" : [
{ "taskName": "myTask",
"args": ["myTaskArguments"],
"suppressTaskName": false,
}
]
}
Приведенное выше определение приведет к следующей команде:
myCommand myCommandArguments myTaskArguments myTask
Имя задачи myTask
всегда является последним. Начиная с версии 0.4, ее можно опустить с помощью "suppressTaskName": true
.
Ответ 4
Я использую следующий файл tasks.json для запуска нескольких сценариев сборки TypeScript. Я помещаю файл tsconfig.json в каждую папку, чтобы я мог настраивать каждую выходную папку отдельно. Просто убедитесь, что вы подавили имя задачи, потому что она пытается поместить ее в командную строку.
{
"version": "0.1.0",
"command": "tsc",
"showOutput": "always",
"isShellCommand": true,
"args": [],
"windows": {
"command": "tsc",
"showOutput": "always",
"isShellCommand": true
},
"tasks": [
{
"taskName": "Build the examples",
"suppressTaskName": true,
"isBuildCommand": false,
"args": ["-p", "./source/examples", "--outDir", "./script/examples"],
"problemMatcher": "$tsc"
},
{
"taskName": "Build the solution",
"suppressTaskName": true,
"isBuildCommand": false,
"args": ["-p", "./source/solution", "--outDir", "./script/solution"],
"problemMatcher": "$tsc"
}
]
}
Вот как выглядит структура папок, где / script - это выходной корень, а /source - корень ввода. Обе папки ссылаются на типы объявлений в папке /typingd и/typings. TypeScript несколько ограничивается использованием относительных путей во внешних ссылках, поэтому он помогает упростить ситуацию, если эти структуры папок похожи.
О да, это облегчает их запуск выборочно, если вы помечаете их как нестрочные и переопределяете ключ сборки, чтобы выбрать конкретную задачу из списка, например.
// Place your key bindings in this file to overwrite the defaults
[
{ "key": "ctrl+shift+b", "command": "workbench.action.tasks.runTask" }
]
Обновить. Вы всегда можете просто пойти полностью изгоем, если хотите. Могут быть лучшие способы обработки аргументов, но это работает для меня в OSX на данный момент.
{
"version": "0.1.0",
"isShellCommand": true,
"linux": { "command": "sh", "args": ["-c"] },
"osx": { "command": "sh", "args": ["-c"] },
"windows": { "command": "powershell", "args": ["-Command"] },
"tasks": [
{
"taskName": "build-models",
"args": ["gulp build-models"],
"suppressTaskName": true,
"isBuildCommand": false,
"isTestCommand": false
},
{
"taskName": "run tests",
"args": ["mocha ${workspaceRoot}/test"],
"suppressTaskName": true,
"isBuildCommand": false,
"isTestCommand": false
}
]
}
Ответ 5
Я не знаю правильного ответа на этот вопрос (и хотел бы также знать), но мое уродливое обходное решение на случай, если оно поможет кому угодно. Я нахожусь в Windows, я создал себе простой пакет script, который может содержать просто
"%1" "%2"
Затем мои задачи .json выглядят примерно как
{
"version": "0.1.0",
"command": "c:\\...\\mytasks.bat"
"tasks" : [
{
"taskName": "myFirstTask",
"args": "c:\\...\\task1.exe", "${file}"],
},
{
"taskName": "mySecondTask",
"args": "c:\\...\\task2.exe", "${file}"],
},
]
}
Ответ 6
Вы можете перечислить несколько задач в свойстве tasks. Что-то вроде:
"tasks": [
{
"taskName": "build",
...
},
{
"taskName": "package",
...
}
]
Ответ 7
Это похоже на ошибку VSCode по версии v0.5.0
поэтому я добавил этот ответ, чтобы показать рабочий пример того, что ранее объяснялось @hurelu. Мои задачи .json:
{
"version": "0.1.0",
"command": "gulp",
"isShellCommand": true,
"args": [
"--no-color"
],
"tasks": [
{
"taskName": "--verbose",
"isBuildCommand": true,
"showOutput": "always",
"args": [
"vet"
],
"problemMatcher": [
"$jshint",
"$jshint-stylish"
]
},
{
"taskName": "vet",
"isTestCommand": true,
"showOutput": "always",
"args": [],
"problemMatcher": [
"$jshint",
"$jshint-stylish"
]
}
]
}
Мой gulp.js:
/// <reference path="typings/tsd.d.ts" />
var gulp = require('gulp');
var jshint = require('gulp-jshint');
var jscs = require('gulp-jscs');
var util = require('gulp-util');
var gulpprint = require('gulp-print');
var gulpif = require('gulp-if');
var args = require('yargs').argv;
gulp.task('vet', function () {
log('Analyzing source with JSHint and JSCS');
return gulp
.src
([
'./src/**/*.js',
'./*.js'
])
.pipe(gulpif(args.verbose, gulpprint()))
.pipe(jscs())
.pipe(jshint())
.pipe(jshint.reporter('jshint-stylish', { verbose: true }))
.pipe(jshint.reporter('fail'));
});
gulp.task('hello-world', function () {
console.log('This is our first Gulp task!');
});
////////////
function log(msg) {
if (typeof (msg) === 'object') {
for (var item in msg) {
if (msg.hasOwnProperty(item)) {
util.log(util.colors.blue(msg[item]));
}
}
} else {
util.log(util.colors.blue(msg));
}
}
Обратите внимание, что первая задача использует isBuildCommand, поэтому CTRL + SHFT + B запускается, а следующей задачей является isTestCommand, поэтому CTRL + SHFT + T запускается. Однако, чтобы получить первую задачу для принятия аргументов, имя задачи и аргументы должны были быть отменены.
Как и VSCode 0.5.0, это работает, но следующее:
{
"version": "0.1.0",
"command": "gulp",
"isShellCommand": true,
"args": [
"--no-color"
],
"tasks": [
{
"taskName": "vet",
"isBuildCommand": true,
"showOutput": "always",
"args": [
"--verbose"
],
"problemMatcher": [
"$jshint",
"$jshint-stylish"
]
},
{
"taskName": "vet",
"isTestCommand": true,
"showOutput": "always",
"args": [],
"problemMatcher": [
"$jshint",
"$jshint-stylish"
]
}
]
}
Здесь вывод из task.json с правильной задачей и порядком args:
[10:59:29] Using gulpfile ~/Workspaces/Examples/Gulp/pluralsight-gulp/gulpfile.js
[10:59:29] Task 'default' is not in your gulpfile
[10:59:29] Please check the documentation for proper gulpfile formatting
Здесь правильный вывод из tasks.json с именем задачи и аргументом arg меняется при использовании args:
[11:02:44] Using gulpfile ~/Workspaces/Examples/Gulp/pluralsight-gulp/gulpfile.js
[11:02:44] Starting 'vet'...
[11:02:44] Analyzing source with JSHint and JSCS
[gulp] src/server/app.js
[gulp] src/client/app/app.module.js
[gulp] src/client/test-helpers/bind-polyfill.js
[gulp] src/client/test-helpers/mock-data.js
[gulp] src/server/routes/index.js
[gulp] src/client/app/core/config.js
[gulp] src/client/app/core/constants.js
[gulp] src/client/app/core/core.module.js
[gulp] src/client/app/core/dataservice.js
[gulp] src/client/app/core/dataservice.spec.js
[gulp] src/client/app/customers/customer-detail.controller.js
[gulp] src/client/app/customers/customer-detail.controller.spec.js
[gulp] src/client/app/customers/customers.controller.js
[gulp] src/client/app/customers/customers.controller.spec.js
[gulp] src/client/app/customers/customers.module.js
[gulp] src/client/app/customers/customers.route.js
[gulp] src/client/app/customers/customers.route.spec.js
[gulp] src/client/app/dashboard/dashboard.controller.js
[gulp] src/client/app/dashboard/dashboard.controller.spec.js
[gulp] src/client/app/dashboard/dashboard.module.js
[gulp] src/client/app/dashboard/dashboard.route.js
[gulp] src/client/app/dashboard/dashboard.route.spec.js
[gulp] src/client/app/layout/ht-sidebar.directive.js
[gulp] src/client/app/layout/ht-sidebar.directive.spec.js
[gulp] src/client/app/layout/ht-top-nav.directive.js
[gulp] src/client/app/layout/layout.module.js
[gulp] src/client/app/layout/shell.controller.js
[gulp] src/client/app/layout/shell.controller.spec.js
[gulp] src/client/app/layout/sidebar.controller.js
[gulp] src/client/app/layout/sidebar.controller.spec.js
[gulp] src/client/app/widgets/ht-img-person.directive.js
[gulp] src/client/app/widgets/ht-widget-header.directive.js
[gulp] src/client/app/widgets/widgets.module.js
[gulp] src/client/tests/server-integration/dataservice.spec.js
[gulp] src/server/routes/utils/errorHandler.js
[gulp] src/server/routes/utils/jsonfileservice.js
[gulp] src/client/app/blocks/exception/exception-handler.provider.js
[gulp] src/client/app/blocks/exception/exception-handler.provider.spec.js
[gulp] src/client/app/blocks/exception/exception.js
[gulp] src/client/app/blocks/exception/exception.module.js
[gulp] src/client/app/blocks/logger/logger.js
[gulp] src/client/app/blocks/logger/logger.module.js
[gulp] src/client/app/blocks/router/router-helper.provider.js
[gulp] src/client/app/blocks/router/router.module.js
[gulp] gulpfile.js
[gulp] karma.conf.js
[11:02:48] Finished 'vet' after 4.37 s
Ответ 8
Эта функциональность была добавлена в Visual Studio Code v1.9 (январь 2017 г.). Пример и текст из примечания к выпуску:
{
"version": "0.1.0",
"tasks": [
{
"taskName": "tsc",
"command": "tsc",
"args": ["-w"],
"isShellCommand": true,
"isBackground": true,
"problemMatcher": "$tsc-watch"
},
{
"taskName": "build",
"command": "gulp",
"args": ["build"],
"isShellCommand": true
}
]
}
Команды для каждой задачи
Теперь вы можете определить разные команды для каждой задачи (# 981). Это позволяет запускать разные команды для разных задач без написания вашей собственной оболочки script. Файл tasks.json
, использующий команды для каждой задачи, выглядит как [выше].
Ответ 9
Следующие работали для меня:
tasks.json:
{
"version": "0.1.0",
"command": "cmd",
"isShellCommand": true,
"args": [
"/c"
],
"tasks": [
{
"taskName": "bower",
"args" : ["gulp bower"],
"isBuildCommand": true,
"showOutput": "always"
},
{
"taskName": "unittest",
"suppressTaskName": true,
"args" : ["dnx -p ${cwd}\\test\\MyProject.UnitTests test"],
"isTestCommand": true,
"showOutput": "always"
}
]
}
MyProject.UnitTests\project.json
"commands": {
"test": "xunit.runner.dnx"
}
Запустить беседу: Ctrl + Shift + B из vscode Выполнить тесты: Ctrl + Shift + T из vscode
Ответ 10
Это работает для меня...
Я знаю, что здесь есть много разных ответов, но мой подход немного изменился, поэтому я подумал, что добавлю свой 2 пенсов.
Я нахожусь в окнах и использую внешний командный файл для запуска моих команд. Это похоже на ответ Джонатана выше, но я не собираю никаких команд, что означает, что мой файл "tasks.json" отличается.
Я мог бы изменить этот подход с течением времени (например, я еще не смог сыграть с gulp), но этот метод работает отлично для меня на данный момент.
Я использую handlebars для html templating, babel, поэтому я могу использовать код ES6 и код linter для получения ошибок. В конце пакетный файл запускает браузер с моей начальной страницей (index.html)
Вот мой командный файл с именем run_tasks.bat:
@ECHO OFF
@ECHO Startz!
@ECHO Running Handlebars!
call handlebars html_templates -e html -f dist/html_templates.js
@ECHO Linting ES6 code
call eslint -c eslint.json src
@ECHO Running Babel ES6 to ES5
call babel src --out-dir dist --source-maps
@ECHO Now startzing page up in browser!
index.html
@ECHO Donezz it!
И вот мой файл tasks.json:
{
"version": "0.1.0",
"command": "${workspaceRoot}/run_tasks.bat",
"isShellCommand": true,
"isWatching": true,
"showOutput": "always",
"args": [],
"tasks": [
{
"taskName": "build",
"isBuildCommand": true,
"isWatching": true,
"showOutput": "always"
}
}
Затем в VSCode я нажимаю "CTRL + SHIFT + B" для запуска моего командного файла.
Ответ 11
У меня есть приложение Electron, которое должно скомпилировать меньшее количество таблиц стилей, а затем создать и запустить программу. Я использовал решение @Ocean, которое сработало для меня... ничего более не работало.
Оба файла tasks.json и build-tasks.bat находятся в каталоге .vscode в корне проекта.
встроенный tasks.bat
@ECHO OFF
@ECHO Begin!
@ECHO Compiling Less
call lessc ./css/styles.less ./css/styles.css
@ECHO Build Electron App and Launch
call electron ./app.js
@ECHO Finished!
tasks.json
{
"version": "0.1.0",
"command": "${workspaceRoot}\\.vscode\\build-tasks.bat",
"isShellCommand": true,
"isWatching": true,
"showOutput": "always",
"args": [],
"tasks": [
{
"taskName": "build",
"isBuildCommand": true,
"isWatching": true,
"showOutput": "always"
}
]
}
Ответ 12
Начиная с февраль 2017 года, вы можете использовать Terminal Runner и составлять несколько задач, настраивая задачи зависимостей. Это немного напуганно, потому что он откроет отдельный интегрированный терминал для каждой задачи, который вы должны посмотреть, чтобы увидеть, работают ли вещи и не забудьте закрыть (они "стекают" ), и вы не получите "сделанное" уведомление, но он выполняет свою работу. Функциональность является предварительной, но она многообещающая. Вот пример запуска tsc и jspm для приложения Cordova.
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [{
"taskName": "tsc",
"command": "tsc",
"isShellCommand": true,
"args": ["-p", "."],
"showOutput": "always",
"problemMatcher": "$tsc"
}, {
"taskName": "jspm",
"command": "jspm",
"isShellCommand": true,
"args": ["bundle-sfx", "www/app/main.js", "www/dist/bundle.js", "--inline-source-maps", "--source-map-contents"],
"showOutput": "always"
},
{
"taskName": "build",
"isBuildCommand": true,
"dependsOn": ["tsc", "jspm"]
}]
}
Ответ 13
Благодаря этой теме, у меня теперь есть С#/dnxcore50 build и test debug и т.д., работающие в vscode на osx с этим:
{
"version": "0.1.0",
"command": "bash",
"args": [
],
"tasks": [
{
"taskName": "xbuild",
"args": [
"./src/Service.Host/Service.Host.csproj"
],
"showOutput": "always",
"problemMatcher": "$msCompile",
"isBuildCommand": true
},
{
"taskName": "dnx",
"args" : ["-p", "./test/Service.Tests.Unit", "test"],
"isTestCommand": true,
"showOutput": "always"
}
]
}
Я уверен, что linux будет в основном тем же. Единственное, что меня беспокоит, - это поддерживать файлы .csproj только для отладки. Я с нетерпением жду возможности отладки с dnx, хотя я не искал пару недель.
Ответ 14
Я пересмотрел ответ @Jason, чтобы удалить предупреждения об устаревании - будущая проверка себя!
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"taskName": "tsc",
"command": "tsc",
"type": "shell",
"args": ["-p", "."],
"problemMatcher": "$tsc",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
}
},
{
"taskName": "jspm",
"command": "jspm",
"type": "shell",
"args": ["bundle-sfx", "www/app/main.js", "www/dist/bundle.js", "--inline-source-maps", "--source-map-contents"],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
}
},
{
"taskName": "build",
"dependsOn": ["tsc", "jspm"],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}