nodebbs 0.0.8 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -17
- package/dist/commands/clean/index.d.ts +1 -0
- package/dist/commands/clean/index.js +15 -2
- package/dist/commands/db/import.d.ts +10 -0
- package/dist/commands/db/import.js +87 -0
- package/dist/commands/pack/index.js +5 -11
- package/dist/commands/rebuild/index.js +3 -3
- package/dist/commands/restart/index.js +1 -2
- package/dist/commands/start/index.d.ts +1 -1
- package/dist/commands/start/index.js +71 -63
- package/dist/commands/stop/index.js +1 -3
- package/dist/interactive.js +2 -2
- package/dist/templates/docker-compose.lowmem.yml +3 -49
- package/dist/templates/docker-compose.yml +91 -34
- package/dist/templates/env +26 -11
- package/dist/utils/docker.d.ts +47 -0
- package/dist/utils/docker.js +57 -6
- package/dist/utils/env.d.ts +1 -1
- package/dist/utils/env.js +102 -20
- package/dist/utils/selection.d.ts +1 -1
- package/dist/utils/selection.js +7 -7
- package/oclif.manifest.json +100 -60
- package/package.json +1 -1
- package/dist/templates/docker-compose.prod.yml +0 -120
- package/dist/templates/init-db.sql +0 -14
package/dist/utils/env.js
CHANGED
|
@@ -12,39 +12,121 @@ export async function initEnv() {
|
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
14
|
logger.info('正在创建 .env 文件...');
|
|
15
|
+
// 检查模板文件
|
|
16
|
+
let templateContent = '';
|
|
15
17
|
let sourceFile = '';
|
|
16
|
-
let isBuiltIn = false;
|
|
17
18
|
if (await fileExists('.env.docker.example')) {
|
|
18
19
|
sourceFile = '.env.docker.example';
|
|
20
|
+
templateContent = await fs.readFile(sourceFile, 'utf-8');
|
|
19
21
|
}
|
|
20
22
|
else {
|
|
21
23
|
// 使用内置模板
|
|
22
24
|
sourceFile = getTemplatePath('env');
|
|
23
|
-
|
|
25
|
+
templateContent = await fs.readFile(sourceFile, 'utf-8');
|
|
24
26
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
const { input, password } = await import('@inquirer/prompts');
|
|
28
|
+
const crypto = await import('node:crypto');
|
|
29
|
+
function generateSecret(length = 32) {
|
|
30
|
+
return crypto.randomBytes(length).toString('base64').replace(/[^a-zA-Z0-9]/g, '').substring(0, length);
|
|
31
|
+
}
|
|
32
|
+
console.log('\n请配置环境变量(按 Enter 使用默认值或自动生成):\n');
|
|
33
|
+
// 1. 收集用户输入
|
|
34
|
+
const postgresPassword = await password({
|
|
35
|
+
message: '设置 POSTGRES_PASSWORD (数据库密码) [空值自动生成]:',
|
|
36
|
+
mask: '*',
|
|
37
|
+
validate: (value) => true, // 允许为空以自动生成
|
|
38
|
+
}) || generateSecret();
|
|
39
|
+
const redisPassword = await password({
|
|
40
|
+
message: '设置 REDIS_PASSWORD (Redis 密码) [空值自动生成]:',
|
|
41
|
+
mask: '*',
|
|
42
|
+
validate: (value) => true,
|
|
43
|
+
}) || generateSecret();
|
|
44
|
+
const jwtSecret = await password({
|
|
45
|
+
message: '设置 JWT_SECRET (JWT 密钥) [空值自动生成]:',
|
|
46
|
+
mask: '*',
|
|
47
|
+
validate: (value) => true,
|
|
48
|
+
}) || generateSecret(64);
|
|
49
|
+
const webPort = await input({
|
|
50
|
+
message: '设置 WEB_PORT (前端端口):',
|
|
51
|
+
default: '3100'
|
|
52
|
+
});
|
|
53
|
+
const apiPort = await input({
|
|
54
|
+
message: '设置 API_PORT (后端端口):',
|
|
55
|
+
default: '7100'
|
|
56
|
+
});
|
|
57
|
+
const defaultApiUrl = `http://localhost:${apiPort}`;
|
|
58
|
+
const nextPublicApiUrl = await input({
|
|
59
|
+
message: '设置 NEXT_PUBLIC_API_URL (前端访问后端的地址):',
|
|
60
|
+
default: defaultApiUrl
|
|
61
|
+
});
|
|
62
|
+
const defaultAppUrl = `http://localhost:${webPort}`;
|
|
63
|
+
const nextPublicAppUrl = await input({
|
|
64
|
+
message: '设置 NEXT_PUBLIC_APP_URL (应用访问地址):',
|
|
65
|
+
default: defaultAppUrl
|
|
66
|
+
});
|
|
67
|
+
const corsOrigin = await input({
|
|
68
|
+
message: '设置 CORS_ORIGIN (允许跨域的域名):',
|
|
69
|
+
default: '*'
|
|
70
|
+
});
|
|
71
|
+
// 2. 显示配置预览
|
|
72
|
+
console.log('\n================ 配置预览 ================');
|
|
73
|
+
console.log(`POSTGRES_PASSWORD: ${postgresPassword.substring(0, 3)}******`);
|
|
74
|
+
console.log(`REDIS_PASSWORD: ${redisPassword.substring(0, 3)}******`);
|
|
75
|
+
console.log(`JWT_SECRET: ${jwtSecret.substring(0, 3)}******`);
|
|
76
|
+
console.log(`WEB_PORT: ${webPort}`);
|
|
77
|
+
console.log(`API_PORT: ${apiPort}`);
|
|
78
|
+
console.log(`NEXT_PUBLIC_API_URL: ${nextPublicApiUrl}`);
|
|
79
|
+
console.log(`NEXT_PUBLIC_APP_URL: ${nextPublicAppUrl}`);
|
|
80
|
+
console.log(`CORS_ORIGIN: ${corsOrigin}`);
|
|
81
|
+
console.log('==========================================\n');
|
|
82
|
+
// 3. 确认生成
|
|
83
|
+
const confirmed = await confirm({
|
|
84
|
+
message: '确认生成 .env 文件?',
|
|
85
|
+
default: true
|
|
86
|
+
});
|
|
87
|
+
if (!confirmed) {
|
|
88
|
+
logger.info('已取消生成 .env 文件。');
|
|
89
|
+
process.exit(0);
|
|
90
|
+
}
|
|
91
|
+
// 4. 替换模板内容
|
|
92
|
+
// 为了保留注释,我们使用简单的字符串替换,而不是 dotenv 解析
|
|
93
|
+
// 注意:这里假设模板中的 key 遵循 standard env format (KEY=value)
|
|
94
|
+
let newEnv = templateContent;
|
|
95
|
+
const replacements = {
|
|
96
|
+
'POSTGRES_PASSWORD': postgresPassword,
|
|
97
|
+
'REDIS_PASSWORD': redisPassword,
|
|
98
|
+
'JWT_SECRET': jwtSecret,
|
|
99
|
+
'WEB_PORT': webPort,
|
|
100
|
+
'API_PORT': apiPort,
|
|
101
|
+
'NEXT_PUBLIC_API_URL': nextPublicApiUrl,
|
|
102
|
+
'NEXT_PUBLIC_APP_URL': nextPublicAppUrl,
|
|
103
|
+
'CORS_ORIGIN': corsOrigin,
|
|
104
|
+
// 如果 API_PORT 变了,模板里可能还需要联动修改 APP_URL 用于 OAuth 回调,这里简单处理
|
|
105
|
+
'APP_URL': nextPublicAppUrl
|
|
106
|
+
};
|
|
107
|
+
// 针对每个 Key 进行替换。
|
|
108
|
+
// 策略:查找 `KEY=...` 并替换为 `KEY=newValue`
|
|
109
|
+
for (const [key, value] of Object.entries(replacements)) {
|
|
110
|
+
// 匹配 KEY=任意非换行字符
|
|
111
|
+
const regex = new RegExp(`^${key}=.*`, 'gm');
|
|
112
|
+
if (regex.test(newEnv)) {
|
|
113
|
+
newEnv = newEnv.replace(regex, `${key}=${value}`);
|
|
29
114
|
}
|
|
30
115
|
else {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
logger.warning('请编辑 .env 文件并修改以下配置:');
|
|
34
|
-
logger.warning(' - POSTGRES_PASSWORD (数据库密码)');
|
|
35
|
-
logger.warning(' - REDIS_PASSWORD (Redis 密码)');
|
|
36
|
-
logger.warning(' - JWT_SECRET (JWT 密钥)');
|
|
37
|
-
const edit = await confirm({
|
|
38
|
-
message: '是否现在编辑 .env 文件?',
|
|
39
|
-
default: false
|
|
40
|
-
});
|
|
41
|
-
if (edit) {
|
|
42
|
-
logger.info('请手动编辑 .env 文件后再次运行命令。');
|
|
43
|
-
process.exit(0);
|
|
116
|
+
// 如果模板里没这个 key,追加到末尾(虽然理论上模板应该有)
|
|
117
|
+
newEnv += `\n${key}=${value}`;
|
|
44
118
|
}
|
|
45
119
|
}
|
|
120
|
+
// 5. 写入文件
|
|
121
|
+
await fs.writeFile('.env', newEnv, 'utf-8');
|
|
122
|
+
// isBuiltIn is not defined in the new logic, need to determine it
|
|
123
|
+
// based on whether sourceFile was .env.docker.example or a template path
|
|
124
|
+
const isBuiltIn = sourceFile === getTemplatePath('env');
|
|
125
|
+
if (isBuiltIn) {
|
|
126
|
+
logger.success('已使用内置模板并填充配置生成 .env');
|
|
127
|
+
}
|
|
46
128
|
else {
|
|
47
|
-
logger.
|
|
129
|
+
logger.success(`已从 ${sourceFile} 复制并填充配置生成 .env`);
|
|
48
130
|
}
|
|
49
131
|
}
|
|
50
132
|
export async function checkEnv(envType) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type EnvType = 'production' | 'lowmem'
|
|
1
|
+
export type EnvType = 'production' | 'lowmem';
|
|
2
2
|
export declare const EnvFlag: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
3
3
|
export declare function setStoredEnv(env: EnvType): Promise<void>;
|
|
4
4
|
export declare function clearStoredEnv(): Promise<void>;
|
package/dist/utils/selection.js
CHANGED
|
@@ -3,17 +3,17 @@ import { select } from '@inquirer/prompts';
|
|
|
3
3
|
import { logger } from './logger.js';
|
|
4
4
|
import fs from 'node:fs/promises';
|
|
5
5
|
import path from 'node:path';
|
|
6
|
-
const ENV_MARKER_FILE = '.
|
|
6
|
+
const ENV_MARKER_FILE = '.env.lock';
|
|
7
7
|
export const EnvFlag = Flags.string({
|
|
8
8
|
char: 'e',
|
|
9
|
-
description: '部署环境 (production, lowmem
|
|
10
|
-
options: ['production', 'lowmem'
|
|
9
|
+
description: '部署环境 (production, lowmem)',
|
|
10
|
+
options: ['production', 'lowmem'],
|
|
11
11
|
});
|
|
12
12
|
async function getStoredEnv() {
|
|
13
13
|
try {
|
|
14
14
|
const content = await fs.readFile(path.resolve(process.cwd(), ENV_MARKER_FILE), 'utf-8');
|
|
15
15
|
const env = content.trim();
|
|
16
|
-
if (['production', 'lowmem'
|
|
16
|
+
if (['production', 'lowmem'].includes(env)) {
|
|
17
17
|
return env;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
@@ -51,9 +51,8 @@ export async function selectEnvironment(env, options = {}) {
|
|
|
51
51
|
const selected = await select({
|
|
52
52
|
message: options.prompt || '请选择运行环境:',
|
|
53
53
|
choices: [
|
|
54
|
-
{ name: '
|
|
55
|
-
{ name: '低配环境 (1C1G
|
|
56
|
-
{ name: '基础环境 (仅用于测试)', value: 'basic' },
|
|
54
|
+
{ name: '标准环境 (推荐)', value: 'production' },
|
|
55
|
+
{ name: '低配环境 (1C1G)', value: 'lowmem' },
|
|
57
56
|
{ name: '❌ 取消', value: '__CANCEL__' },
|
|
58
57
|
],
|
|
59
58
|
loop: true,
|
|
@@ -64,5 +63,6 @@ export async function selectEnvironment(env, options = {}) {
|
|
|
64
63
|
throw error;
|
|
65
64
|
}
|
|
66
65
|
logger.info(`已选择环境: ${selected}`);
|
|
66
|
+
await setStoredEnv(selected);
|
|
67
67
|
return selected;
|
|
68
68
|
}
|
package/oclif.manifest.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"flags": {
|
|
8
8
|
"all": {
|
|
9
9
|
"char": "a",
|
|
10
|
-
"description": "清理所有 (
|
|
10
|
+
"description": "清理所有 (构建缓存、无用镜像、网络、环境锁定)",
|
|
11
11
|
"name": "all",
|
|
12
12
|
"allowNo": false,
|
|
13
13
|
"type": "boolean"
|
|
@@ -24,6 +24,12 @@
|
|
|
24
24
|
"allowNo": false,
|
|
25
25
|
"type": "boolean"
|
|
26
26
|
},
|
|
27
|
+
"env": {
|
|
28
|
+
"description": "清理环境锁定 (Environment Lock)",
|
|
29
|
+
"name": "env",
|
|
30
|
+
"allowNo": false,
|
|
31
|
+
"type": "boolean"
|
|
32
|
+
},
|
|
27
33
|
"force": {
|
|
28
34
|
"char": "f",
|
|
29
35
|
"description": "跳过确认提示",
|
|
@@ -55,14 +61,13 @@
|
|
|
55
61
|
"flags": {
|
|
56
62
|
"env": {
|
|
57
63
|
"char": "e",
|
|
58
|
-
"description": "部署环境 (production, lowmem
|
|
64
|
+
"description": "部署环境 (production, lowmem)",
|
|
59
65
|
"name": "env",
|
|
60
66
|
"hasDynamicHelp": false,
|
|
61
67
|
"multiple": false,
|
|
62
68
|
"options": [
|
|
63
69
|
"production",
|
|
64
|
-
"lowmem"
|
|
65
|
-
"basic"
|
|
70
|
+
"lowmem"
|
|
66
71
|
],
|
|
67
72
|
"type": "option"
|
|
68
73
|
},
|
|
@@ -91,6 +96,56 @@
|
|
|
91
96
|
"backup.js"
|
|
92
97
|
]
|
|
93
98
|
},
|
|
99
|
+
"db:import": {
|
|
100
|
+
"aliases": [],
|
|
101
|
+
"args": {},
|
|
102
|
+
"description": "导入数据库 (PostgreSQL)",
|
|
103
|
+
"flags": {
|
|
104
|
+
"env": {
|
|
105
|
+
"char": "e",
|
|
106
|
+
"description": "部署环境 (production, lowmem)",
|
|
107
|
+
"name": "env",
|
|
108
|
+
"hasDynamicHelp": false,
|
|
109
|
+
"multiple": false,
|
|
110
|
+
"options": [
|
|
111
|
+
"production",
|
|
112
|
+
"lowmem"
|
|
113
|
+
],
|
|
114
|
+
"type": "option"
|
|
115
|
+
},
|
|
116
|
+
"file": {
|
|
117
|
+
"char": "f",
|
|
118
|
+
"description": "SQL 备份文件路径",
|
|
119
|
+
"name": "file",
|
|
120
|
+
"required": true,
|
|
121
|
+
"hasDynamicHelp": false,
|
|
122
|
+
"multiple": false,
|
|
123
|
+
"type": "option"
|
|
124
|
+
},
|
|
125
|
+
"yes": {
|
|
126
|
+
"char": "y",
|
|
127
|
+
"description": "跳过确认提示",
|
|
128
|
+
"name": "yes",
|
|
129
|
+
"allowNo": false,
|
|
130
|
+
"type": "boolean"
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"hasDynamicHelp": false,
|
|
134
|
+
"hiddenAliases": [],
|
|
135
|
+
"id": "db:import",
|
|
136
|
+
"pluginAlias": "nodebbs",
|
|
137
|
+
"pluginName": "nodebbs",
|
|
138
|
+
"pluginType": "core",
|
|
139
|
+
"strict": true,
|
|
140
|
+
"enableJsonFlag": false,
|
|
141
|
+
"isESM": true,
|
|
142
|
+
"relativePath": [
|
|
143
|
+
"dist",
|
|
144
|
+
"commands",
|
|
145
|
+
"db",
|
|
146
|
+
"import.js"
|
|
147
|
+
]
|
|
148
|
+
},
|
|
94
149
|
"db:push": {
|
|
95
150
|
"aliases": [],
|
|
96
151
|
"args": {},
|
|
@@ -98,14 +153,13 @@
|
|
|
98
153
|
"flags": {
|
|
99
154
|
"env": {
|
|
100
155
|
"char": "e",
|
|
101
|
-
"description": "部署环境 (production, lowmem
|
|
156
|
+
"description": "部署环境 (production, lowmem)",
|
|
102
157
|
"name": "env",
|
|
103
158
|
"hasDynamicHelp": false,
|
|
104
159
|
"multiple": false,
|
|
105
160
|
"options": [
|
|
106
161
|
"production",
|
|
107
|
-
"lowmem"
|
|
108
|
-
"basic"
|
|
162
|
+
"lowmem"
|
|
109
163
|
],
|
|
110
164
|
"type": "option"
|
|
111
165
|
}
|
|
@@ -133,14 +187,13 @@
|
|
|
133
187
|
"flags": {
|
|
134
188
|
"env": {
|
|
135
189
|
"char": "e",
|
|
136
|
-
"description": "部署环境 (production, lowmem
|
|
190
|
+
"description": "部署环境 (production, lowmem)",
|
|
137
191
|
"name": "env",
|
|
138
192
|
"hasDynamicHelp": false,
|
|
139
193
|
"multiple": false,
|
|
140
194
|
"options": [
|
|
141
195
|
"production",
|
|
142
|
-
"lowmem"
|
|
143
|
-
"basic"
|
|
196
|
+
"lowmem"
|
|
144
197
|
],
|
|
145
198
|
"type": "option"
|
|
146
199
|
}
|
|
@@ -168,14 +221,13 @@
|
|
|
168
221
|
"flags": {
|
|
169
222
|
"env": {
|
|
170
223
|
"char": "e",
|
|
171
|
-
"description": "部署环境 (production, lowmem
|
|
224
|
+
"description": "部署环境 (production, lowmem)",
|
|
172
225
|
"name": "env",
|
|
173
226
|
"hasDynamicHelp": false,
|
|
174
227
|
"multiple": false,
|
|
175
228
|
"options": [
|
|
176
229
|
"production",
|
|
177
|
-
"lowmem"
|
|
178
|
-
"basic"
|
|
230
|
+
"lowmem"
|
|
179
231
|
],
|
|
180
232
|
"type": "option"
|
|
181
233
|
}
|
|
@@ -203,14 +255,13 @@
|
|
|
203
255
|
"flags": {
|
|
204
256
|
"env": {
|
|
205
257
|
"char": "e",
|
|
206
|
-
"description": "部署环境 (production, lowmem
|
|
258
|
+
"description": "部署环境 (production, lowmem)",
|
|
207
259
|
"name": "env",
|
|
208
260
|
"hasDynamicHelp": false,
|
|
209
261
|
"multiple": false,
|
|
210
262
|
"options": [
|
|
211
263
|
"production",
|
|
212
|
-
"lowmem"
|
|
213
|
-
"basic"
|
|
264
|
+
"lowmem"
|
|
214
265
|
],
|
|
215
266
|
"type": "option"
|
|
216
267
|
}
|
|
@@ -238,14 +289,13 @@
|
|
|
238
289
|
"flags": {
|
|
239
290
|
"env": {
|
|
240
291
|
"char": "e",
|
|
241
|
-
"description": "部署环境 (production, lowmem
|
|
292
|
+
"description": "部署环境 (production, lowmem)",
|
|
242
293
|
"name": "env",
|
|
243
294
|
"hasDynamicHelp": false,
|
|
244
295
|
"multiple": false,
|
|
245
296
|
"options": [
|
|
246
297
|
"production",
|
|
247
|
-
"lowmem"
|
|
248
|
-
"basic"
|
|
298
|
+
"lowmem"
|
|
249
299
|
],
|
|
250
300
|
"type": "option"
|
|
251
301
|
}
|
|
@@ -273,14 +323,13 @@
|
|
|
273
323
|
"flags": {
|
|
274
324
|
"env": {
|
|
275
325
|
"char": "e",
|
|
276
|
-
"description": "部署环境 (production, lowmem
|
|
326
|
+
"description": "部署环境 (production, lowmem)",
|
|
277
327
|
"name": "env",
|
|
278
328
|
"hasDynamicHelp": false,
|
|
279
329
|
"multiple": false,
|
|
280
330
|
"options": [
|
|
281
331
|
"production",
|
|
282
|
-
"lowmem"
|
|
283
|
-
"basic"
|
|
332
|
+
"lowmem"
|
|
284
333
|
],
|
|
285
334
|
"type": "option"
|
|
286
335
|
}
|
|
@@ -308,14 +357,13 @@
|
|
|
308
357
|
"flags": {
|
|
309
358
|
"env": {
|
|
310
359
|
"char": "e",
|
|
311
|
-
"description": "部署环境 (production, lowmem
|
|
360
|
+
"description": "部署环境 (production, lowmem)",
|
|
312
361
|
"name": "env",
|
|
313
362
|
"hasDynamicHelp": false,
|
|
314
363
|
"multiple": false,
|
|
315
364
|
"options": [
|
|
316
365
|
"production",
|
|
317
|
-
"lowmem"
|
|
318
|
-
"basic"
|
|
366
|
+
"lowmem"
|
|
319
367
|
],
|
|
320
368
|
"type": "option"
|
|
321
369
|
}
|
|
@@ -343,14 +391,13 @@
|
|
|
343
391
|
"flags": {
|
|
344
392
|
"env": {
|
|
345
393
|
"char": "e",
|
|
346
|
-
"description": "部署环境 (production, lowmem
|
|
394
|
+
"description": "部署环境 (production, lowmem)",
|
|
347
395
|
"name": "env",
|
|
348
396
|
"hasDynamicHelp": false,
|
|
349
397
|
"multiple": false,
|
|
350
398
|
"options": [
|
|
351
399
|
"production",
|
|
352
|
-
"lowmem"
|
|
353
|
-
"basic"
|
|
400
|
+
"lowmem"
|
|
354
401
|
],
|
|
355
402
|
"type": "option"
|
|
356
403
|
}
|
|
@@ -405,7 +452,7 @@
|
|
|
405
452
|
"rebuild": {
|
|
406
453
|
"aliases": [],
|
|
407
454
|
"args": {},
|
|
408
|
-
"description": "
|
|
455
|
+
"description": "拉取最新镜像并重启服务 (Update & Restart)",
|
|
409
456
|
"flags": {},
|
|
410
457
|
"hasDynamicHelp": false,
|
|
411
458
|
"hiddenAliases": [],
|
|
@@ -430,14 +477,13 @@
|
|
|
430
477
|
"flags": {
|
|
431
478
|
"env": {
|
|
432
479
|
"char": "e",
|
|
433
|
-
"description": "部署环境 (production, lowmem
|
|
480
|
+
"description": "部署环境 (production, lowmem)",
|
|
434
481
|
"name": "env",
|
|
435
482
|
"hasDynamicHelp": false,
|
|
436
483
|
"multiple": false,
|
|
437
484
|
"options": [
|
|
438
485
|
"production",
|
|
439
|
-
"lowmem"
|
|
440
|
-
"basic"
|
|
486
|
+
"lowmem"
|
|
441
487
|
],
|
|
442
488
|
"type": "option"
|
|
443
489
|
}
|
|
@@ -465,14 +511,13 @@
|
|
|
465
511
|
"flags": {
|
|
466
512
|
"env": {
|
|
467
513
|
"char": "e",
|
|
468
|
-
"description": "部署环境 (production, lowmem
|
|
514
|
+
"description": "部署环境 (production, lowmem)",
|
|
469
515
|
"name": "env",
|
|
470
516
|
"hasDynamicHelp": false,
|
|
471
517
|
"multiple": false,
|
|
472
518
|
"options": [
|
|
473
519
|
"production",
|
|
474
|
-
"lowmem"
|
|
475
|
-
"basic"
|
|
520
|
+
"lowmem"
|
|
476
521
|
],
|
|
477
522
|
"type": "option"
|
|
478
523
|
}
|
|
@@ -500,14 +545,13 @@
|
|
|
500
545
|
"flags": {
|
|
501
546
|
"env": {
|
|
502
547
|
"char": "e",
|
|
503
|
-
"description": "部署环境 (production, lowmem
|
|
548
|
+
"description": "部署环境 (production, lowmem)",
|
|
504
549
|
"name": "env",
|
|
505
550
|
"hasDynamicHelp": false,
|
|
506
551
|
"multiple": false,
|
|
507
552
|
"options": [
|
|
508
553
|
"production",
|
|
509
|
-
"lowmem"
|
|
510
|
-
"basic"
|
|
554
|
+
"lowmem"
|
|
511
555
|
],
|
|
512
556
|
"type": "option"
|
|
513
557
|
}
|
|
@@ -535,14 +579,13 @@
|
|
|
535
579
|
"flags": {
|
|
536
580
|
"env": {
|
|
537
581
|
"char": "e",
|
|
538
|
-
"description": "部署环境 (production, lowmem
|
|
582
|
+
"description": "部署环境 (production, lowmem)",
|
|
539
583
|
"name": "env",
|
|
540
584
|
"hasDynamicHelp": false,
|
|
541
585
|
"multiple": false,
|
|
542
586
|
"options": [
|
|
543
587
|
"production",
|
|
544
|
-
"lowmem"
|
|
545
|
-
"basic"
|
|
588
|
+
"lowmem"
|
|
546
589
|
],
|
|
547
590
|
"type": "option"
|
|
548
591
|
}
|
|
@@ -570,14 +613,13 @@
|
|
|
570
613
|
"flags": {
|
|
571
614
|
"env": {
|
|
572
615
|
"char": "e",
|
|
573
|
-
"description": "部署环境 (production, lowmem
|
|
616
|
+
"description": "部署环境 (production, lowmem)",
|
|
574
617
|
"name": "env",
|
|
575
618
|
"hasDynamicHelp": false,
|
|
576
619
|
"multiple": false,
|
|
577
620
|
"options": [
|
|
578
621
|
"production",
|
|
579
|
-
"lowmem"
|
|
580
|
-
"basic"
|
|
622
|
+
"lowmem"
|
|
581
623
|
],
|
|
582
624
|
"type": "option"
|
|
583
625
|
}
|
|
@@ -605,23 +647,23 @@
|
|
|
605
647
|
"flags": {
|
|
606
648
|
"env": {
|
|
607
649
|
"char": "e",
|
|
608
|
-
"description": "部署环境 (production, lowmem
|
|
650
|
+
"description": "部署环境 (production, lowmem)",
|
|
609
651
|
"name": "env",
|
|
610
652
|
"hasDynamicHelp": false,
|
|
611
653
|
"multiple": false,
|
|
612
654
|
"options": [
|
|
613
655
|
"production",
|
|
614
|
-
"lowmem"
|
|
615
|
-
"basic"
|
|
656
|
+
"lowmem"
|
|
616
657
|
],
|
|
617
658
|
"type": "option"
|
|
618
659
|
},
|
|
619
|
-
"
|
|
620
|
-
"char": "
|
|
621
|
-
"description": "
|
|
622
|
-
"name": "
|
|
623
|
-
"
|
|
624
|
-
"
|
|
660
|
+
"tag": {
|
|
661
|
+
"char": "t",
|
|
662
|
+
"description": "Image version tag (e.g. latest, v0.1.0)",
|
|
663
|
+
"name": "tag",
|
|
664
|
+
"hasDynamicHelp": false,
|
|
665
|
+
"multiple": false,
|
|
666
|
+
"type": "option"
|
|
625
667
|
}
|
|
626
668
|
},
|
|
627
669
|
"hasDynamicHelp": false,
|
|
@@ -647,14 +689,13 @@
|
|
|
647
689
|
"flags": {
|
|
648
690
|
"env": {
|
|
649
691
|
"char": "e",
|
|
650
|
-
"description": "部署环境 (production, lowmem
|
|
692
|
+
"description": "部署环境 (production, lowmem)",
|
|
651
693
|
"name": "env",
|
|
652
694
|
"hasDynamicHelp": false,
|
|
653
695
|
"multiple": false,
|
|
654
696
|
"options": [
|
|
655
697
|
"production",
|
|
656
|
-
"lowmem"
|
|
657
|
-
"basic"
|
|
698
|
+
"lowmem"
|
|
658
699
|
],
|
|
659
700
|
"type": "option"
|
|
660
701
|
}
|
|
@@ -689,14 +730,13 @@
|
|
|
689
730
|
},
|
|
690
731
|
"env": {
|
|
691
732
|
"char": "e",
|
|
692
|
-
"description": "部署环境 (production, lowmem
|
|
733
|
+
"description": "部署环境 (production, lowmem)",
|
|
693
734
|
"name": "env",
|
|
694
735
|
"hasDynamicHelp": false,
|
|
695
736
|
"multiple": false,
|
|
696
737
|
"options": [
|
|
697
738
|
"production",
|
|
698
|
-
"lowmem"
|
|
699
|
-
"basic"
|
|
739
|
+
"lowmem"
|
|
700
740
|
],
|
|
701
741
|
"type": "option"
|
|
702
742
|
}
|
|
@@ -718,5 +758,5 @@
|
|
|
718
758
|
]
|
|
719
759
|
}
|
|
720
760
|
},
|
|
721
|
-
"version": "0.0
|
|
761
|
+
"version": "0.1.0"
|
|
722
762
|
}
|