前端从零到一开发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/

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入分析 Android Service (三)

文章目录 深入分析 Android Service (三)1. Service 与 Activity 之间的通信2. 详细示例&#xff1a;通过绑定服务进行通信2.1 创建一个绑定服务2.2 绑定和通信 3. 优化建议4. 使用场景5. 总结 深入分析 Android Service (三) 1. Service 与 Activity 之间的通信 在 Android …

115道MySQL面试题(含答案),从简单到深入!

1. 什么是数据库事务&#xff1f; 数据库事务是一个作为单个逻辑工作单元执行的一系列操作。事务具有ACID属性&#xff0c;即原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;和持久性&#xf…

手机站怎么推广

随着手机的普及和移动互联网的快速发展&#xff0c;越来越多的人开始使用手机进行在线购物、社交娱乐、阅读资讯等&#xff0c;同时也催生了越来越多的手机站的出现。但是&#xff0c;在海量的手机站中&#xff0c;要让自己的手机站脱颖而出&#xff0c;吸引更多用户访问和使用…

CSS 【实战】 “四合院”布局

效果预览 页面要求&#xff1a; 上下固定高度左右固定宽度中间区域自适应宽高整个页面内容撑满全屏&#xff0c;没有滚动条 技术要点 使用 html5 语义化标签 header 网页内的标题区域nav 导航区域aside 侧边栏footer 页脚区域section 内容分区article 文章区域 清除浏览器默…

微信小程序区分运行环境

wx.getAccountInfoSync() 是微信小程序的一个 API&#xff0c;它可以同步获取当前账号信息。返回对象中包含小程序 AppID、插件的 AppID、小程序/插件版本等信息。 返回的对象结构如下&#xff1a; 小程序运行环境&#xff0c;可选值有&#xff1a;develop&#xff08;开发版&…

主备切换大揭秘:保证系统永不停机的秘密

Hello,大家好!我是小米,一个积极活泼、热爱分享技术的小伙伴。今天我们来聊聊一个很重要的主题:分布式分区容错性中的主备切换。无论你是一个经验丰富的开发者,还是刚刚入门的小白,这篇文章都将为你揭开分布式系统的神秘面纱,带你深入了解其中的关键技术。让我们开始吧!…

【赠书第26期】AI绘画教程:Midjourney使用方法与技巧从入门到精通

文章目录 前言 1 Midjourney入门指南 1.1 注册与登录 1.2 界面熟悉 1.3 基础操作 2 Midjourney进阶技巧 2.1 描述词优化 2.2 参数调整 2.3 迭代生成 3 Midjourney高级应用 3.1 创意启发 3.2 团队协作 3.3 商业应用 4 总结与展望 5 推荐图书 6 粉丝福利 前言 在…

污水净化之旅:可视化技术揭秘城市“血液”的循环奥秘

在繁华的都市背后&#xff0c;有一个默默守护着我们的“肾脏”——污水处理厂。它悄无声息地处理着每天产生的污水&#xff0c;确保我们的生活环境洁净美好。但你知道这个“肾脏”是如何工作的吗&#xff1f;今天&#xff0c;就让我们一起走进污水处理的神秘世界&#xff0c;通…

Leetcode:寻找两个正序数组的中位数

题目链接&#xff1a;4. 寻找两个正序数组的中位数 - 力扣&#xff08;LeetCode&#xff09; 题目分析 1、当只有一个有序数组时&#xff0c;该数组的中位数会将该数组分为两份&#xff1a;左子数组 和 右子数组 2、当有两个有序数组时&#xff0c; 我们仍然可以通过一条分隔…

社区供稿丨GPT-4o 对实时互动与 RTC 的影响

以下文章来源于共识粉碎机 &#xff0c;作者AI芋圆子 前面的话&#xff1a; GPT-4o 发布当周&#xff0c;我们的社区伙伴「共识粉碎机」就主办了一场主题为「GPT-4o 对实时互动与 RTC 的影响」讨论会。涉及的话题包括&#xff1a; GPT-4o 如何降低延迟&#xff08;VAD 模块可…

LabVIEW中进行步进电机的位置控制

在LabVIEW中进行步进电机的位置控制&#xff0c;通常涉及以下几个关键步骤&#xff1a;设置硬件、配置通信、编写控制算法和实施反馈控制。以下是一个详细的介绍。 硬件设置 步进电机&#xff1a;选择合适的步进电机&#xff0c;根据负载和应用需求选择适当的步数和转矩。 驱…

FL Studio21.2.8中文版让你的音乐创作如鱼得水

在音乐的世界里&#xff0c;我们都是探索者&#xff0c;追求着无尽的创新和可能性。而在这个过程中&#xff0c;我们往往会遇到各种挑战和困扰。如何快速高效地创作出满意的音乐作品&#xff1f;如何将我们的创意完美地呈现出来&#xff1f;这些问题可能一直困扰着你。今天&…

成都欣丰洪泰文化传媒有限公司助力品牌快速崛起

在当今数字化浪潮汹涌的时代&#xff0c;电商行业作为新经济的代表&#xff0c;正以其独特的魅力和无限的潜力&#xff0c;引领着商业模式的创新与变革。在这个充满机遇与挑战的领域里&#xff0c;成都欣丰洪泰文化传媒有限公司凭借其专业的电商服务能力和前瞻性的战略眼光&…

如何在.htaccess文件创建一个自定义404页面

本周有一个客户&#xff0c;购买Hostease的虚拟主机&#xff0c;询问我们的在线客服&#xff0c;如何在.htaccess文件创建一个自定义404页面&#xff1f;我们为用户提供相关教程&#xff0c;用户很快解决了遇到的问题。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可…

MVC和MVVM

MVC Model层&#xff1a;用于处理应用程序数据逻辑的部分&#xff0c;通常负责在数据库中存取数据 View&#xff08;视图&#xff09;处理数据显示的部分。通常视图是依据模型数据创建的 Controller&#xff08;控制器&#xff09;是处理用户交互的部分。通常控制器负责从视…

从零开始学Vue3--环境搭建

1.搭建环境 下载nodejs nodejs下载地址 更新npm npm install -g npm 设置npm源&#xff0c;加快下载速度 npm config set registry https://registry.npmmirror.com 使用脚手架创建项目 npm create vuelatest 根据你的需要选择对应选项 进入新建的项目下载依赖 npm in…

Tasker+SendSilentMail实现钉钉自动打卡

Tasker 允许用户根据自定义的“配置文件”(Profiles)&#xff0c;在特定的“背景”(Contexts)下&#xff0c;执行指定的“任务”(Tasks)。以下是关于Tasker的详细介绍&#xff1a; 强大的自定义能力&#xff1a;用户可以根据自己的需求&#xff0c;创建各种配置文件和任务&…

【BUG】流式响应requests得到: ping - 和时间戳

前情提要 运行Langchain-Chatchat项目&#xff0c;使用自定义请求访问API Server流式输出 报错展示 b: ping - 2024-05-22 00:46:04.83252000:00\r\n\r\n报错原因 这通常是由于 Server-Sent Events (SSE) 实现中使用的“心跳”机制&#xff0c;以确保连接保持活跃。一些 SSE…

Java 在Word文档中添加、删除页面

在排版或者编辑Word文档时&#xff0c;可能会需要增加新页面或删除某个已有页面&#xff0c;以便更好地呈现内容。下面将介绍如何使用国产Java控件来实现在Word文档中增删页面的功能。 目录 Java 在Word文档末尾新增一页 Java 在Word文档指定位置插入一页 Java 删除Word文档…

百度ERNIE系列预训练语言模型浅析(4)-总结篇

总结&#xff1a;ERNIE 3.0与ERNIE 2.0比较 &#xff08;1&#xff09;相同点&#xff1a; 采用连续学习 采用了多个语义层级的预训练任务 &#xff08;2&#xff09;不同点&#xff1a; ERNIE 3.0 Transformer-XL Encoder(自回归自编码), ERNIE 2.0 Transformer Encode…