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

Visual Studio Code-GO tasks 设置 (实现在vsc下直接编译输出的功能)

[Visual Studio Code] 执行python

Visual Studio Code安装及配置

Visual Studio Code安装及配置

Egret之Visual Studio Code环境配置