【问题标题】:How to define several typescript compile tasks in one tasks.json?如何在一个tasks.json中定义多个打字稿编译任务?
【发布时间】:2016-07-26 21:37:06
【问题描述】:

我正在尝试在 VS Code 中为我的打字稿项目定义不同的构建任务。只要只有一项任务,我的 tasks.json 就可以工作。

tasks.json(命令托盘 > 任务 tsc)

{
"version": "0.1.0",
"command": "tsc",
"showOutput": "silent",
"args": ["-p", "."],
"problemMatcher": "$tsc"
"isShellCommand": true
}

当我定义多个任务时,我可以从命令面板中选择它们,但它们会产生以下错误:

TS5042:选项“项目”不能与命令行上的源文件混合

tasks.json(命令调色板>任务dsomething)

{
"version": "0.1.0",
"command": "tsc",
"isShellCommand": true,
"tasks":[
    {
        "taskName":"dosomething",
        "showOutput": "silent",
        "args": ["-p", "."],
        "problemMatcher": "$tsc"
    },
    {
        "taskName":"compileandwatch",
        "showOutput": "silent",
        "args": ["-p", ".", "-w"],
        "problemMatcher": "$tsc"
    }
]
}

问题:如何在tasks.json中定义几个任务?哪些参数应该包含在“任务”中,哪些应该在根目录中? microsoft docs中没有例子。

我尝试将“args”留空:

"args": [],

但后来我收到此错误 "dosomething.ts" not found

【问题讨论】:

    标签: typescript visual-studio-code


    【解决方案1】:

    我想你忘了在每个任务上设置suppressTaskName = true。下面是一个对我有用的 tasks.json 示例。请注意,args 这样定义了应该运行的内容以及传递给它的参数,任务名称不会影响生成的命令:

    {
        "version": "0.1.0",
        "command": "node",
        "windows": {
            "command": "node.exe"
        },
        "isShellCommand": true,
        "tasks": [
            {
                "taskName": "build.dev",
                "args": ["${workspaceRoot}/node_modules/gulp/bin/gulp.js", "build.dev"],
                "isBuildCommand": true,
                "suppressTaskName": true,
                "problemMatcher": [
                    "$tsc"
                ]
            },
            {
                "taskName": "document.code",
                "args": ["${workspaceRoot}/node_modules/gulp/bin/gulp.js", "document.code"],
                "suppressTaskName": true,
                "problemMatcher": []
            },
            {
                "taskName": "start.specs.web.server",
                "args": ["${workspaceRoot}/node_modules/http-server/bin/http-server",
                        "${workspaceRoot}/dist/dev/specs"],
                "suppressTaskName": true,
                "problemMatcher": []
            }        
        ]
    }
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢,我会试试这个。但是“suppressTaskName”有什么作用呢?为什么我要隐藏任务名称?
    • 任务名称不会用于指定要运行的程序名称。因此,当您有名称为 dosomething 的任务时,vscode 不会尝试运行 node dosomething ../../../gulp.js ... 以及来自 args 的参数。相反,它将仅使用参数构造命令。查看我的示例配置 - build.dev 任务将运行 node ../../../gulp.js ...
    • 谢谢。这可行,尽管它依赖于节点来实际执行这些命令。似乎没有办法在 tasks.json 中拥有完全不同的命令(例如,一个 node-sass 编译命令和一个 tsc 编译命令)
    • 谢谢你!为什么它会在命令中插入任务名?!如果我想要一个额外的参数,我会把它放在args 列表中!不管怎样,感谢@Amid!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2019-01-23
    • 2019-06-14
    • 1970-01-01
    相关资源
    最近更新 更多