Visual Studio Code - tasks.json - 如何使用参数执行扩展?
Posted
技术标签:
【中文标题】Visual Studio Code - tasks.json - 如何使用参数执行扩展?【英文标题】:Visual Studio Code - tasks.json - how to execute an extension with arguments? 【发布时间】:2022-01-19 03:04:56 【问题描述】:在 Windows 上使用 Visual Studio Code,系统详情如下:
Version: 1.63.0 (system setup)
Commit: 7db1a2b88f7557e0a43fec75b6ba7e50b3e9f77e
Date: 2021-12-07T06:26:56.179Z
Electron: 13.5.2
Chromium: 91.0.4472.164
Node.js: 14.16.0
V8: 9.1.269.39-electron.0
OS: Windows_NT x64 10.0.19044
我非常喜欢根据文档设置和使用任务:Integrate with External Tools via Tasks
我设法设置了多个将 Typescript 转换为 javascript 的任务,然后将 Javascript 文件(使用 powershell)复制到另一个目录。我还需要一个任务来缩小 Javascript——这就是我卡住的地方。
我已经安装了一个“缩小”扩展——但是如何执行扩展并使用tasks.json传递要缩小的文件?例如:
"label": "Minify Javascript",
"command": "command:extensions.Minify",
"args": [ "File", "$cwd\\somefile.js"]
,
以上内容仅用于说明目的——我正在寻找的是执行 Minify 扩展并将该扩展传递给它所需的参数所需的语法。
如果有人有使用 tasks.json 中的扩展的示例——请发布您的示例,因为我似乎在“官方”文档中找不到任何内容。
【问题讨论】:
【参考方案1】:使用 shell 任务将一些文本回显到终端,但其中一个参数是 $input
变量
"tasks": [
"label": "Minify Javascript",
"type": "shell",
"command": "echo Minify $input:minify"
],
"inputs": [
"id": "minify",
"type": "command",
"command": "command:extensions.Minify",
"args": [ "File", "$cwd\\somefile.js"]
]
$input
字符串不支持变量,AFAIK(也许在后来的 VSC 中他们支持)。许多扩展通过自己实现功能来支持变量。
编辑
原来命令es6-css-minify.minify
不使用命令参数,它处理当前编辑器,解决方法是用命令加载所需的文件并运行minify。
为此,您需要 2 个扩展名:multi-command 和 html Related Links
"tasks": [
"label": "Minify Javascript",
"type": "shell",
"command": "echo Minify $input:minify"
],
"inputs": [
"id": "minify",
"type": "command",
"command": "extension.multiCommand.execute",
"args":
"interval": 500,
"sequence": [
"command": "htmlRelatedLinks.openFile",
"args":
"file": "$workspaceFolder/somefile.js"
,
"es6-css-minify.minify"
]
]
【讨论】:
感谢您的建议 - 我试过了,VSCode 显示“command 'Minify:' not found”。 (即使安装了 Minify 扩展并且 Minify 按钮出现在状态栏中)。 @bdcoder 我没有扩展,找出扩展导出的确切命令并填写,我只是复制了你在问题中输入的命令 再次感谢——Minify 存储库位于:github.com/olback/es6-css-minify,无论我尝试什么“命令”,VSCode 都会将命令报告为“未找到”。 试试"command": "es6-css-minify.minify"
接近? VSCode 显示“不支持语言”。 -- 就像扩展程序正在查看当前文档而不是拾取文件以最小化作为参数 -- 将继续播放 -- 我的王国是一个将参数传递给扩展程序的工作示例!!【参考方案2】:
感谢@rioV8 抽出宝贵时间。我相信你的回答会奏效,但是安装两个额外的扩展来运行扩展的想法感觉不对,所以我选择了一个更简单的解决方案,如下所示:
由于 Minify 使用 terser,我安装了 terser 用作命令行应用程序:,即:
npm install terser -g
然后我修改了我的tasks.json文件,如下:
"version": "2.0.0",
"tasks": [
"label": "task 1",
...
,
"label": "task 2",
"command": "powershell",
"args": [
"-File", "$cwd/minify_all.ps1"
],
"presentation":
"echo": true,
"reveal": "always",
"focus": true,
"panel": "shared",
"showReuseMessage": false,
"clear": false
,
"label": "task 3",
...
,
"label": "Build All",
"type": "shell",
"command": "Echo 'Build complete'",
"dependsOrder": "sequence",
"dependsOn": [
"task 1",
"task 2",
"task 3"
],
"presentation":
"echo": true,
"reveal": "always",
"focus": true,
"panel": "shared",
"showReuseMessage": false,
"clear": false
]
“任务 2”中使用的 powershell 脚本 minify_all.ps1 调用 terser 来缩小文件,即:
#
# Minify all files ...
#
Write-Output ""
Write-Output "Minify some_file.js ..."
$in_file = "./test/js/some_file.js"
$out_file = "./test/js/some_file.min.js"
& terser $in_file --timings --output $out_file
$file_size = (Get-Item $in_file).length
Write-Output "- $in_file, size: $file_size"
$file_size = (Get-Item $out_file).length
Write-Output "- $out_file, size: $file_size"
【讨论】:
以上是关于Visual Studio Code - tasks.json - 如何使用参数执行扩展?的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio Code 中使用 tasks.json 转换 typescript 和 sass