前端从零到一开发vscode插件并发布到插件市场

前端从零到一开发vscode插件并发布到插件市场

  • 背景
  • 目标
  • 成果展示
  • 一条龙实现过程
    • 安装插件脚手架和工具
    • 创建项目
    • 运行
    • 调试
    • 打包
      • 第一次打包前的必要操作
    • 发布
    • 第一次发布前账号准备
      • 注册Azure DevOps发布账号-获取token
      • 注册vscode开发者账号
      • 终端登录vsce
    • 发布方式2-手动上传插件
  • 进阶
    • 开发代码片段插件
      • 创建代码片段
      • 配置package.json
    • 结果展示
  • 其他
    • package.json介绍
    • contributes

背景

vscode作为前端开发神器,功能十分强大,这背后是大量vscode插件在支持。比如用react的snippets插件,只需输入rfc即可快速生成一个模版,大大提高了我们的开发效率,也可提早下班。
在这里插入图片描述
作为多年的资深前端,假如我们开发一个好用的插件,同事用上我们的插件,不得大大的说声牛逼😎,同时也是提高段位和收入的好方法。

开发插件的路并非一帆风顺,今天就记录下开发插件的过程和踩过的坑
在这里插入图片描述
所有的步骤都已走通,如果有帮助,请小伙伴们点赞关注😄

下边进入主题

目标

  1. 初级:掌握注册、开发、发布全流程-用小demo实现
  2. 进阶:开发代码片段差价

成果展示

大家可在vscode搜索taro-code
在这里插入图片描述
输入代码提示效果
在这里插入图片描述

一条龙实现过程

安装插件脚手架和工具

# 安装插件脚手架-可快速生成项目
npm install -g yo generator-code
 
# 安装插件发布工具
npm install -g vsce

创建项目

终端 yo code
注意:创建时不要选pnpm,否则后续很麻烦

运行

npm run watch

调试

在 VSCode 中按下 F5 会进入调试状态,这时候会自动打开一个名为 扩展开发宿主 的新窗口。
再在新窗口中,按下 command + shift + p 或 ctrl + shift + p,在里面输入我们插件注册的命令名,按下回车就能触发回调。

在这里插入图片描述

打包

打包指令:

vsce package

// 列出已发布的扩展
vsce ls

// 成功标志
跟目录下出现 taro-code-0.0.1.vsix 文件即可

第一次打包前的必要操作

  1. 第一次打包需要修改readme.md的内容-否则报错
  2. package.json填写发布人,仓库信息
{
  // 1.添加开发者账号
  "publisher": "jerrycc",
  // 2.添加仓库,处理报错
  "repository": "git+https://github.com/username/xxx.git"
  "scripts": {}
}
  1. 添加LICENSE.md
    根目录下增加LICENSE.md文件,即可

发布

vsce publish -p token令牌

第一次发布前账号准备

参考:https://blog.csdn.net/qq_36947128/article/details/136171963

注册Azure DevOps发布账号-获取token

目的:使用token在终端登录vsce账号,然后才能发布

  1. 进入 https://dev.azure.com/
  2. 创建项目,生成token
  3. 生成token时一定注意 1. 选 all accessible organizations, 2.点击右下角的 Show all scopes 找到 Marketplace 选择 Manage。 否则发布会失败
  4. 将生成的token保存,否则找不到,注:可以重新生成。
    在这里插入图片描述

认真看,下边两项不能选错,否则发布失败
在这里插入图片描述

注册vscode开发者账号

  1. 若没有vscode账号需要去注册:https://marketplace.visualstudio.com/manage/createpublisher?managePageRedirect=true。
  2. vscode发布者中心:https://marketplace.visualstudio.com/manage

终端登录vsce

// 输入账号
vsce login jerrycc

// 回车后输入token 
ga2fokrzz6drvuwddy3x2onyluenvvbkipa5jpigv7sf77yttgma

// 登录成功
// 发布
// vsce publish

发布方式2-手动上传插件

访问Visual Studio Marketplace,并登陆上一节中创建的Microsoft账户,然后点击右上角的Publish extension
在这里插入图片描述

进阶

开发代码片段插件

创建代码片段

示例:root/snippets/tarocode.code-snippets,注意后缀名
注:是json格式,可以用此网站转化 https://snippet-generator.app/

{
  "zyfbtn": {
    "prefix": "zyfbtn",
    "body": [
      "<div>",
      "  <button>我是zyfbtn</button>",
      "</div>",
      ""
    ],
    "description": "zyfbtn"
  }
}

代码转化为json
在这里插入图片描述

配置package.json

为了支持react和ts,可配置4份

"contributes": {
  "snippets": [
    {
      "language": "javascript",
      "path": "./snippets/tarocode.code-snippets"
    },
    {
      "language": "javascriptreact",
      "path": "./snippets/tarocode.code-snippets"
    },
    {
      "language": "typescript",
      "path": "./snippets/tarocode.code-snippets"
    },
    {
      "language": "typescriptreact",
      "path": "./snippets/tarocode.code-snippets"
    }
  ],
}

搞定

结果展示

在这里插入图片描述

其他

package.json介绍

{
	// 插件的名字,应全部小写,不能有空格
	"name": "fast-admin",
	// 插件的友好显示名称,用于显示在应用市场,支持中文
	"displayName": "fast-admin",
	// 描述
	"description": "Quickly generate admin page",
	// 版本号
	"version": "0.0.1",
	// 插件最低支持的vscode版本
	"engines": {
		"vscode": "^1.48.0"
	},
	// 插件应用市场分类,可选值: [Programming Languages, Snippets, Linters, Themes, Debuggers, Formatters, Keymaps, SCM Providers, Other, Extension Packs, Language Packs]
	"categories": [
		"Other"
	],
	/** 扩展的激活事件数组,可以被哪些事件激活扩展:
	**	1.onLanguage:${language}
	**	2.onCommand:${command}
	**	3.onDebug
	**	4.workspaceContains:${toplevelfilename}
	**	5.onFileSystem:${scheme}
	**	6.onView:${viewId}
	**	7.onUri
	**	8.*
	**/
	"activationEvents": [
		"onCommand:fast-admin.helloWorld"
	],
	// 插件的主入口
	"main": "./extension.js",
	// 贡献点,整个插件最重要最多的配置项,下面单独列出
	"contributes": {
		// 命令
		"commands": [
			{
				"command": "fast-admin.helloWorld",
				"title": "Hello World"
			}
		]
	},
	// 同 npm scripts
	"scripts": {
		"lint": "eslint .",
		"pretest": "npm run lint",
		"test": "node ./test/runTest.js"
	},
	// 开发依赖
	"devDependencies": {
		"@types/vscode": "^1.48.0",
		"@types/glob": "^7.1.3",
		"@types/mocha": "^8.0.0",
		"@types/node": "^14.0.27",
		"eslint": "^7.6.0",
		"glob": "^7.1.6",
		"mocha": "^8.0.1",
		"typescript": "^3.8.3",
		"vscode-test": "^1.4.0"
	},
	// 以下为一些非关键配置
	// 关键字,用于应用市场搜索
	"keywords": ["vscode", "plugin", "fast", "admin"],
	// 发布者,如果要发布到应用市场的话,这个名字必须与发布者一致
	"publisher": "kukudelaomao",
	// 插件图标,至少128x128像素
	"icon": "images/icon.png",
	// 许可
	"license": "SEE LICENSE IN LICENSE.txt",
	// 问题
	"bugs": {
		"url": "https://github.com/kukudelaomao/fast-admin/issues"
	},
	// 仓库
	"repository": {
		"type": "git",
		"url": "https://github.com/kukudelaomao/fast-admin"
	},
	// 主页
	"homepage": "https://github.com/kukudelaomao/fast-admin/blob/master/README.md"
}

contributes

  1. configuration:设置
  2. commands:命令
  3. menus:菜单
  4. keybindings:快捷键绑定
  5. languages:新语言支持
  6. debuggers:调试
  7. breakpoints:断点
  8. grammars
  9. themes:主题
  10. snippets:代码片段
  11. jsonValidation:自定义JSON校验
  12. views:左侧侧边栏视图
  13. viewsContainers:自定义
  14. activitybar
  15. problemMatchers
  16. problemPatterns
  17. taskDefinitions
  18. colors
	"contributes": {
		// 插件配置项
		"configuration": {
			"type": "object",
			// 配置项标题,会显示在vscode的设置页
			"title": "vscode-plugin-demo",
			"properties": {
				// 这里我随便写了2个设置,配置你的昵称
				"vscodePluginDemo.yourName": {
					"type": "string",
					"default": "guest",
					"description": "你的名字"
				},
				// 是否在启动时显示提示
				"vscodePluginDemo.showTip": {
					"type": "boolean",
					"default": true,
					"description": "是否在每次启动时显示欢迎提示!"
				}
			}
		},
		// 命令
		"commands": [
			{
				"command": "extension.sayHello",
				"title": "Hello World"
			}
		],
		// 快捷键绑定
		"keybindings": [
			{
				"command": "extension.sayHello",
				"key": "ctrl+f10",
				"mac": "cmd+f10",
				"when": "editorTextFocus"
			}
		],
		// 菜单
		"menus": {
			// 编辑器右键菜单
			"editor/context": [
				{
					// 表示只有编辑器具有焦点时才会在菜单中出现
					"when": "editorFocus",
					"command": "extension.sayHello",
					// navigation是一个永远置顶的分组,后面的@6是人工进行组内排序
					"group": "navigation@6"
				},
				{
					"when": "editorFocus",
					"command": "extension.demo.getCurrentFilePath",
					"group": "navigation@5"
				},
				{
					// 只有编辑器具有焦点,并且打开的是JS文件才会出现
					"when": "editorFocus && resourceLangId == javascript",
					"command": "extension.demo.testMenuShow",
					"group": "z_commands"
				},
				{
					"command": "extension.demo.openWebview",
					"group": "navigation"
				}
			],
			// 编辑器右上角图标,不配置图片就显示文字
			"editor/title": [
				{
					"when": "editorFocus && resourceLangId == javascript",
					"command": "extension.demo.testMenuShow",
					"group": "navigation"
				}
			],
			// 编辑器标题右键菜单
			"editor/title/context": [
				{
					"when": "resourceLangId == javascript",
					"command": "extension.demo.testMenuShow",
					"group": "navigation"
				}
			],
			// 资源管理器右键菜单
			"explorer/context": [
				{
					"command": "extension.demo.getCurrentFilePath",
					"group": "navigation"
				},
				{
					"command": "extension.demo.openWebview",
					"group": "navigation"
				}
			]
		},
		// 代码片段
		"snippets": [
			{
				"language": "javascript",
				"path": "./snippets/javascript.json"
			},
			{
				"language": "html",
				"path": "./snippets/html.json"
			}
		],
		// 自定义新的activitybar图标,也就是左侧侧边栏大的图标
		"viewsContainers": {
			"activitybar": [
				{
					"id": "beautifulGirl",
					"title": "美女",
					"icon": "images/beautifulGirl.svg"
				}
			]
		},
		// 自定义侧边栏内view的实现
		"views": {
			// 和 viewsContainers 的id对应
			"beautifulGirl": [
				{
					"id": "beautifulGirl1",
					"name": "美女1"
				},
				{
					"id": "beautifulGirl2",
					"name": "美女2"
				},
				{
					"id": "beautifulGirl3",
					"name": "美女3"
				}
			]
		},
		// 图标主题
		"iconThemes": [
			{
				"id": "testIconTheme",
				"label": "测试图标主题",
				"path": "./theme/icon-theme.json"
			}
		]
	},

参考:
搭建到发布:https://blog.csdn.net/m0_74802419/article/details/136228018
处理打包报错:https://blog.csdn.net/crper/article/details/137558270
vscode如何发布:https://blog.csdn.net/bulucc/article/details/137837339
1.解决vsce发布失败的问题 2.如何开发代码片段 https://blog.csdn.net/qq_36947128/article/details/136171963
将代码转化为json 格式: https://snippet-generator.app/

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/666222.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server 拆分逗号分隔的字段为多条数据

文章目录 引言I 拆分逗号分隔的字段为多条数据1.1 使用`CROSS APPLY `拆分逗号分隔的字段为多条数据1.2 利用CHARINDEX 实现把逗号隔开的字符串拆分成行II 多列转行,逗号分隔(字段拼接/字段分割)1.1 多列转行,逗号分隔2.2 int字段类型的多行数据合并(字段拼接)2.3 SQLserver查询…

揭秘数字货币:比特币背后的技术逻辑

随着科技的飞速发展,数字货币作为一种新兴的经济形态,已经逐渐走入我们的视野。其中,比特币无疑是这一领域的佼佼者。那么,比特币背后的技术逻辑究竟是什么呢?本文将为您揭开这一神秘面纱。 一、区块链技术:比特币的基石 比特币的核心技术就是区块链(Blockchain)。区块…

K210视觉识别模块学习笔记1:第一个串口程序_程序烧录与开机启动

今日开始学习K210视觉识别模块:简单的认识与串口程序 既然K210作为一个视觉识别外设模块来使用&#xff0c;我认为第一个程序 就没必要学点灯之类的了&#xff0c;直接学习串口如何配置开始为妥&#xff0c;毕竟后面都要用到..... 在研究过程中也发现K210程序的烧录与启动也与…

【进阶篇-Day1:JAVA中static关键字、继承、final关键字的介绍】

目录 1、static关键字1.1 static关键字的介绍1.2 static关键字修饰成员的特点&#xff08;1&#xff09;static成员变量&#xff1a;&#xff08;2&#xff09;static成员方法&#xff1a; 1.3 重新认识main方法1.4 static关键字修饰成员的内存图解释 2、继承2.1 继承的介绍2.2…

SQL—DQL之执行顺序(基础)

一、引言 1、编写顺序 2、执行顺序 介绍&#xff1a; DQL语句&#xff08;数据查询语句&#xff09; 1、首先先执行的是 FROM &#xff0c;通过 FROM 来决定我要查询的是哪一张表的数据。 2、紧接着通过 WHERE 来指定查询的条件。 3、第三步就是通过 GROUP BY 以及 HAVING 来…

为了新来的扫地机器人,我差点把自家狗子给扔了

文 | 螳螂观察 作者 | 凯乐 作为一个大龄未婚男青年&#xff0c;我承认&#xff0c;我很懒。 有多懒&#xff1f;就连用来偷懒的扫地机器人我也一直懒得去买。 要不是朋友实在看不下去&#xff0c;在前不久生日时送了我一台二手扫地机器人&#xff08;没错&#xff0c;是他…

.NET数据交互之生成和读取YAML文件

最近在项目中&#xff0c;业务上需要与Python进行交互&#xff0c;而Python程序用的配置文件主要是YAML&#xff0c;程序以命令行形式运行&#xff0c;前端页面由C#通过WPF开发完成。现在需要通过C#生成YAML配置文件&#xff0c;并经过Python读取和修改后&#xff0c;再次由C#进…

运维开发.Kubernetes探针与应用

运维系列 Kubernetes探针与应用 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263…

C/S模型测试

1 1.1代码示例 #include<stdio.h> #include<stdio.h>#include <sys/types.h> /* See NOTES */ #include <sys/socket.h>#include <netinet/in.h> #include <netinet/ip.h> /* superset of previous */ #include <arpa/inet.…

SpringMVC:创建一个简单的SpringMVC框架

目录 一、框架介绍 两个重要的xml文件 SpringMVC执行流程 二、Vscode搭建SpringMVC框架 1、maven创建webapp原型项目 2、pom.xml下添加springmvc的相关依赖 3、在web.xml配置 4、springmvc.xml的配置 5、编写Controller控制器类 6、 编写JSP界面 7、项目结构图 一…

12.RedHat认证-Linux文件系统(下)

12.RedHat认证-Linux文件系统(下) swap虚拟内存 我加一个硬盘做实验sdc # 创建交换分区&#xff08;不用做成逻辑卷也能灵活分区&#xff09; [rootcentos8 ~]# fdisk /dev/sdc -l Disk /dev/sdc&#xff1a;10 GiB&#xff0c;10737418240 字节&#xff0c;20971520 个扇区 …

【监控】prometheus自定义指标 exporter

一、【写在前面】 prometheus自定义指标本质是用代码自己写一个网络访问的采集器&#xff0c;你可以在官网看到&#xff0c;Client libraries | Prometheus官方支持的语言有GO JAVA PYTHON RUBY RUST, 第三方的库就支持的更多了&#xff0c;有BASH C CPP LUA C# JS PHP R PER…

ADuM1201可使用π121U31间接替换π122U31直接替换

ADuM1201可使用π121U31间接替换π122U31直接替换 一般低速隔离通信150Kbps电路可使用π121U31&#xff0c;价格优势较大。速度快的有其它型号可达10M,200M,600M。 本文主要介绍ADUM1201,替换芯片π121U31简单资料请访问下行链接 只要0.74元的双通道数字隔离器&#xff0c;1T1…

智和信通助力中国移动湖南某市分公司县级政府外网运维项目

中国移动湖南某市分公司承建市下属某县政务外网网络建设项目&#xff0c;且在网络建设完工后&#xff0c;承担起运维职责&#xff0c;随着工作的推进市移动公司发现仅靠人力难以高效开展运维工作。 设备类型&#xff1a;OLT、ONU等通信设备 设备品牌&#xff1a;华为、中兴等…

记一次安卓.apk加固,加固后安装失败,重新签名也安装失败问题

1、AndroidStudio打包生成.apk文件 2、使用360加固apk&#xff08;或其他平台&#xff09; 注意&#xff1a;加固后的apk必须进行重新签名才能安装&#xff0c;否则安装失败。apk签名可以使用jarsigner 和 apksigner&#xff0c;jarsigner 只能进行v1签名&#xff1b;apksigner…

【PostgreSQL17新特性之-冗余IS [NOT] NULL限定符的处理优化】

在执行一个带有IS NOT NULL或者NOT NULL的SQL的时候&#xff0c;通常会对表的每一行&#xff0c;都会进行检查以确保列为空/不为空&#xff0c;这是符合常理的。 但是如果本身这个列上有非空&#xff08;NOT NULL&#xff09;约束&#xff0c;再次检查就会浪费资源。甚至有时候…

Git使用规范及命令

文章目录 一、Git工作流二、分支管理三、Git命令操作规范1. 切到develop分支&#xff0c;更新develop最新代码2. 新建feature分支&#xff0c;开发新功能3. 完成feature分支&#xff0c;合并到develop分支4. 当某个版本所有的 feature 分支均合并到 develop 分支&#xff0c;就…

CSS--学习

CSS 1简介 1.1定义 层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现&#xff08;美化内容&#xff09;。 1.2 特性 继承性 子级默认继承父级的文字控制属性。层叠性 相同的属性…

不借助三方平台自主搭建量化回测系统 ——以海龟交易策略为例

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

Vue 2.0使用Vue-count-to给数字添加增长动画

在开发后台管理系统时&#xff0c;时常会遇到数据汇总&#xff0c;为了页面展示更生动&#xff0c;用户体验更好&#xff0c;通常会对汇总的数字加一个逐步递增动画。 实现这个效果一般是用的 Vue-count-to这个插件&#xff0c;这是一款简单好用的一个数字滚动插件&#xff0c;…