Skip to content
This repository was archived by the owner on May 6, 2025. It is now read-only.

Commit 20015bb

Browse files
committed
add error report and optimize loading function
1 parent 2fa83b8 commit 20015bb

22 files changed

Lines changed: 301 additions & 236 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,4 @@ example/**/tcb.json
6767
node_modules
6868

6969
.vscode
70+
.idea

bin/cloudbase.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
#!/usr/bin/env node
2-
const program = require('commander')
32
const chalk = require('chalk')
3+
const Sentry = require('@sentry/node')
4+
const program = require('commander')
45
const logSymbols = require('log-symbols')
56
const updateNotifier = require('update-notifier')
67
const pkg = require('../package.json')
78

89
const isBeta = pkg.version.indexOf('-') > -1
910

11+
// Sentry 错误上报
12+
Sentry.init({
13+
release: pkg.version,
14+
dsn: 'https://fff0077d06624655ad70d1ee25df419e@report.url.cn/sentry/1782'
15+
})
16+
1017
// 检查更新
1118
const ONE_DAY = 86400000
1219
// Beta 版 1 个小时检查一次,稳定版 1 天检查一次

package-lock.json

Lines changed: 90 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"author": "",
2121
"license": "ISC",
2222
"dependencies": {
23+
"@sentry/node": "^5.5.0",
2324
"@zeit/ncc": "^0.13.0",
2425
"archiver": "^3.0.0",
2526
"arg": "^4.1.1",
@@ -28,6 +29,7 @@
2829
"commander": "^3.0.1",
2930
"configstore": "^5.0.0",
3031
"del": "^3.0.0",
32+
"dot-prop": "^5.1.0",
3133
"form-data": "^2.5.0",
3234
"fs-extra": "^7.0.1",
3335
"get-stream": "^5.1.0",
@@ -43,7 +45,9 @@
4345
"portfinder": "^1.0.20",
4446
"query-string": "^6.8.1",
4547
"tar-fs": "^2.0.0",
46-
"update-notifier": "^3.0.1"
48+
"update-notifier": "^3.0.1",
49+
"write-file-atomic": "^3.0.1",
50+
"xdg-basedir": "^4.0.0"
4751
},
4852
"devDependencies": {
4953
"@types/configstore": "^4.0.0",

src/auth/auth.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ import crypto from 'crypto'
44
import portfinder from 'portfinder'
55
import queryString from 'query-string'
66
import open from 'open'
7-
import ora from 'ora'
87
import Logger from '../logger'
98
import { Credential } from '../types'
109
import { getPlatformRelease } from '../utils/os-release'
11-
import { fetch } from '../utils'
10+
import { fetch, loading } from '../utils'
1211

1312
const logger = new Logger('Auth')
1413

@@ -83,7 +82,7 @@ async function createLocalServer(): Promise<ServerRes> {
8382
// 打开云开发控制台,获取授权
8483
export async function getAuthTokenFromWeb(): Promise<Credential> {
8584
return new Promise(async (resolve, reject) => {
86-
const authSpinner = ora('正在打开腾讯云获取授权').start()
85+
loading.start('正在打开腾讯云获取授权')
8786

8887
try {
8988
const { server, port } = await createLocalServer()
@@ -94,7 +93,7 @@ export async function getAuthTokenFromWeb(): Promise<Credential> {
9493
const CliAuthUrl = `${CliAuthBaseUrl}?port=${port}&hash=${hash}&mac=${mac}&os=${os}`
9594
await open(CliAuthUrl)
9695

97-
authSpinner.succeed(
96+
loading.succeed(
9897
'已打开云开发 CLI 授权页面,请在云开发 CLI 授权页面同意授权!'
9998
)
10099

@@ -124,7 +123,7 @@ export async function getAuthTokenFromWeb(): Promise<Credential> {
124123
)
125124
} catch (err) {
126125
logger.error(err.message)
127-
authSpinner.fail('获取授权失败!')
126+
loading.fail('获取授权失败!')
128127
reject(err)
129128
}
130129
})

src/commands/env/domain.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import program from 'commander'
2-
import ora from 'ora'
32
import inquirer from 'inquirer'
4-
import { printCliTable, getEnvId } from '../../utils'
3+
import { printCliTable, getEnvId, loading } from '../../utils'
54
import { CloudBaseError } from '../../error'
65
import { successLog } from '../../logger'
76
import { getEnvAuthDomains, createEnvDomain, deleteEnvDomain } from '../../env'
@@ -82,18 +81,18 @@ program
8281
const { configFile } = options.parent
8382
const assignEnvId = await getEnvId(envId, configFile)
8483

85-
const loadSpinner = ora('拉取环境安全域名中...').start()
84+
loading.start('拉取环境安全域名中')
8685

8786
const domains = await getEnvAuthDomains({
8887
envId: assignEnvId
8988
})
9089

9190
if (domains.length === 0) {
92-
loadSpinner.fail('域名安全为空!')
91+
loading.fail('域名安全为空!')
9392
return
9493
}
9594

96-
loadSpinner.succeed('拉取环境安全域名成功!')
95+
loading.succeed('拉取环境安全域名成功!')
9796

9897
const domainList = domains.map(item => item.Domain)
9998

src/commands/env/index.ts

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import program from 'commander'
2-
import ora from 'ora'
3-
import { listEnvs, createEnv, getEnvInfo } from '../../env'
4-
import { printCliTable } from '../../utils'
2+
import { listEnvs, createEnv, getEnvInfo, updateEnvInfo } from '../../env'
3+
import { printCliTable, loading, getEnvId } from '../../utils'
54
import { CloudBaseError } from '../../error'
6-
import { successLog, warnLog } from '../../logger'
5+
import { warnLog, successLog } from '../../logger'
76

87
import './domain'
98
import './login'
@@ -71,21 +70,44 @@ program
7170
throw new CloudBaseError('环境名称不能为空!')
7271
}
7372

73+
loading.start('创建环境中')
74+
7475
const res = await createEnv({
7576
alias
7677
})
7778

79+
loading.succeed('创建环境成功!')
80+
loading.start('环境初始化中')
81+
7882
if (res.Status === 'NORMAL') {
79-
successLog('创建环境成功!')
83+
loading.start('环境初始化成功')
8084
return
8185
}
8286

8387
// 检查环境是否初始化成功
84-
const initSpinner = ora('环境初始化中...').start()
8588
try {
8689
await checkEnvAvailability(res.EnvId)
87-
initSpinner.succeed('环境初始化成功')
90+
loading.succeed('环境初始化成功')
8891
} catch (e) {
89-
initSpinner.fail(e.message)
92+
loading.fail(e.message)
9093
}
9194
})
95+
96+
program
97+
.command('env:rename <name> [envId]')
98+
.description('重命名环境')
99+
.action(async function(name: string, envId: string, options) {
100+
if (!name) {
101+
throw new CloudBaseError('环境名称不能为空!')
102+
}
103+
104+
const { configFile } = options.parent
105+
const assignEnvId = await getEnvId(envId, configFile)
106+
107+
await updateEnvInfo({
108+
envId: assignEnvId,
109+
alias: name
110+
})
111+
112+
successLog('更新环境名成功 !')
113+
})

src/commands/functions/code-update.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import ora from 'ora'
21
import path from 'path'
32
import { FunctionContext } from '../../types'
43
import { CloudBaseError } from '../../error'
54
import { updateFunctionCode } from '../../function'
65
import { getEnvInfo } from '../../env'
6+
import { loading } from '../../utils'
77

88
export async function codeUpdate(ctx: FunctionContext, options) {
99
const { name, envId, config, functions } = ctx
@@ -25,17 +25,17 @@ export async function codeUpdate(ctx: FunctionContext, options) {
2525
throw new CloudBaseError(`函数 ${name} 配置不存在`)
2626
}
2727

28-
const spinner = ora(`[${func.name}] 函数代码更新中...`).start()
28+
loading.start(`[${func.name}] 函数代码更新中...`)
2929
try {
3030
await updateFunctionCode({
3131
func,
3232
envId,
3333
codeSecret,
3434
functionRootPath: path.join(process.cwd(), config.functionRoot)
3535
})
36-
spinner.succeed(`[${func.name}] 函数代码更新成功!`)
36+
loading.succeed(`[${func.name}] 函数代码更新成功!`)
3737
} catch (e) {
38-
spinner.stop()
38+
loading.stop()
3939
throw e
4040
}
4141
}

0 commit comments

Comments
 (0)