Javascript 为VsCode编写扩展:监视任务

Javascript 为VsCode编写扩展:监视任务,javascript,plugins,visual-studio-code,vscode-extensions,Javascript,Plugins,Visual Studio Code,Vscode Extensions,如果这个问题已经被问到,并且我的分析缺乏对问题的理解,我表示歉意:我只是从VsCode开始,所以很可能我严重缺乏必要的知识 我花了不到8个小时在谷歌上搜索和阅读Vscode文档,但我似乎找不到一个我试图实现的示例: 我正在尝试使用Js(而不是TypeScript)编写一个简单的插件。我面临的问题是,我想使用ES模块而不是普通的JS模块来编写ES6代码(简而言之:我想在扩展代码中使用import/export,而不是require()/exports.xxx 为了做到这一点,我所理解的是,我必须配

如果这个问题已经被问到,并且我的分析缺乏对问题的理解,我表示歉意:我只是从VsCode开始,所以很可能我严重缺乏必要的知识

我花了不到8个小时在谷歌上搜索和阅读Vscode文档,但我似乎找不到一个我试图实现的示例:

我正在尝试使用Js(而不是TypeScript)编写一个简单的插件。我面临的问题是,我想使用ES模块而不是普通的JS模块来编写ES6代码(简而言之:我想在扩展代码中使用
import/export
,而不是
require()/exports.xxx

为了做到这一点,我所理解的是,我必须配置我的扩展以使用编译并监视代码更改的
preLaunchTask
(再次将其编译为公共js代码)

我查看了为典型的TypeScript扩展生成的扩展代码(因为它具有相同的编译和监视步骤),并尝试使用babel compile和watch复制它,但没有效果

tasks.json
文件中有许多未记录(或未正确解释)的属性,这真的让人沮丧,所以在我放弃之前,我向社区寻求帮助,并决定每次更改代码时返回Emacs或手动重新编译(Ctrl+Shift+B)

所以,我想做的只是使用ES6模块设置一个扩展(扩展只是说“Hello World”atm,我正在关注设置一个合适的开发环境)

My.vscode/launch.json如下所示:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Extension",
            "type": "extensionHost",
            "request": "launch",
            "runtimeExecutable": "${execPath}",
            "stopOnEntry": false,
            "sourceMaps": true,
            "args": [
                "--extensionDevelopmentPath=${workspaceFolder}"
            ],
            "outFiles": [
                "${workspaceFolder}/out/**/*.js"
            ],
            "preLaunchTask": "watch-and-compile"
        },
    ]
}
我甚至不确定应该给
preLaunchTask
赋予什么值,所以我尝试给它一个值,该值将与
tasks.json
中我的任务中的
label
属性相匹配。它似乎在运行,所以我想它没问题

现在,转到
tasks.json

{
  "version": "2.0.0",
  "tasks": [{
    "label": "watch-and-compile",
    "command": "npm",
    "args": [ "run", "watch"],
    "type": "shell",
    "isBackground": true,
    "problemMatcher": "$tsc-watch"
  }]
}
从“problemMatcher”上的稀缺文档中,我没有真正了解它是什么。因此,我使用了tc在转换(并查看)TypeScript文件时使用的传输过程中使用的值。我在某个地方看到过这个matcher在一个Gulp扩展中使用,所以我想它可能是一种vscode的“类别”,以了解任务执行的是哪种类型的处理工作,但是,再一次,我对事情应该如何工作并没有真正的线索,我发现整个过程令人难以置信地沮丧,考虑到所有这些都是在开始实际编写扩展逻辑之前完成的

目前,我的代码似乎正确启动了我的任务,但它挂起了(因为
npm run watch
实际上是一个阻塞过程,监视文件的更改并动态重新编译它们)。使用
isBackground
似乎无法完成任何事情,因为进程似乎根本不会在后台运行。当我启动扩展的调试会话时,任务会运行并阻止整个进程进一步进行…只有在我在终端中终止进程后,调试器才会继续运行并加载和调试在新的Vscode调试窗口中激活我的扩展..所以这里肯定缺少一些东西

一些好的灵魂能在这里介入并引导我走向正确的方向吗?我只是想达到我可以使用ESM编写扩展代码的程度,就是这样


提前感谢您在这件事上提供的任何帮助/建议/提示!

我没有答案,但是您可以通过查看