apptools-lab / AppToolkit

🐘 The Front-end Env Toolkit(前端环境管理工具)
569 stars 73 forks source link

feat: support install app and tool #2

Closed luhc228 closed 3 years ago

luhc228 commented 3 years ago

Preview

222

目录说明

├── main           # 主进程相关代码
├── renderer       # 渲染进程相关代码

主进程 (main 目录)

├── constants.ts
├── data
|  ├── data.json
|  └── shells
├── index.ts
├── ipc
|  ├── getBasePackagesInfo.ts
|  ├── getNodeInfo.ts
|  ├── index.ts
|  ├── installBasePackages.ts
|  └── installNode.ts
├── node
|  ├── NvmManager.ts
|  └── index.ts
├── packageInfo                               # 获取本地软件/Cli/IDE 插件信息方法
|  ├── IDEExtension                          # IDE 插件信息
|  ├── cli                                             # Cli 信息 如 git/node 等
|  ├── dmg.ts                                     # dmg 信息
|  └── index.ts
├── packageInstaller                         # 软件/Cli/IDE 插件安装类
|  ├── CliInstaller.ts
|  ├── DmgInstaller.ts
|  ├── IDEExtensionInstaller.ts
|  ├── ZipInstaller.ts
|  └── index.ts
├── preload.ts
├── tsconfig.json
├── types                                             # 存放 ts 类型
|  └── index.ts
├── utils                                                # 存放各种工具函数
|  ├── downloadFile.ts
|  ├── executeBashConfigFile.ts
|  ├── formatWhitespaceInPath.ts
|  ├── getEnvFromShell.ts
|  ├── getVersionStatus.ts
|  ├── installCommandToPath.ts
|  ├── isCliInstalled.ts
|  ├── killChannelChildProcess.ts
|  ├── log.ts
|  └── writeLog.ts
└── window.ts

渲染进程(renderer 目录)

就是一个 icejs 应用

本地数据库设计

默认在本地 ~/.toolkit 目录下存放数据,包括安装包、json 文件等,均从 OSS 上下载:

~/.toolkit
└── data.json (安装包信息。目前为了方便调试,暂时放在代码中,后面放在 oss 上,使用定时任务脚本每日更新)
├── git-2.31.0-intel-universal-mavericks.dmg
└── VSCode-darwin-universal.zip

data.json 数据结构

{
  // 基础工具
  "bases": [
    {
      "title": "Git",
      "name": "git",
      "description": "分布式版本控制软件",
      "icon": "https://img.alicdn.com/imgextra/i2/O1CN012cOEYH1QgKmtKX8Ju_!!6000000002005-2-tps-200-200.png",
      "downloadUrl": "https://iceworks.oss-cn-hangzhou.aliyuncs.com/toolkit/packages/dmg/git-2.31.0-intel-universal-mavericks.dmg",
      "version": "2.31.0",    // 当前工具最新的版本,和 oss 上最新的安装包的版本一致
      "recommended": true,    // 是否推荐
      "isInternal": false,    // 是否内网环境下可安装
      "type": "cmd",          // 工具类型,目前包括 cmd 终端工具(比如 git node) 和 dmg(app)
      "platform": "darwin",   // 工具安装的平台 目前包括 darwin win32(M1 芯片的 mac 后续需要支持)
      "options": {            // 其他配置信息
        "xx": "" 
      }
    },
    {
      "title": "Google Chrome",
      "name": "Google Chrome",
      "description": "谷歌浏览器",
      "icon": "https://img.alicdn.com/imgextra/i2/O1CN01jRdeW91kg8w2eH4YR_!!6000000004712-0-tps-225-225.jpg",
      "downloadUrl": "xxx",
      "version": "89.0.4389.114",    
      "recommended": true,
      "isInternal": false,
      "type": "dmg",
      "platform": "darwin"
    },
  ],
}
alvinhui commented 3 years ago

安装的过程页面,我建议进度步骤条是竖向的,这样能放下更多的步骤?

before

image

after

image

alvinhui commented 3 years ago

我在安装软件的过程中,Toolkit 触发了系统的弹窗,要求我输入密码来授予某个权限。

如果我们确实需要某个权限(必要),那么在打开软件的时候就应该让用户授予,如果用户不授予则关闭自己(无法使用该软件)。

这样的处理方式与手机上的 App 是一致的。

alvinhui commented 3 years ago

安装完成的页面建议有更多的信息:

image

例如:

安装完成,总共耗时 xx 时间:

alvinhui commented 3 years ago

不知道你那边会不会有这个问题,就是 toolkit 在安装结果中显示 nvm 安装完成了,但是实际没有安装。

image

在首页中始终显示“未安装”,可以看下面的 GIF 演示效果:

alvinhui commented 3 years ago

文件夹名不建议用动词,建议重命名为:

alvinhui commented 3 years ago

主进程的 /data.json/sh 建议放到一个目录下:

├── data      
|  ├── config.json                   
|  ├── shells                         
|      ├── foo.sh           
alvinhui commented 3 years ago

Installer 作为一个比较重要的实现,声明一下接口 interface 会让代码可读性更好一些。

reviewed

luhc228 commented 3 years ago

文件夹名不建议用动词,建议重命名为:

  • getLocalInfo => packageInfo
  • installPackage => packageInstaller

done

luhc228 commented 3 years ago

Todo:

alvinhui commented 3 years ago

VSCodeExtensionInstaller 如果 code command 不存在,是否可以考虑通过路径的方式把插件下载下来存放到 VS Code 插件目录下? 本质也是在 Toolkit 下实现一下 code 的功能了。这样的话倒是可以看看 code 命令行工具的实现是怎样的。 如果可以的话记个 TODO 吧? 直接用 code command 的方式失败率可能会比较高的,VSCode 安装的时候可能注册这个命令行工具失败。

alvinhui commented 3 years ago

还有一个问题就是软件签名。 目前的安装包是本地机器打的,本地机器得安装一个 MacOS 证书,不然会报一个错误。

image

找一下 思忠、宝码或者浩睿要一下这个证书来安装到你的机器上,或者我们新申请一个证书吧。

luhc228 commented 3 years ago

VSCodeExtensionInstaller 如果 code command 不存在,是否可以考虑通过路径的方式把插件下载下来存放到 VS Code 插件目录下? 本质也是在 Toolkit 下实现一下 code 的功能了。这样的话倒是可以看看 code 命令行工具的实现是怎样的。 如果可以的话记个 TODO 吧? 直接用 code command 的方式失败率可能会比较高的,VSCode 安装的时候可能注册这个命令行工具失败。

实际上 Toolkit 是模拟注册 code 这个命令,如下图: image 注册 code 这个命令失败率应该不会很高,只是一个软链接。

下载插件还需要找到每个 .vsix 文件的下载地址。