本文首发于政采云前端团队博客: DIY VSCode 插件,让你的开发效率日新月异
Visual Studio Code(简称 VSCode)凭借其占用内存小、文件加载快、稳定性好、插件丰富等等特色,从众多 IDE 中脱颖而出,受到了广大开发人员的青睐。工欲善其事,必先利其器。选择适合本身的 VSCode 插件,可以让你的开发效率日新月异。VSCode 插件市场 上面插件百花齐放,但实际开发过程当中问题复杂且多变,有时候并不能找到彻底知足你实际开发需求的插件,那就本身动手 DIY 一个吧。VSCode 提供如下扩展能力:代码自动补全、自定义命令/菜单/快捷键、悬浮提示、自定义跳转、主题定制、自定义 WebView 等等。你能够根据本身的须要随意组合使用。javascript
接下来,将以一个简单的代码片断自动补全插件为例,让你们 10 分钟快速上手。代码片断自动补全也是你们编写代码时使用频率最高、最能帮助提升编码速度的功能。 Demo源码
官方推荐使用的脚手架工具 Yeoman 和 Generator-code前端
npm install -g yo generator-code
插件打包和发布工具 vscejava
npm install -g vsce
yo code
PS:脚手架工具支持建立插件(New Extension)、主题(New Color Theme)、新语言支持(New Language Support)、代码片断(New Code Snippets)、键盘映射(New Keymap)、插件包(New Extension Pack)。以上不一样类型的脚手架模板只是侧重的预设功能不一样,其本质仍是 VSCode 插件。
// package.json ... "contributes": { "snippets": [ { "language": "javascript", "path": "./snippets/javascript.json" }, { "language": "typescript", "path": "./snippets/javascript.json" }, ... ] }, ...
在 package.json 的 contributes 下添加自定义的 Snippets。language 表示在某种特定语言下,对应的代码片断才会被加载生效。 path 表示代码片断文件的存放路径。上面配置即表示 javascript 或 typescript 语言环境下,将加载 ./snippets/javascript.json 文件中的代码片断。node
// ./snippets/javascript.json { "forEach": { "prefix": "fe", "body": [ "${1:array}.forEach(function(item) {", "\t${2:// body}", "});" ], "description": "Code snippet for 'forEach'" }, "setTimeout": { "prefix": "st", "body": [ "setTimeout(function() {", "\t${0:// body}", "}, ${1:1000});" ], "description": "Code snippet for 'setTimeout'" } ... }
上述例子中:git
${1:array}
、 {2:// body}
,使用占位符方便在引用代码段的时候能够经过 tab 键快速切换跳转到对应位置编辑。冒号前面的序号表示切换的顺序,冒号后面的内容则是占位显示的默认文本。至此,插件的编码工做已经完成,是否是很简单~ 接下去,咱们运行插件看下效果。web
选择 VSCode 的调试菜单(command+shift+D),点击运行按钮,弹出一个名为扩展开发主机的窗口,这个窗口就是包含这个插件的临时调试窗口。typescript
打包命令:vsce package
,打包完成后会生成 .vsix 后缀的安装包。若是插件仅为我的或者团队内部共享,那么手动安装便可使用,无需发布到 VSCode 插件市场。shell
发布命令:vsce publish
。发布须要发布者帐号,前往 Azure DevOps。npm
. ├── .vscode ├── launch.json # 插件加载和调试的配置 ├── CHANGELOG.md # 变动记录 ├── extension.js # 插件执行入口文件 ├── jsconfig.json # JavaScript 类型检查配置 ├── node_modules ├── package-lock.json ├── package.json # 声明当前插件相关信息 ├── README.md # 插件使用说明 └── vsc-extension-quickstart.md
1. package.json:插件的声明文件,包含 2 个重要配置项 activationEvents、contributes。json
activationEvents 用于定义插件什么时候被加载/激活。例子中用到的是onCommand,在 Hello World 命令被调用时,插件才会被激活。目前支持 9 种激活事件:
onLanguage:${language}
打开特定语言文件时onCommand:${command}
调用某个 VSCode命令时onDebug
Debug 时workspaceContains:${toplevelfilename}
当打开包含某个命名规则的文件夹时onFileSystem:${scheme}
以某个协议(ftp/sftp/ssh等)打开文件或文件夹时onView:${viewId}
指定 id 的视图展开时onUri
插件的系统级 URI 打开时onWebviewPanel
webview 触发时*
VSCode 启动时。不建议使用,性能上会受到必定影响。PS:出于性能考虑,插件都是懒加载的,只有特定场景下才会加载/激活,才会消耗内存等资源。
// package.json { // 插件名称 "name": "vscode-test-extension", // 显示名称 "displayName": "vscode-test-extension", // 描述信息 "description": "An awesome vscode extension", // 版本号 semver格式 "version": "0.0.1", // 在插件市场展现的图标 "icon": "icon.png", // 发布者名字 "publisher": "chenmenglan", // 插件最低支持的vscode版本号 "engines": { "vscode": "^1.12.0" }, // 所属分类,可选 Languages/Snippets/Linters/Themes/Other 等等 "categories": ["Snippets", "Other"], // 加载/激活方式 "activationEvents": ["onCommand:extension.helloWorld"], // 入口文件路径 "main": "./extension.js", // 注册扩展项配置 "contributes": { "commands": [ { "command": "extension.helloWorld", "title": "Hello World" } ], "snippets": [ { "language": "javascript", "path": "./snippets/javascript.json" }, ... ] } }
2. extension.js:插件的执行入口文件,一般包括激活(activate)和禁用(deactivate)2 个方法。命令必须先使用 vscode.commands.registerCommand 进行注册,而后将返回的实例添加至 context.subscriptions 中。当命令被激活时,会执行相应的回调方法。
const vscode = require('vscode'); /** * @param {vscode.ExtensionContext} context */ function activate(context) { console.log('Congratulations, your extension "vscode-test-extension" is now active!'); let disposable = vscode.commands.registerCommand('extension.helloWorld', function () { // 右下角消息提示 vscode.window.showInformationMessage('Hello World!'); }); context.subscriptions.push(disposable); } exports.activate = activate; function deactivate() {} exports.deactivate = deactivate;
若是你重复处理同一类问题超过 3 次,那么是时候该停下来思考下如何来化繁为简了。不妨花上些时间,梳理下使用频率最高或者最佳实践的代码片断,DIY 一个本身的插件,将重心放到更核心更复杂代码逻辑上。丰富的 扩展 API 让一切都比想象中来的简单,Just do what you want~
Auto Close Tag,自动补全关闭标签。
Auto Rename Tag,自动重命名标签。
Bracket Pair Colorizer,括号配对着色,方便查看多层嵌套的代码。
Beautify,快速格式化代码。
ESLint,语法规则和代码风格的检查工具。
Path Autocomplete,文件路径自动补全。
Document This,快速生成注释。
Todo Highlighter,高亮标记 TODO 注释,以便更容易追踪任何未完成的业务。
GitLens,加强了 VSCode 中内置的Git功能,包括查看代码做者、查看历史提交记录等等。
还有其余好用的插件,欢迎补充~~
招人,前端,隶属政采云前端大团队(ZooTeam),50 余个小伙伴正等你加入一块儿浪~ 若是你想改变一直被事折腾,但愿开始能折腾事;若是你想改变一直被告诫须要多些想法,却无从破局;若是你想改变你有能力去作成那个结果,却不须要你;若是你想改变你想作成的事须要一个团队去支撑,但没你带人的位置;若是你想改变既定的节奏,将会是“5年工做时间3年工做经验”;若是你想改变原本悟性不错,但老是有那一层窗户纸的模糊… 若是你相信相信的力量,相信平凡人能成就非凡事,相信能遇到更好的本身。若是你但愿参与到随着业务腾飞的过程,亲手参与一个有着深刻的业务理解、完善的技术体系、技术创造价值、影响力外溢的前端团队的成长历程,我以为咱们该聊聊。任什么时候间,等着你写点什么,发给 ZooTeam@cai-inc.com