本次給你們帶來的分享是關於VS Code插件的一些經驗,分享的內容是我寫的一個插件:view-readme。node
在本地安裝好全部npm包後,有的時候想看看某個模塊的文檔,瞭解其特性以及如何使用。因而打開node_modules文件夾,你們都知道,這個文件夾裏面的文件是很是多的,很難定位到咱們想看的模塊,而且這麼多的目錄樹展開後,嚴重影響到編輯的使用。git
爲了解決上面這個問題,我開發了view-readme
這個插件。在任什麼時候候你想查看npm包的文檔時,按快捷鍵並輸入想要查看的模塊名稱,自動爲你打開該模塊的README.md文檔。github
1.安裝Yeoman和VS Code腳手架typescript
npm install -g yo generator-code
2.生成項目模版npm
yo code
3.配置選項json
選擇第二項(JavaScript)windows
擴展名稱bash
擴展惟一標識markdown
擴展描述工具
發佈做者
是否建立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
來安裝這個插件。