资讯专栏INFORMATION COLUMN

VS Code插件开发指南(view-readme)

yy736044583 / 2632人阅读

摘要:本次给大家带来的分享是关于插件的一些经验,分享的内容是我写的一个插件。为了解决上面这个问题,我开发了这个插件。

本次给大家带来的分享是关于VS Code插件的一些经验,分享的内容是我写的一个插件:view-readme。

开发背景

在本地安装好所有npm包后,有的时候想看看某个模块的文档,了解其特性以及如何使用。于是打开node_modules文件夹,大家都知道,这个文件夹里面的文件是非常多的,很难定位到我们想看的模块,并且这么多的目录树展开后,严重影响到编辑的使用。

为了解决上面这个问题,我开发了view-readme这个插件。在任何时候你想查看npm包的文档时,按快捷键并输入想要查看的模块名称,自动为你打开该模块的README.md文档。

环境准备

1.安装Yeoman和VS Code脚手架

npm install -g yo generator-code

2.生成项目模版

yo code

3.配置选项

选择第二项(JavaScript)

扩展名称

扩展唯一标识

扩展描述

发布作者

是否创建git仓库

4.模版目录

.
|____.eslintrc.json       
|____.gitignore                
|____.vscode                     // vscode配置目录
| |____extensions.json
| |____launch.json
| |____settings.json
|____.vscodeignore               // 发布时过滤掉的文件
|____CHANGELOG.md                // 发布记录
|____extension.js                // 插件入口
|____jsconfig.json               // js规则
|____package.json                // 资源配置
|____README.md                   // 文档
|____test                        // 自动化测试目录
| |____extension.test.js
| |____index.js
|____vsc-extension-quickstart.md

5.运行

打开新窗口

加载插件目录

进入调试

Launch Extension

打开命令面板(cmd+shift+p)

输入hello world,回车

弹窗Hello World提示

插件代码

资源配置介绍

{
    "name": "vscode-view-readme",
    "displayName": "view-readme",
    "description": "Open readme.md at nearly path of node_modules quickly. ",
    "version": "0.1.3",
    "publisher": "ansenhuang",
    "icon": "images/logo128.png",
    "engines": {
        "vscode": "^1.10.0"
    },
    "galleryBanner": {                     // 发布后的预览页配置
        "color": "#eff1f3",                // banner颜色
        "theme": "light"                   // 主题(light, dark)
    },
    "categories": [
        "Other"                            // 插件分类
    ],
    "activationEvents": [                  // 启动项
        "onCommand:viewReadme.showLocal"   // 触发这个命令时启动
    ],
    "main": "./src/extension",             // 插件入口
    "contributes": {                       // 配置
        "configuration": {                 // 定义默认参数
            "type": "object",
            "title": "View readme configuration",
            "properties": {                // 这里定义的参数可以在vscode中取到
                "view-readme.savePath": {
                    "type": "string",
                    "default": "",
                    "description": "Save in local path when request remote."
                },
                "view-readme.npmUrl": {
                    "type": "string",
                    "default": "https://registry.npmjs.org/",
                    "description": "Get data from remote url."
                }
            }
        },
        "commands": [                                 // 命令配置
            {
                "command": "viewReadme.showLocal",    // 注册的命令
                "title": "Readme: Open markdown file" // 命令显示在面板的标题
            }
        ],
        "keybindings": [                              // 快捷键配置
            {
                "command": "viewReadme.showLocal",    // 要触发的命令
                "key": "ctrl+shift+l",                // windows系统的快捷键
                "mac": "cmd+shift+l"                  // mac系统的快捷键
            }
        ]
    },
    "scripts": {
        "postinstall": "node ./node_modules/vscode/bin/install"
    },
    "devDependencies": {
        "@types/mocha": "^2.2.32",
        "@types/node": "^6.0.40",
        "eslint": "^3.6.0",
        "mocha": "^2.3.3",
        "typescript": "^2.0.3",
        "vscode": "^1.0.0"
    }
}

src/extension.js

var vscode = require("vscode");
var Local = require("./Local");
var { INPUT_PROMPT } = require("./config");

function activate (context) {
    // 注册命令
    var disposableLocal = vscode.commands.registerCommand("viewReadme.showLocal", function () {
        vscode.window.showInputBox({  // 调出输入框
            prompt: INPUT_PROMPT
        }).then(function (moduleName) {
            new Local(moduleName);    // 回车后执行
        });
    });

    context.subscriptions.push(disposableLocal);
}

function deactivate () {}

// exports
exports.activate = activate;
exports.deactivate = deactivate;

src/Local.js

var fs = require("fs");
var path = require("path");
var vscode = require("vscode");
var {
    MARKDOWN_PREVIEW,
    README_NAMES,
    NO_FILE,
    NOT_FOUND
} = require("./config");

function Local (moduleName) {
    this.moduleName = moduleName;

    moduleName && this.init();
}

Local.prototype = {
    init: function () {
        var files = vscode.workspace.textDocuments; // 获取当前打开的文件路径
        if (files.length) {
            var last = files.length - 1;
            this.handlePath(path.dirname(files[last].fileName)); // 取最后打开的文件目录,基于这个路径去查找node_modules目录
        } else {
            vscode.window.showInformationMessage(NO_FILE); // 弹出提示信息
        }
    },
    handlePath: function (dir) {
        if (dir === "/") { // 已到达根目录
            vscode.window.showInformationMessage(NOT_FOUND);
            return;
        }

        var modulePath = path.join(dir, "node_modules", this.moduleName);
        if (fs.existsSync(modulePath)) {
            this.handleReadme(modulePath); // 找到了模块目录
        } else {
            this.handlePath(path.dirname(dir)); // 未找到则继续向上查找
        }
    },
    handleReadme: function (modulePath) {
        var readmeName = README_NAMES.find(function (name) {
            return fs.existsSync(path.join(modulePath, name));
        });

        if (readmeName) {
            var readmePath = path.join(modulePath, readmeName);
            vscode.commands.executeCommand(MARKDOWN_PREVIEW, vscode.Uri.parse("file://" + readmePath)); // 执行markdown命令,打开文件
        } else {
            vscode.window.showInformationMessage(NOT_FOUND);
        }
    }
};

module.exports = Local;

src/config.js

exports.MARKDOWN_PREVIEW = "markdown.showPreview";
exports.README_NAMES = ["README.md", "readme.md", "Readme.md", "README", "readme"];
exports.INPUT_PROMPT = "Enter module name";
exports.NO_FILE = "Please open file firstly.";
exports.NOT_FOUND = "Module not found!";

插件编写完成,重新运行一下试试效果吧。

发布插件
账号

账号注册

Create new account

添加Personal Access Token(地址:https://[your name].visualstudio.com/_details/security/tokens,注意Token只显示一次,最好自己保存一份)

发布工具

安装

npm install -g vsce

创建发布作者

vsce create-publisher (publisher name)

发布

vsce publish

打包成二进制文件

vsce package
结尾

大家可以在VS Code插件中搜索view-readme来安装这个插件。

项目仓库:https://github.com/ansenhuang/vscode-view-readme

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88216.html

相关文章

  • VS Code插件开发介绍(一)

    摘要:发布插件插件开发完后就可以发布了,需要安装安装完后,需要去注册并生成一个。总结本文介绍了插件开发的基本流程,实现了一个简单的插件。更多的开发技巧,可以看这个系列的第二篇插件开发介绍二 前言 前段时间做了一个基于命令行的效率工具,可以自动生成组件的模板代码。自己用起来还觉得挺好,但在组内案例几次后大家都不愿意用,究其原因还是命令行工具使用起来门槛有点高,不方便。由于组内已经统一使用VS ...

    thursday 评论0 收藏0
  • 我为 VS Code 开发了一个 Deno 插件

    摘要:自发布以来就备受关注,也有很多媒体和开发者称为下一代。所以在写这个插件之前,我又为写了一个插件。插件提供了开箱即用的支持,开发者不需要任何配置,但是有一个前提是开发者需要使用内置的。 这几天为 Deno 开发了一个 VS Code 插件:Deno support for VSCode,GitHub 地址:https://github.com/justjavac/...。 自 Deno ...

    YanceyOfficial 评论0 收藏0
  • VS Code上手与超实用插件安利

    摘要:软件跨平台支持以及,运行流畅,可谓是微软的良心之作微软有这个宇宙最强,自然也不会弱宇宙最强编辑器说到代码编辑器,我们有必要提一提还有。 原文链接:VS Code上手与超实用插件安利 工欲善其事必先利其器 Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义热键、括号...

    miracledan 评论0 收藏0
  • vs code 插件折腾记(一)

    摘要:以下简称是微软开发同时支持和系统且开放源代码的代码编辑器,并且是开源免费使用的,也是当下最受欢迎的代码编辑器之一官网下载地址文章已更新插件折腾记二经过我一段时间的使用,发现一些插件是必不可少的,现在给大家推荐一些非常实用的插件下载好安装打开 Visual Studio Code(以下简称vs code) 是 微软开发同时支持Windows、Linux、和macOS系统且开放源代码的代码...

    lidashuang 评论0 收藏0
  • vs code 插件折腾记(一)

    摘要:以下简称是微软开发同时支持和系统且开放源代码的代码编辑器,并且是开源免费使用的,也是当下最受欢迎的代码编辑器之一官网下载地址文章已更新插件折腾记二经过我一段时间的使用,发现一些插件是必不可少的,现在给大家推荐一些非常实用的插件下载好安装打开 Visual Studio Code(以下简称vs code) 是 微软开发同时支持Windows、Linux、和macOS系统且开放源代码的代码...

    vslam 评论0 收藏0

发表评论

0条评论

阅读需要支付1元查看
<