很抱歉是否已经问过这个问题,以及我对这件事的理解是否缺乏分析:我只是从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编写扩展代码,就是这样。
提前感谢您对此事的任何帮助/建议/提示!