Tôi đã thấy rằng có thể xác định một nhiệm vụ trong VSCode. Nhưng tôi không chắc chắn về cách xác định nhiều tác vụ trong tasks.json
tệp.
Tôi đã thấy rằng có thể xác định một nhiệm vụ trong VSCode. Nhưng tôi không chắc chắn về cách xác định nhiều tác vụ trong tasks.json
tệp.
Câu trả lời:
Chỉ trong trường hợp nó giúp ai đó .... Nếu bạn không có / muốn gulp / grunt / etc ... hoặc một tập lệnh shell bổ sung để ủy quyền các lệnh tác vụ của mình, thì "npm run" đã có sẵn.
cái này dành cho webpack và mocha như trong "Build and Test", Shift+ Ctrl+ B, Shift+ Ctrl+T
.vscode / task.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"
},
...
}
Điều đã giúp tôi hiểu điều này tốt hơn là chuỗi các đối số được truyền cho lệnh. Nó có thể rõ ràng đối với một số người nhưng nó không rõ ràng trong tài liệu.
Bỏ qua một số trường để chỉ tập trung vào lệnh được gửi:
{ "command": "myCommand"
"args": ["myCommandArguments"],
"tasks" : [
{ "taskName": "myTask",
"args": ["myTaskArguments"],
"suppressTaskName": false,
}
]
}
Định nghĩa trên sẽ dẫn đến lệnh sau:
myCommand myCommandArguments myTaskArguments myTask
Tên nhiệm vụ myTask
luôn ở cuối cùng. Kể từ phiên bản 0.4, nó có thể được bỏ qua với "suppressTaskName": true
.
Thử đi
{
"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"
}
]
}
Tôi sử dụng tệp task.json sau để chạy nhiều kịch bản xây dựng TypeScript. Tôi đặt một tệp tsconfig.json trong mỗi thư mục, để cho phép tôi điều chỉnh đầu ra của từng thư mục riêng lẻ. Chỉ cần đảm bảo rằng bạn loại bỏ tên tác vụ, vì nó cố gắng đặt nó trong chuỗi lệnh.
{
"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"
}
]
}
Đây là cấu trúc thư mục trông như thế nào, trong đó / script là gốc đầu ra và / source là gốc đầu vào. Cả hai thư mục tham chiếu kiểu khai báo trong thư mục / gõd và thư mục / typings. TypeScript hơi hạn chế trong việc sử dụng các đường dẫn tương đối trong các tham chiếu bên ngoài, vì vậy nó giúp đơn giản hóa mọi thứ nếu các cấu trúc thư mục này tương tự nhau.
Ồ vâng, việc khởi chạy chúng một cách có chọn lọc sẽ dễ dàng hơn nếu bạn đánh dấu chúng là không phải bản dựng và ghi đè khoá xây dựng để chọn một tác vụ cụ thể từ danh sách, như vậy ..
// Place your key bindings in this file to overwrite the defaults
[
{ "key": "ctrl+shift+b", "command": "workbench.action.tasks.runTask" }
]
Cập nhật : Bạn luôn có thể hoàn toàn lừa đảo, nếu bạn muốn. Có thể có nhiều cách tốt hơn để xử lý các vấn đề, nhưng cách này phù hợp với tôi trên OSX vào lúc này.
{
"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
}
]
}
Tôi không biết câu trả lời thích hợp cho điều này (và cũng muốn biết), nhưng cách giải quyết xấu xí của tôi trong trường hợp nó có ích cho bất kỳ ai. Tôi đang sử dụng Windows, tôi đã kết thúc việc tạo cho mình một tập lệnh lô đơn giản có thể chứa
"%1" "%2"
Sau đó, nhiệm vụ của tôi. Json trông giống như
{
"version": "0.1.0",
"command": "c:\\...\\mytasks.bat"
"tasks" : [
{
"taskName": "myFirstTask",
"args": "c:\\...\\task1.exe", "${file}"],
},
{
"taskName": "mySecondTask",
"args": "c:\\...\\task2.exe", "${file}"],
},
]
}
Bạn có thể liệt kê nhiều hơn một nhiệm vụ trong thuộc tính nhiệm vụ. Cái gì đó như:
"tasks": [
{
"taskName": "build",
...
},
{
"taskName": "package",
...
}
]
tsc
và mocha
nhiệm vụ.
Chức năng này đã được thêm vào Visual Studio Code v1.9 (tháng 1 năm 2017) . Ví dụ và văn bản đến từ các ghi chú phát hành :
{
"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
}
]
}
Bây giờ bạn có thể xác định các lệnh khác nhau cho mỗi tác vụ ( # 981 ). Điều này cho phép chạy các lệnh khác nhau cho các tác vụ khác nhau mà không cần viết tập lệnh shell của riêng bạn. Một tasks.json
tập tin sử dụng lệnh mỗi vẻ nhiệm vụ như [ở trên.]
vì vậy, tôi đã thêm câu trả lời này để hiển thị một ví dụ hoạt động về những gì đã được @hurelu giải thích trước đó. Nhiệm vụ của tôi.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
Kể từ bản phát hành tháng 2 năm 2017 , bạn có thể sử dụng Terminal Runner và soạn nhiều tác vụ bằng cách thiết lập các tác vụ phụ thuộc. Nó hơi thú vị ở chỗ nó sẽ mở ra một thiết bị đầu cuối tích hợp riêng cho từng tác vụ, bạn phải theo dõi để xem mọi thứ có hoạt động hay không và nhớ đóng (chúng "xếp chồng") và bạn không nhận được thông báo "hoàn thành" , nhưng nó hoàn thành công việc. Chức năng là sơ bộ nhưng nó đầy hứa hẹn. Đây là một ví dụ để chạy tsc và jspm cho một ứng dụng 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"]
}]
}
Những điều sau đây đã làm việc cho tôi:
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"
}
Chạy bower: Ctrl + Shift + B từ vscode Chạy kiểm tra: Ctrl + Shift + T từ vscode
Điều này làm việc cho tôi ...
Tôi biết có rất nhiều câu trả lời khác nhau ở đây nhưng cách tiếp cận của tôi lại hơi khác một chút vì vậy tôi nghĩ mình sẽ thêm giá trị 2 xu của mình.
Tôi đang sử dụng windows và sử dụng một tệp hàng loạt bên ngoài để chạy các lệnh của mình. Nó tương tự như câu trả lời của Jonathan ở trên nhưng tôi không đặt bất kỳ lệnh nào cho nó, điều đó có nghĩa là tệp “task.json” của tôi khác.
Tôi có thể thay đổi cách tiếp cận này theo thời gian (ví dụ: tôi chưa bắt đầu chơi với gulp) nhưng phương pháp này đang hoạt động hoàn toàn tốt đối với tôi vào lúc này.
Tôi đang sử dụng thanh điều khiển để tạo khuôn mẫu html, babel, vì vậy tôi có thể sử dụng mã ES6 và một trình ghép mã để sửa lỗi. Cuối cùng, tệp loạt khởi chạy trình duyệt với trang bắt đầu của tôi (index.html)
Đây là tệp hàng loạt của tôi có tên 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!
Và đây là tệp task.json của tôi:
{
"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"
}
}
Sau đó, trong VSCode, tôi nhấn “CTRL + SHIFT + B” để chạy tệp loạt của mình.
Tôi có một ứng dụng Electron cần biên dịch một biểu định kiểu nhỏ hơn, sau đó xây dựng và khởi chạy chương trình. Tôi đã sử dụng giải pháp của @ Ocean's phù hợp với tôi ... không có gì khác hoạt động.
Cả tệp task.json và build-task.bat của tôi đều nằm trong thư mục .vscode trong thư mục gốc của dự án.
build-task.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"
}
]
}
Nhờ chủ đề này, bây giờ tôi có c # / dnxcore50 xây dựng và thử nghiệm gỡ lỗi, v.v. hoạt động trong vscode trên osx với điều này:
{
"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"
}
]
}
Tôi chắc chắn rằng về cơ bản linux sẽ giống nhau. Điều duy nhất đang làm phiền tôi là phải duy trì các tệp .csproj chỉ để gỡ lỗi. Tôi đang mong đợi một cách để gỡ lỗi với dnx, mặc dù tôi đã không tìm kiếm trong vài tuần nay.