vscode插件开发总结

前言

最近利用空闲时间开发了一个vscode插件,在开发过程中遇到了很多问题,反复查看了大量文档,故特此记录

项目搭建

为方便开发者开发,vscode官方为我们提供了一个脚手架模板,只需npm全局安装,执行命令即可

npm install -g yo generator-code
yo code

image.png

配置项根据自己的喜好选择,我这里开发语言选择的是typeScript。没有其他要求的话,一路回车,就可以完成项目搭建。

以下是插件项目的目录

image.png

重点关注两个文件 package.jsonsrc/extension.ts,后续插件的布局显示,按钮显示及命令配置等都是在package.json 的 contributes 属性下,而插件的入口就是 extension.ts。activate 就是插件激活函数,deactivate就是插件关闭函数。

API介绍

这里主要介绍一些常用的Api

vscode.commands.registerCommand('',()=>{}):为插件注册执行命令,接受一个字符串为命令名和一个回调函数



vscode.window.createTreeView('',{ 'treeDataProvider':{} }): 创建一个左边菜单树形结构的视图,另一个参数必须包含 treeDataProvider 属性





vscode.workspace.workspaceFolders:获取当前工作区的文件夹目录


vscode.window.createWebviewPanel(id, title, column, options):创建一个新的视图面板,即webview,是类似浏览器一样的视图,这里面的内容是用HTML+CSS+JS来实现的。


vscode.window.showErrorMessage(''):右下角弹窗提示框


vscode.window.createInputBox(): 顶部弹出的输入框

context.globalState.get(''):存储本地数据的方法

context.globalState.update(''):获取本地数据。通过globalState操作的数据是永久存储在本地的,除非用 update 将其设置成 undefined 这个数据才会被清除

context.subscriptions.push():将命令函数添加到插件上

以上的 context 是从 activate 激活函数的回调参数上传下来的

其他API及具体方法参数详见官方API地址

开发事项

首先,要在 package.jsoncontributes 下的 commands 属性配置一个命令,

image.png

command 用于 vscode.commands.registerCommand 注册使用,title 用于在vscode 搜索使用。
按F5 可进入调试模式,在弹出的调试窗口里面按 ctrl + shift + P,输入 Hello World 即可看到相应的命令,选择回车就回看到提示框。

vscode 的插件函数大部分都是以类的模式来编写的,所以在拆分模块上也应该要以类的形式导出。

contributes

contributes,上面介绍过这是配置vscode 插件命令,按钮显示,菜单显示的属性,以下是vscode的分区图

image.png

contributes 包含以下属性

commands:配置命令



viewsContainers:用于侧边栏显示的按钮图标





views:treeView 显示的标题名称


menus:treeView 模块上面的按钮,用于单独操作每个模块


webview

webview的内容是用HTML+CSS来实现的,页面挂载很简单,直接赋值在html属性上,但是由于赋值的是字符串形式的值,所以要求html的内容要完整,所有样式表和script脚本最好用外部引入的形式,因为内嵌可能会导致部分样式失效

const panel = vscode.window.createWebviewPanel()



panel.webview.html = getHtml()





const getHtml = () => {
    return `<!DOCTYPE html>
                <html lang="en">
                <head>
                    <meta charset="UTF-8">
                    <meta name="viewport" content="width=device-width, initial-scale=1.0">
                    <link href=" " rel="stylesheet">
		    <title>Document</title>
                     <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
		</head>
			<body></body>
		</html>`
}

如果你想编写 vue 或者 react 的形式也是可以的,但就是必须用script脚本引入的方式,另写一个script脚本生成Vue 对象或者 React 对象。

通信

从vscode 传到 webview 使用的是 postMessage

// vscode 发送
const panel = vscode.window.createWebviewPanel()
panel.webview.postMessage({ })





//webview 接收
window.addEventListener('message', (event) => {
    const data = event.data
    console.log(data)
})


从webview 传输到 vscode

// webview 发送
const vscode = acquireVsCodeApi()
vscode.postMessage({})






// vscode 接收
const panel = vscode.window.createWebviewPanel()
panel.webview.onDidReceiveMessage(
  async (message) => {
   console.log(message)
  },
  null,
  []
)

打包

因为这个插件是内部使用的,故不考虑对外发布,只做本地打包安装,先安装打包工具 vsce

npm i vsce -g

然后去除 READ.md 的内容,自己编写解释

其次,将 package.json 里面的 devdependencies 改成 dependencies,不然打包之后,devdependencies 里面的包不会被打包进去,插件运行会报错。

开始打包

vsce package

image.png

如图,会生成一个 .vsix 的文件,期间可以会提示你完善 packahe.json的一些信息,不需要的话可以忽略

安装插件
将打包完成的插件路径复制过去,执行命令

code --install-extension E:\my-code\my-code-0.0.1.vsix

window系统的话在 C:/用户/用户/.vscode/extensions 下就能看到插件

而且在vscode的插件系统也能看到这个插件了

总结

以上是个人插件开发的总结,有很多细节没有顾及到,但是掌握了以上,至少就能对开发插件有进一步的认识

参考文档:

VS Code插件开发教程

VSCode 插件开发

官方API地址

VSCode 官方demo

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYYogvTW' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片