为VsCode编写扩展程序:监视任务

时间:2018-07-28 10:40:09

标签: javascript plugins visual-studio-code vscode-extensions

很抱歉是否已经问过这个问题,以及我对这件事的理解是否缺乏分析:我只是从VsCode开始,所以很可能我严重缺乏必要的知识。

我花了整整8个小时的时间在谷歌上搜索并阅读了Vscode文档,但似乎找不到一个我要完成的工作的例子:

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

为此,我了解到我必须将扩展程序配置为使用preLaunchTask进行编译,并监视我的代码是否有更改(再次将其重新编译为通用js代码)。

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

tasks.json文件周围有许多未记录(或未正确解释)的属性,而且确实令人沮丧,因此我在放弃并决定返回Emacs或Google之前寻求社区的帮助。每次更改代码后,手动重新编译(Ctrl + Shift + B)...

因此,我想做的只是使用ES6模块设置扩展(该扩展仅显示“ Hello World” atm,我专注于设置适当的开发环境)。

我的.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赋予什么价值,所以我尝试给它赋予与label中的任务中的tasks.json属性相匹配的值。它似乎可以运行,所以我认为还可以。

现在,向下到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的转码过程的值on)TypeScript文件。我已经在Gulp扩展中的某个地方看到了该匹配器,所以我想它可能是vscode的一种“类别”,以了解任务正在执行哪种类型的处理工作,但是,我仍然没有真正的线索事情应该如何进行,我发现整个过程令人沮丧,考虑到所有这一切甚至都没有真正写出扩展的逻辑。

我现在的代码似乎可以正确启动我的任务,但是它hangs(因为npm run watch实际上是一个阻塞过程,监视文件的更改并即时对其进行编译) 。使用isBackground似乎并没有完成任何事情,因为该过程似乎根本没有在后台运行。当我为扩展程序启动调试会话时,任务将运行并阻止整个进程进一步进行……仅当我在终端中终止该进程时,调试器才会继续运行,并在新的Vscode调试窗口中加载并激活我的扩展程序..所以这里肯定有我想念的东西

这里有一些善良的灵魂可以引导我正确的方向吗?我只是想让我可以使用ESM编写扩展代码,就是这样。

提前感谢您对此事的任何帮助/建议/提示!

0 个答案:

没有答案