前言
古人云:工欲善其事,必先利其器,要想提升编程效率,一个强大的开发工具就显得极其关键。
作为开发者,我们有时候会发现市场上并不存在一个完全满足我们需求的插件,我们可以自己动手量身打造一个VS Code插件。这将帮助我们更好地满足项目需求,也可以分享至全球开发者社区,帮助他人解决问题。
在这篇文章中,我将教会你如何创建一个VS Code插件,该插件能够根据不同的项目自动切换到相应的Node.js版本。
// 安装 yeoman
$ npm install -g yo generator-code
解释
在 yeoman 安装完毕后,我们便可以使用它来生成我们的插件项目。
// 生成项目
$ yo code
解释
执行 yo code 后,创建的过程中出现的交互式命令行,我们需要回答一些问题来初始化项目配置,如下所示:
_-----_ ╭──────────────────────────╮
| | │ Welcome to the Visual │
|--(o)--| │ Studio Code Extension │
`---------´ │ generator! │
( _´U`_ ) ╰──────────────────────────╯
/___A___\ /
| ~ |
__'.___.'__
´ ` |° ´ Y `
? What type of extension do you want to create? New Extension (JavaScript)
? What's the name of your extension? HelloWorld
? What's the identifier of your extension? helloworld
? What's the description of your extension? vscode plugin demo
? Enable JavaScript type checking in 'jsconfig.json'? Yes
? Initialize a git repository? Yes
? Which package manager to use? npm
解释
const { readFileSync } = require('fs');
const { join } = require('path');
const vscode = require('vscode');
// My vscode extension code
function activate() {
vscode.window.onDidOpenTerminal((terminal) => {
// 获取工作区目录
if (!vscode.workspace.workspaceFolders) {
return;
}
// 获取工作区目录路径
const path = vscode.workspace.workspaceFolders[0].uri.fsPath;
// 获取package.json
const packageJsonFilePath = join(path, '/package.json');
// 读取package.json
let packageJsonString = readFileSync(
packageJsonFilePath,
'utf8'
).toString();
// 读取node版本号
let packageJson = JSON.parse(packageJsonString)
let { nodeVersion } = packageJson
// 修改当前临时窗口node版本
terminal.sendText(`$env:PATH = "E:\\frontend\\nvm\\nvm\\${nodeVersion};" + $env:PATH`, true)
})
}
解释
临时配置当前命令窗口node版本
$env:Path = "E:\frontend\nvm\nvm\14.18.0;" + $env:Path
解释
❝当我们完成插件开发后,我们可以将其发布到 VS Code 的 MarketPlace,让其他人也能使用我们的插件。可参考官方资料 publishing-extensions
$ npm install -g vsce
解释
$ vsce package // 打包插件 .vsix 格式
解释
$ vsce publish // 发布到 MarketPlace
解释
作者:前端 magic
相关网址:
https://github.com/AKclown/js-to-ts
本文为 @ 万能的大雄 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。