VSCode'da bir görev tanımlamanın mümkün olduğunu gördüm. Ancak tasks.json
dosyada birden çok görevi nasıl tanımlayacağımdan emin değilim .
VSCode'da bir görev tanımlamanın mümkün olduğunu gördüm. Ancak tasks.json
dosyada birden çok görevi nasıl tanımlayacağımdan emin değilim .
Yanıtlar:
Birine yardım etmesi durumunda ... Eğer gulp / grunt / etc ... istemiyorsanız / istemiyorsanız veya görev komutlarınızı vekil olarak çalıştırmak için fazladan bir kabuk betiğine sahip değilseniz, "npm run" zaten vardır.
bu "Build and Test", Shift+ Ctrl+ B, Shift+ Ctrl+ 'da olduğu gibi webpack ve mocha içindirT
.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"
},
...
}
Bunu daha iyi anlamama yardımcı olan, komuta aktarılan argümanlar dizisi. Bazıları için açık olabilir ama belgelerde net değil.
Yalnızca gönderilen komuta odaklanmak için bazı alanların çıkarılması:
{ "command": "myCommand"
"args": ["myCommandArguments"],
"tasks" : [
{ "taskName": "myTask",
"args": ["myTaskArguments"],
"suppressTaskName": false,
}
]
}
Yukarıdaki tanım aşağıdaki komutla sonuçlanacaktır:
myCommand myCommandArguments myTaskArguments myTask
Görev adı myTask
her zaman en sondur. 0.4 sürümünden bu yana atlanabilir "suppressTaskName": true
.
Bunu dene
{
"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"
}
]
}
Birden çok TypeScript oluşturma senaryosu çalıştırmak için aşağıdaki tasks.json dosyasını kullanıyorum. Her klasöre bir tsconfig.json dosyası koyuyorum, böylece her klasörün çıktısını ayrı ayrı ayarlamamı sağlıyor. Görev adını, komut dizesine koymaya çalıştığı için bastırdığınızdan emin olun.
{
"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"
}
]
}
Klasör yapısı böyle görünür, burada / script çıktı kökü ve / source girdi köküdür. Her iki klasör de / typingd klasöründeki ve / typings klasöründeki tür bildirimlerine başvurur. TypeScript, harici referanslarda göreli yolları kullanmakla bir şekilde sınırlıdır, bu nedenle bu klasör yapılarının benzer olması durumunda işleri basitleştirmeye yardımcı olur.
Oh evet, onları derlenmemiş olarak işaretlerseniz ve bir listeden belirli bir görevi seçmek için derleme anahtarını geçersiz kılarsanız, bunları seçerek başlatmayı kolaylaştırır.
// Place your key bindings in this file to overwrite the defaults
[
{ "key": "ctrl+shift+b", "command": "workbench.action.tasks.runTask" }
]
Güncelleme : İsterseniz her zaman tamamen haydut olabilirsiniz. Bağımsız değişkenleri ele almanın daha iyi yolları olabilir, ancak bu şu anda OSX altında benim için çalışıyor.
{
"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
}
]
}
Bunun doğru cevabını bilmiyorum (ve ayrıca bilmek isterim), ancak birisine yardımcı olması durumunda çirkin çözümüm. Windows kullanıyorum, kendime basitçe şunları içeren basit bir toplu komut dosyası oluşturdum:
"%1" "%2"
Sonra görevlerim.json şuna benzer
{
"version": "0.1.0",
"command": "c:\\...\\mytasks.bat"
"tasks" : [
{
"taskName": "myFirstTask",
"args": "c:\\...\\task1.exe", "${file}"],
},
{
"taskName": "mySecondTask",
"args": "c:\\...\\task2.exe", "${file}"],
},
]
}
Görevler özelliğinde birden fazla görev listeleyebilirsiniz. Gibi bir şey:
"tasks": [
{
"taskName": "build",
...
},
{
"taskName": "package",
...
}
]
tsc
and mocha
tasks örneğine bakın .
Bu işlevsellik, Visual Studio Code v1.9'da (Ocak 2017) eklenmiştir . Örnek ve metin, sürüm notlarından gelir :
{
"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
}
]
}
Artık görev başına farklı komutlar tanımlayabilirsiniz ( # 981 ). Bu, kendi kabuk komut dosyanızı yazmadan farklı görevler için farklı komutların çalıştırılmasına izin verir. tasks.json
Görev başına komut kullanan bir dosya [yukarıdaki] gibi görünür.
Bu yüzden, @hurelu tarafından daha önce açıklanmış olanın çalışan bir örneğini göstermek için bu yanıtı ekledim. Görevlerim.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"
]
}
]
}
/// <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));
}
}
{
"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"
]
}
]
}
[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
[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
İtibariyle Şubat 2017 sürümü, sen bağımlılık görevleri kurarak Terminali Runner ve oluşturma birden fazla görev kullanabilirsiniz. Her görev için ayrı bir entegre terminal açacak olması biraz garip, işlerin işe yarayıp yaramadığını görmek için izlemeniz ve kapatmayı hatırlamanız ("yığılıyorlar") ve "tamamlandı" bildirimi almazsınız. ama işi halleder. İşlevsellik başlangıç niteliğindedir, ancak umut vericidir. İşte bir Cordova uygulaması için tsc ve jspm'yi çalıştırmak için bir örnek.
{
// 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"]
}]
}
Aşağıdakiler benim için çalıştı:
task.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"
}
Bower'ı çalıştırın: vscode Run testlerinden Ctrl + Shift + B: vscode'dan Ctrl + Shift + T
Bu benim için çalışıyor ...
Burada birçok farklı cevap olduğunu biliyorum ama yaklaşımım biraz daha farklıydı, bu yüzden 2 peni değerimi ekleyeceğimi düşündüm.
Windows'tayım ve komutlarımı çalıştırmak için harici bir toplu iş dosyası kullanıyorum. Bu Jonathan'ın yukarıdaki cevabına benziyor ama ona herhangi bir komut aktarmıyorum, bu da "tasks.json" dosyamın farklı olduğu anlamına geliyor.
Bu yaklaşımı zamanla değiştirebilirim (örneğin, henüz yudumla oynamaya başlamadım) ama bu yöntem şu anda benim için mükemmel çalışıyor.
Html şablonlama için gidon kullanıyorum, babel, böylece ES6 kodunu ve hataları algılamak için bir kod linterini kullanabiliyorum. Sonunda, toplu iş dosyası başlangıç sayfamla (index.html) bir tarayıcı başlatır
İşte run_tasks.bat adlı toplu iş dosyam:
@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!
Ve işte tasks.json dosyam:
{
"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"
}
}
Daha sonra VSCode'da toplu iş dosyamı çalıştırmak için “CTRL + SHIFT + B” ye basıyorum.
Daha az stil sayfası derlemesi ve ardından programı oluşturması ve başlatması gereken bir Electron uygulamam var. Benim için çalışan @ Ocean'ın çözümünü kullandım ... başka hiçbir şey işe yaramadı.
Hem tasks.json hem de build-tasks.bat dosyası, projenin kök dizinindeki .vscode dizinindedir.
build-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!
task.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"
}
]
}
Bu iş parçacığı sayesinde, artık osx üzerinde vscode'da çalışan c # / dnxcore50 derleme ve test hata ayıklama vb. Var:
{
"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"
}
]
}
Eminim linux temelde aynı olacaktır. Beni rahatsız eden tek şey, .csproj dosyalarını sadece hata ayıklamak için saklamaktır. Birkaç haftadır bakmamış olsam da, dnx ile hata ayıklamanın bir yolunu dört gözle bekliyorum.