Javascript 为VsCode编写扩展:监视任务
如果这个问题已经被问到,并且我的分析缺乏对问题的理解,我表示歉意:我只是从VsCode开始,所以很可能我严重缺乏必要的知识 我花了不到8个小时在谷歌上搜索和阅读Vscode文档,但我似乎找不到一个我试图实现的示例: 我正在尝试使用Js(而不是TypeScript)编写一个简单的插件。我面临的问题是,我想使用ES模块而不是普通的JS模块来编写ES6代码(简而言之:我想在扩展代码中使用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 为了做到这一点,我所理解的是,我必须配
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编写扩展代码的程度,就是这样
提前感谢您在这件事上提供的任何帮助/建议/提示!我没有答案,但是您可以通过查看