在我平时的工作中会经常用到svn blame这个命令,但是vscode现有的svn扩展普遍都不能自定义右键菜单。

所以我产生一个想法:自己动手为vscode开发一款svn的扩展来定制右键菜单,本文记录这个svn扩展的开发记录,此扩展开发约耗时周末中的一天。

最终成果:在vscode扩展中搜索:svnHelper就可以找到我编写的svn扩展,商店下载地址:https://marketplace.visualstudio.com/items?itemName=qingqingzhao.svnhelper

vscode的svn扩展源代码

重点:这几个库拉下来之后,我尝试直接通过vsce package指令生成vsix,全部都失败了,编译代码时有不同的出错,只能去看vscode的开发文档。

这里我列一下我找到的几个开源的vscode的tortoise svn 扩展,每个仓库的代码我大概扫了一下:

如果想自己往右键菜单中添加选项,这个扩展的源代码比较简单易懂:https://github.com/florentulve/vstortoise

这个可以提交整个workspace:https://github.com/fantacytyx/vscode-tortoise-svn

这个提供很多的命令,https://github.com/cdsama/tortoise-svn-for-vscode

其它解决办法

在时间急迫的情况下,我找到了这个神器,在vscode中可以打开系统右键菜单,这样也可以满足我的需求,只是它需要多点一下鼠标

Windows Explorer Context Menu:https://marketplace.visualstudio.com/items?itemName=florentulve.vstortoise

github上源码报的错

上述几个源码库在编译时无一列外都会报错,我猜原因可能是我安装的nodejs和vscode版本太新有关系,因为这些库都是三四年前的。

我的操作步骤是看vscode的官方文档来操作的,步骤如下:

首先通过npm install来安装依赖,但会报:Cannot find module 'vscode'.

然后npm install vscode 之后,再次编译就有一堆的 node.d.ts编译出错

尝试过修改package.json中依赖库的版本之后,还是无法解决编译时的报错。

结论:期间还出现可以调试,但打包为vsix就会有不一样的报错,最终我放弃了折腾上述几个库,自己重新开始一个项目开发。

vscode扩展开发学习资料

新建一个vscode的扩展项目:范例-hello-world-Microsoft Visual Studio Code 中文手册 (cntofu.com)

推荐这个系列,有配图讲的很清晰:VSCode扩展开发全攻略(三)package.json详解-好记的博客 (haoji.me)

微软的文档及例子

微软的例子:https://github.com/microsoft/vscode-extension-samples

微软VSCode扩展开发官方文档:https://code.visualstudio.com/docs/extensions/overview

生成vsix及发布到市场文档:https://code.visualstudio.com/api/working-with-extensions/publishing-extension

书籍

如果时间充实的同学,可以看看微软韩老师的这本书《Visual Studio Code 权威指南》,在第15章有讲到如何开发一个vscode扩展

开发扩展的步骤

需要下载nodejs,用来编译及发布

需要安装的库:

用来生成新建项目的:npm install -g yo generator-code

用来打包vsix的:npm i vsce -g

开发扩展的步骤

  1. cd到你要把项目保存的路径,然后通过yo code新建一个项目,然后选项项目的开发语言,熟悉C#的可选TypeScript
  2. 编写扩展代码
  3. 按F5运行扩展,或者在运行调试这里,运行或新建调试项:Run Extension
  4. vsce package,把扩展打包为vsix文件
  5. vsce publish,把扩展发布到商店

发布到vscode商店

这个命令不能使用了:vsce create-publisher your-publisher-name

需要到这个网站进行操作(提交的时候可能需要挂VPN):https://aka.ms/vscode-create-publisher

发布遇到问题

这个报错需要在package.json中把publisher的名字与申请的发布名字一致

ERROR  The Personal Access Token verification has failed. Additional information:

Error: Access Denied: e2d743d1-0ffd-4e04-a41d-c894878f29ba needs the following permission(s) on the resource /qingqingzhao to perform this action: View user permissions on a resource

开发及发布的注意事项

ps:开发过程中还遇到了其它的问题,可参考我的这篇文章《知乎vscode插件修改和重新编译

发布的注意事项如果repository有填则会检查github仓库?看到有篇文章中写道,因为我是放在gitee上的,所以我没填。

建议往项目中添加这几个文件,否则每次打包时都会需要你二次确认

LICENSE.txt

CHANGELOG.md

package.json中的name建议全小写,否则会有黄色警告线,每一项的意思如果不清晰的话,把鼠标移上去就会有提示这项是干啥的。

为vscode开发一款svn右键菜单扩展的更多相关文章

  1. svn右键菜单不显

    问题1: 32位svn客户端安装到64位win7机器上,出现svn右键菜单不显. 网上有些说,,选择Mufwin7,关键下拉列表没有这项. 后来有人推荐64位系统安装64svn;32位系统安装32sv ...

  2. 几款jQuery右键菜单插件介绍

    在网页中使用自定义右键菜单,实现上皆为使用javascript禁用浏览器默认的右键菜单,然后在网页中响应鼠标右键事件,弹出自定义的菜单. 类似右键菜单的组件网上很多.一般而言,改变浏览器的默认菜单应当 ...

  3. 自己写一个chrome扩展程序 - 右键菜单扩展

    最近在学习Spring,心想dotnet如何实现类似形式呢.于是想认真学习Casetle组件,发现没有书籍!而spring的书多得很.于是只好找网上教程了.发现系统的文章不多.Terrylee好多文章 ...

  4. 几款jQuery右键菜单插件

    1.jQuery Very Simple ContextMenu Plugin 2.ContextJS Project Page:http://lab.jakiestfu.com/contextjs/ ...

  5. [原创] Delphi小工具(Windows资源管理器右键菜单扩展)

    两个小工具 1. 项目临时文件清理 2. Android Ndk 编译 c/c++ jni 源码工具. 下载后,点击Reg.bat就可以完成注册安装.不需要时点击 UnReg.Bat 就可以删除菜单. ...

  6. 【连载】Bootstrap开发漂亮的前端界面之自定义右键菜单

    连载: 1<教你用Bootstrap开发漂亮的前端界面> 2.<Bootstrap开发漂亮的前端界面之实现原理> 网页中的自定义右键菜单越来越普遍,自定义右键菜单可以增强用户体 ...

  7. [xPlugins] jQuery Contextmenu右键菜单

    [2012-04-12] Contextmenu 右键菜单 v0.1 版本发布 [功能] 在特定区域弹出右键菜单 [功能] 可以在弹出右键菜单区域内,再屏蔽某个小区域. [功能] 有两种方式添加右键菜 ...

  8. ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单

    前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...

  9. 关于FlexPaper 2.1.2版本 二次开发 Logo 、打印、搜索、缩略图、添加按钮、js交互、右键菜单、书签等相关问题

    2015-03-02 更新文章,由于需求修改,更改了flexpaper插件,故增加第9.10.11小节,下载代码时请注意. 先废话几句.最近用到文档在线浏览功能,之前用的是print2flash(一个 ...

随机推荐

  1. jdbc创建数据库的连接

    package com.gylhaut.db; import java.sql.Connection;import java.sql.DriverManager;import java.sql.Res ...

  2. Spring MVC 04-- 接收前端参数json格式的方式

    /** * 第一种:以RequestParam接收 * 前端传来的是json数据不多时:{"id":1},可以直接用@RequestParam来获取值 * * @param id ...

  3. 网关中间件-Nginx(二)

    网关中间件-Nginx(一) 第一部分我们主要介绍如下几点: 1.nginx的基本概念 2.nginx结合业务场景实现负载均衡 3.常见问题的举例 这一部分主要介绍Nginx中限流,缓存,动静分离,以 ...

  4. 知识点简单总结——BSGS与EXBSGS

    知识点简单总结--BSGS与EXBSGS BSGS 给出 $ A,B,C,(A,C)=1 $ ,要你求最小的 $ x $ ,使得 $ A^x \equiv B(mod \ C) $ . 在数论题中经常 ...

  5. 【深度学习 01】线性回归+PyTorch实现

    1. 线性回归 1.1 线性模型 当输入包含d个特征,预测结果表示为: 记x为样本的特征向量,w为权重向量,上式可表示为: 对于含有n个样本的数据集,可用X来表示n个样本的特征集合,其中行代表样本,列 ...

  6. synchronized已经不在臃肿了,放下对他的成见之初识轻量级锁

    前言 物竞天择,适者生存.JDK也在不断的优化中.关于JDK中synchronized锁内部也是不断的优化,前面我们分析了偏向锁用来解决初期问题,随着争抢的不断堆积轻量级锁营运而生. 关注我,一个不断 ...

  7. 关于“TypeError: Assignment to constant variable”的问题解决方案

    在项目开发过程中,在使用变量声明时,如果不注意,可能会造成类型错误比如: Uncaught (in promise) TypeError: Assignment to constant variabl ...

  8. spring-boot中的AOP

    public class User { private Integer id; private String username; private String note; public User(In ...

  9. 解释 AOP 模块?

    AOP 模块用于发给我们的 Spring 应用做面向切面的开发, 很多支持由 AOP 联 盟提供,这样就确保了 Spring 和其他 AOP 框架的共通性.这个模块将元数据编 程引入 Spring.

  10. 解释 AOP?

    面向切面的编程,或 AOP, 是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理.