对 vscode 一无所知的前提下开发了聊天室插件
https://github.com/ferried/hacpai-cr
1.明确需求
首先,明确了自己的需求和开发步骤
1.必须登录得到 token 设置到 cookie 里
2.通过查看浏览器得到了 wss 的链接,并通过 D 大获取了必要的 ws 头信息
3.得出了需要让用户输入用户名密码,基于 nodejs 发送请求到 hacpai 换取 token
4.换取 token 存储到 vscode 中等待 wss 连接时使用
5.wss 设置头 User-Agent
等等等
6.wss 返回信息类型划分为 online
为获取当前在线用户 msg
为用户输入的信息
所以我需要
1.一个输入框(用户名密码发消息等)
2.一个消息列表(用来显示消息)
3.一个在线用户列表
通过官方的 GettingStart 一步步走下去了解到
1.输入框为 vscode.window.InputBox
2.vscode 原生列表(文件列表)为树格式需要自己写 provider
提供 data
最后找到一个官方项目集合示例
https://github.com/Microsoft/vscode-extension-samples/tree/master/tree-view-sample
并仿照尝试,可以渲染数据才开始进行开发
2.分阶段开发
将需求拆分成几个步骤
1.用户认证
2.长链接
3.渲染数据
3.进行开发
1.首先安装脚手架生成项目
npm install -g yo generator-code
yo projectName
2.command 和 package.json
Ctrl+Shift+P 呼出命令行界面输入插件命令何以出发函数主要是通过 package.json
定义好的 command 名称作为入口
commands
就是配置该插件当前所有的命令比如下面配置出了如下几个命令
//extension.hacpaicr.signin-命令id,在函数中使用
//Hacpaicr: Signin-命令值,在 Ctrl+Shift+P 命令输入框中使用
extension.hacpaicr.signin:Hacpaicr: Signin
extension.hacpaicr.signout:Hacpaicr: Signout
最后把配置的命令加入到 activationEvents 数组中表示启用此命令
"activationEvents": [
"onCommand:extension.hacpaicr.signin",
"onCommand:extension.hacpaicr.signout",
"onCommand:extension.hacpaicr.connect",
"onCommand:extension.hacpaicr.send",
"onView:view.hacpai.cr",
"onView:view.hacpai.cru"
],
"contributes": {
"viewsContainers": {
"activitybar": [{
"id": "hacpaicr",
"title": "hacpaicr",
"icon": "resources/hacpai.svg"
}]
},
"views": {
"hacpaicr": [{
"id": "view.hacpai.cr",
"name": "ChatRoom"
},
{
"id": "view.hacpai.cru",
"name": "Users"
}
]
},
"commands": [{
"command": "extension.hacpaicr.signin",
"title": "Hacpaicr: Signin"
},
{
"command": "extension.hacpaicr.signout",
"title": "Hacpaicr: Signout"
},
{
"command": "extension.hacpaicr.connect",
"title": "Hacpaicr: Connect"
},
{
"command": "extension.hacpaicr.send",
"title": "Hacpaicr: Send"
}
]
}
用户认证
项目入口为 src/xtension.ts
// context为当前插件的域对象
export function activate(context: vscode.ExtensionContext) {
// 创建一个User对象并将当前域传入其中
const user = new User(context);
// vscode注册命令,传入的值为`extension.hacpaicr.signin`也就是package.json中声明的命令id,当用户输入此命令的Title敲击回车,将出发此函数
vscode.commands.registerCommand(COMMADN_SIGN_IN, async() = >{
await user.sign();
});
......
user.sign()
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于