【问题标题】:Visual Studio Code - tasks.json - how to execute an extension with arguments?Visual Studio Code - tasks.json - 如何使用参数执行扩展?
【发布时间】: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 中的扩展的示例——请发布您的示例,因为我似乎在“官方”文档中找不到任何内容。

【问题讨论】:

    标签: visual-studio-code build


    【解决方案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-commandHTML 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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-22
      • 2017-07-01
      • 2020-06-09
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多