nodebbs 0.3.2 → 0.3.3
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 +1 -1
- package/dist/commands/shell/db.js +4 -1
- package/dist/commands/shell/redis.js +8 -1
- package/dist/templates/docker-compose.yml +8 -10
- package/dist/templates/env +0 -2
- package/dist/utils/docker.d.ts +1 -1
- package/dist/utils/docker.js +82 -12
- package/dist/utils/env.d.ts +1 -1
- package/dist/utils/selection.d.ts +1 -1
- package/dist/utils/selection.js +4 -4
- package/oclif.manifest.json +39 -39
- package/package.json +1 -1
- package/dist/templates/docker-compose.ports.yml +0 -8
package/README.md
CHANGED
|
@@ -2,6 +2,7 @@ import { Command } from '@oclif/core';
|
|
|
2
2
|
import { runCompose, getComposeFiles } from '../../utils/docker.js';
|
|
3
3
|
import { logger } from '../../utils/logger.js';
|
|
4
4
|
import { EnvFlag, selectEnvironment } from '../../utils/selection.js';
|
|
5
|
+
import { getEnvValue } from '../../utils/env.js';
|
|
5
6
|
export default class ShellDb extends Command {
|
|
6
7
|
static description = '进入数据库 shell (psql)';
|
|
7
8
|
static flags = {
|
|
@@ -11,7 +12,9 @@ export default class ShellDb extends Command {
|
|
|
11
12
|
const { flags } = await this.parse(ShellDb);
|
|
12
13
|
const env = await selectEnvironment(flags.env);
|
|
13
14
|
const { files, isBuiltIn } = await getComposeFiles(env);
|
|
15
|
+
// 从环境变量获取数据库名,默认为 nodebbs
|
|
16
|
+
const dbName = await getEnvValue('POSTGRES_DB') || 'nodebbs';
|
|
14
17
|
logger.info('正在进入数据库 shell...');
|
|
15
|
-
await runCompose(files, ['exec', 'postgres', 'psql', '-U', 'postgres', '-d',
|
|
18
|
+
await runCompose(files, ['exec', 'postgres', 'psql', '-U', 'postgres', '-d', dbName], isBuiltIn);
|
|
16
19
|
}
|
|
17
20
|
}
|
|
@@ -2,6 +2,7 @@ import { Command } from '@oclif/core';
|
|
|
2
2
|
import { runCompose, getComposeFiles } from '../../utils/docker.js';
|
|
3
3
|
import { logger } from '../../utils/logger.js';
|
|
4
4
|
import { EnvFlag, selectEnvironment } from '../../utils/selection.js';
|
|
5
|
+
import { getEnvValue } from '../../utils/env.js';
|
|
5
6
|
export default class ShellRedis extends Command {
|
|
6
7
|
static description = '进入 Redis shell (redis-cli)';
|
|
7
8
|
static flags = {
|
|
@@ -11,7 +12,13 @@ export default class ShellRedis extends Command {
|
|
|
11
12
|
const { flags } = await this.parse(ShellRedis);
|
|
12
13
|
const env = await selectEnvironment(flags.env);
|
|
13
14
|
const { files, isBuiltIn } = await getComposeFiles(env);
|
|
15
|
+
// 从环境变量获取密码
|
|
16
|
+
const redisPassword = await getEnvValue('REDIS_PASSWORD');
|
|
14
17
|
logger.info('正在进入 Redis shell...');
|
|
15
|
-
|
|
18
|
+
// 如果有密码则使用认证参数
|
|
19
|
+
const redisCliArgs = redisPassword
|
|
20
|
+
? ['exec', 'redis', 'redis-cli', '-a', redisPassword]
|
|
21
|
+
: ['exec', 'redis', 'redis-cli'];
|
|
22
|
+
await runCompose(files, redisCliArgs, isBuiltIn);
|
|
16
23
|
}
|
|
17
24
|
}
|
|
@@ -2,13 +2,13 @@ services:
|
|
|
2
2
|
# PostgreSQL 数据库
|
|
3
3
|
postgres:
|
|
4
4
|
image: postgres:16-alpine
|
|
5
|
-
container_name: nodebbs-postgres
|
|
5
|
+
container_name: ${COMPOSE_PROJECT_NAME:-nodebbs}-postgres
|
|
6
6
|
restart: unless-stopped
|
|
7
7
|
environment:
|
|
8
8
|
POSTGRES_USER: postgres
|
|
9
9
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres_password}
|
|
10
10
|
POSTGRES_DB: ${POSTGRES_DB:-nodebbs}
|
|
11
|
-
TZ: Asia/Shanghai
|
|
11
|
+
TZ: ${TZ:-Asia/Shanghai}
|
|
12
12
|
volumes:
|
|
13
13
|
- postgres_data:/var/lib/postgresql/data
|
|
14
14
|
|
|
@@ -24,11 +24,11 @@ services:
|
|
|
24
24
|
# Redis 缓存
|
|
25
25
|
redis:
|
|
26
26
|
image: redis:7-alpine
|
|
27
|
-
container_name: nodebbs-redis
|
|
27
|
+
container_name: ${COMPOSE_PROJECT_NAME:-nodebbs}-redis
|
|
28
28
|
restart: unless-stopped
|
|
29
29
|
command: redis-server --requirepass ${REDIS_PASSWORD:-redis_password} --appendonly yes
|
|
30
30
|
environment:
|
|
31
|
-
TZ: Asia/Shanghai
|
|
31
|
+
TZ: ${TZ:-Asia/Shanghai}
|
|
32
32
|
volumes:
|
|
33
33
|
- redis_data:/data
|
|
34
34
|
|
|
@@ -46,10 +46,9 @@ services:
|
|
|
46
46
|
context: .
|
|
47
47
|
dockerfile: apps/api/Dockerfile
|
|
48
48
|
image: ${API_IMAGE:-nodebbs-api:local}
|
|
49
|
-
container_name: nodebbs-api
|
|
49
|
+
container_name: ${COMPOSE_PROJECT_NAME:-nodebbs}-api
|
|
50
50
|
restart: unless-stopped
|
|
51
51
|
environment:
|
|
52
|
-
NODE_ENV: production
|
|
53
52
|
APP_NAME: ${APP_NAME:-nodebbs}
|
|
54
53
|
HOST: 0.0.0.0
|
|
55
54
|
PORT: 7100
|
|
@@ -59,7 +58,7 @@ services:
|
|
|
59
58
|
JWT_SECRET: ${JWT_SECRET:-change-this-to-a-secure-random-string-in-production}
|
|
60
59
|
JWT_ACCESS_TOKEN_EXPIRES_IN: ${JWT_ACCESS_TOKEN_EXPIRES_IN:-1y}
|
|
61
60
|
CORS_ORIGIN: ${CORS_ORIGIN:-*}
|
|
62
|
-
TZ: Asia/Shanghai
|
|
61
|
+
TZ: ${TZ:-Asia/Shanghai}
|
|
63
62
|
volumes:
|
|
64
63
|
- api_uploads:/app/apps/api/uploads
|
|
65
64
|
# - ./apps/api/src:/app/apps/api/src:ro
|
|
@@ -85,14 +84,13 @@ services:
|
|
|
85
84
|
context: .
|
|
86
85
|
dockerfile: apps/web/Dockerfile
|
|
87
86
|
image: ${WEB_IMAGE:-nodebbs-web:local}
|
|
88
|
-
container_name: nodebbs-web
|
|
87
|
+
container_name: ${COMPOSE_PROJECT_NAME:-nodebbs}-web
|
|
89
88
|
restart: unless-stopped
|
|
90
89
|
environment:
|
|
91
|
-
NODE_ENV: production
|
|
92
90
|
APP_NAME: ${APP_NAME:-nodebbs}
|
|
93
91
|
PORT: 3100
|
|
94
92
|
SERVER_API_URL: ${SERVER_API_URL:-http://api:7100}
|
|
95
|
-
TZ: Asia/Shanghai
|
|
93
|
+
TZ: ${TZ:-Asia/Shanghai}
|
|
96
94
|
# volumes:
|
|
97
95
|
# 自定义资源挂载(如有需要,请取消注释并在同级目录下创建 web 文件夹及对应文件)
|
|
98
96
|
# - ./web/favicon.ico:/app/apps/web/public/favicon.ico
|
package/dist/templates/env
CHANGED
|
@@ -10,13 +10,11 @@ APP_NAME=nodebbs
|
|
|
10
10
|
# ========================================
|
|
11
11
|
POSTGRES_PASSWORD=your_secure_postgres_password_here
|
|
12
12
|
POSTGRES_DB=nodebbs
|
|
13
|
-
POSTGRES_PORT=5432
|
|
14
13
|
|
|
15
14
|
# ========================================
|
|
16
15
|
# Redis 配置
|
|
17
16
|
# ========================================
|
|
18
17
|
REDIS_PASSWORD=your_secure_redis_password_here
|
|
19
|
-
REDIS_PORT=6379
|
|
20
18
|
|
|
21
19
|
# ========================================
|
|
22
20
|
# API 服务配置
|
package/dist/utils/docker.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - 如果存在,则优先使用项目根目录的配置。
|
|
6
6
|
* - 如果不存在,则使用 CLI 内置的模板文件。
|
|
7
7
|
*
|
|
8
|
-
* @param env - 运行环境 ('production' | 'lowmem' | '
|
|
8
|
+
* @param env - 运行环境 ('production' | 'lowmem' | 'default')
|
|
9
9
|
* @returns 对象包含文件路径数组和是否使用内置模板的标志
|
|
10
10
|
*/
|
|
11
11
|
export declare function getComposeFiles(env: string): Promise<{
|
package/dist/utils/docker.js
CHANGED
|
@@ -23,7 +23,7 @@ async function getDockerEnv() {
|
|
|
23
23
|
* - 如果存在,则优先使用项目根目录的配置。
|
|
24
24
|
* - 如果不存在,则使用 CLI 内置的模板文件。
|
|
25
25
|
*
|
|
26
|
-
* @param env - 运行环境 ('production' | 'lowmem' | '
|
|
26
|
+
* @param env - 运行环境 ('production' | 'lowmem' | 'default')
|
|
27
27
|
* @returns 对象包含文件路径数组和是否使用内置模板的标志
|
|
28
28
|
*/
|
|
29
29
|
export async function getComposeFiles(env) {
|
|
@@ -43,18 +43,15 @@ export async function getComposeFiles(env) {
|
|
|
43
43
|
// 映射 environment 到对应的 override 文件名
|
|
44
44
|
const envFileMap = {
|
|
45
45
|
'production': 'docker-compose.prod.yml',
|
|
46
|
-
'lowmem': 'docker-compose.lowmem.yml'
|
|
47
|
-
'basic': 'docker-compose.ports.yml'
|
|
46
|
+
'lowmem': 'docker-compose.lowmem.yml'
|
|
48
47
|
};
|
|
49
48
|
if (env in envFileMap) {
|
|
50
49
|
const fileName = envFileMap[env];
|
|
51
|
-
//
|
|
52
|
-
// 但如果是在 CLI 内部运行,templateDir 里肯定有。
|
|
53
|
-
// 如果是 production/lowmem,用户目录可能有 override。
|
|
50
|
+
// 注意:用户目录可能有 override 文件覆盖内置默认值
|
|
54
51
|
const localOverride = path.join(workDir, fileName);
|
|
55
52
|
const templateOverride = path.join(templateDir, fileName);
|
|
56
53
|
// 策略调整:
|
|
57
|
-
//
|
|
54
|
+
// default -> 不加载 override 文件,使用基础配置
|
|
58
55
|
// production/lowmem -> 尝试加载对应的 override
|
|
59
56
|
if (await fileExists(localOverride)) {
|
|
60
57
|
files.push(localOverride);
|
|
@@ -94,6 +91,33 @@ export async function checkDocker() {
|
|
|
94
91
|
logger.success('Docker 环境检查通过');
|
|
95
92
|
}
|
|
96
93
|
catch (error) {
|
|
94
|
+
// 检测是否是权限问题
|
|
95
|
+
const errorMessage = error.stderr || error.message || '';
|
|
96
|
+
const isPermissionError = errorMessage.includes('permission denied') ||
|
|
97
|
+
errorMessage.includes('Got permission denied') ||
|
|
98
|
+
errorMessage.includes('dial unix /var/run/docker.sock');
|
|
99
|
+
if (isPermissionError) {
|
|
100
|
+
logger.warning('检测到 Docker 权限问题');
|
|
101
|
+
logger.info('您的用户可能没有权限访问 Docker。');
|
|
102
|
+
// 如果是 CI 环境或非交互式环境,直接报错
|
|
103
|
+
if (process.env.CI || !process.stdout.isTTY) {
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
// 尝试配置权限
|
|
107
|
+
await configureDockerPermissions();
|
|
108
|
+
// 配置后再次检查
|
|
109
|
+
try {
|
|
110
|
+
await execa('docker', ['--version']);
|
|
111
|
+
await execa('docker', ['compose', 'version']);
|
|
112
|
+
logger.success('Docker 权限配置成功!');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
logger.error('权限配置后仍无法访问 Docker');
|
|
117
|
+
logger.info('请尝试: 1) 运行 "newgrp docker" 2) 或重新登录');
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
97
121
|
logger.warning('未检测到 Docker 或 Docker Compose。');
|
|
98
122
|
// 如果是 CI 环境或非交互式环境,直接报错
|
|
99
123
|
if (process.env.CI || !process.stdout.isTTY) {
|
|
@@ -114,6 +138,22 @@ export async function checkDocker() {
|
|
|
114
138
|
return;
|
|
115
139
|
}
|
|
116
140
|
catch (installError) {
|
|
141
|
+
// 特殊处理:需要 newgrp 的情况
|
|
142
|
+
if (installError.message === 'NEWGRP_REQUIRED') {
|
|
143
|
+
logger.warning('安装完成,但需要刷新权限。');
|
|
144
|
+
logger.info('请运行以下命令后重试:');
|
|
145
|
+
logger.info(' newgrp docker && npx nodebbs');
|
|
146
|
+
process.exit(0);
|
|
147
|
+
}
|
|
148
|
+
// 检测权限问题
|
|
149
|
+
const installErrMsg = installError.stderr || installError.message || '';
|
|
150
|
+
if (installErrMsg.includes('permission denied') || installErrMsg.includes('docker.sock')) {
|
|
151
|
+
logger.warning('Docker 已安装,但存在权限问题。');
|
|
152
|
+
logger.info('请运行以下命令后重试:');
|
|
153
|
+
logger.info(' newgrp docker && npx nodebbs');
|
|
154
|
+
logger.info('或者注销并重新登录。');
|
|
155
|
+
process.exit(0);
|
|
156
|
+
}
|
|
117
157
|
logger.error(`安装失败: ${installError.message}`);
|
|
118
158
|
logger.info('请访问 https://www.docker.com/get-started 手动安装。');
|
|
119
159
|
throw installError;
|
|
@@ -152,11 +192,8 @@ async function installDocker() {
|
|
|
152
192
|
logger.warning('无法自动启动 Docker 服务');
|
|
153
193
|
logger.info('请手动运行: sudo systemctl start docker');
|
|
154
194
|
}
|
|
155
|
-
//
|
|
156
|
-
|
|
157
|
-
logger.info(' sudo usermod -aG docker $USER');
|
|
158
|
-
logger.info('您可能需要注销并重新登录才能生效。');
|
|
159
|
-
await confirm({ message: '是否已完成必要配置并准备继续?', default: true });
|
|
195
|
+
// 配置用户权限
|
|
196
|
+
await configureDockerPermissions();
|
|
160
197
|
}
|
|
161
198
|
finally {
|
|
162
199
|
// 清理临时安装脚本
|
|
@@ -177,6 +214,39 @@ async function installDocker() {
|
|
|
177
214
|
throw new Error(`不支持在 ${platform} 平台自动安装`);
|
|
178
215
|
}
|
|
179
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* 配置 Docker 用户权限
|
|
219
|
+
*
|
|
220
|
+
* 将当前用户添加到 docker 组,避免每次都需要 sudo。
|
|
221
|
+
*/
|
|
222
|
+
async function configureDockerPermissions() {
|
|
223
|
+
const currentUser = process.env.USER || process.env.USERNAME || '';
|
|
224
|
+
if (!currentUser) {
|
|
225
|
+
logger.warning('无法获取当前用户名,请手动配置 Docker 权限');
|
|
226
|
+
logger.info('请运行: sudo usermod -aG docker $USER');
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
logger.info(`正在将用户 "${currentUser}" 添加到 docker 组...`);
|
|
230
|
+
try {
|
|
231
|
+
await execa('sudo', ['usermod', '-aG', 'docker', currentUser], { stdio: 'inherit' });
|
|
232
|
+
logger.success(`已将用户 "${currentUser}" 添加到 docker 组`);
|
|
233
|
+
// 提示权限激活方式
|
|
234
|
+
logger.info('');
|
|
235
|
+
logger.warning('权限变更需要刷新才能生效。');
|
|
236
|
+
logger.info('请运行以下命令后重试:');
|
|
237
|
+
logger.info(' newgrp docker && npx nodebbs');
|
|
238
|
+
logger.info('');
|
|
239
|
+
logger.info('或者注销并重新登录后再运行 npx nodebbs');
|
|
240
|
+
throw new Error('NEWGRP_REQUIRED');
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
if (error.message === 'NEWGRP_REQUIRED') {
|
|
244
|
+
throw error;
|
|
245
|
+
}
|
|
246
|
+
logger.error(`添加用户到 docker 组失败: ${error.message}`);
|
|
247
|
+
logger.info('请手动运行: sudo usermod -aG docker $USER');
|
|
248
|
+
}
|
|
249
|
+
}
|
|
180
250
|
/**
|
|
181
251
|
* 执行 Docker Compose 管理命令 (Lifecycle Commands)
|
|
182
252
|
*
|
package/dist/utils/env.d.ts
CHANGED
|
@@ -4,4 +4,4 @@ export declare function unsetEnvValue(key: string): Promise<void>;
|
|
|
4
4
|
export declare function initEnv(): Promise<void>;
|
|
5
5
|
export declare function initDockerIgnore(): Promise<void>;
|
|
6
6
|
export declare function initImageEnv(): Promise<void>;
|
|
7
|
-
export declare function checkEnv(envType: 'production' | 'lowmem' | '
|
|
7
|
+
export declare function checkEnv(envType: 'production' | 'lowmem' | 'default'): Promise<void>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type EnvType = 'production' | 'lowmem' | '
|
|
1
|
+
export type EnvType = 'production' | 'lowmem' | 'default';
|
|
2
2
|
export type DeploymentMode = 'source' | 'image';
|
|
3
3
|
export declare const EnvFlag: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
4
4
|
export declare function setStoredEnv(env: EnvType): Promise<void>;
|
package/dist/utils/selection.js
CHANGED
|
@@ -6,12 +6,12 @@ import path from 'node:path';
|
|
|
6
6
|
import { getEnvValue, setEnvValue, unsetEnvValue } from './env.js';
|
|
7
7
|
export const EnvFlag = Flags.string({
|
|
8
8
|
char: 'e',
|
|
9
|
-
description: '部署环境 (production, lowmem,
|
|
10
|
-
options: ['production', 'lowmem', '
|
|
9
|
+
description: '部署环境 (production, lowmem, default)',
|
|
10
|
+
options: ['production', 'lowmem', 'default'],
|
|
11
11
|
});
|
|
12
12
|
async function getStoredEnv() {
|
|
13
13
|
const env = await getEnvValue('DEPLOY_ENV');
|
|
14
|
-
if (env && ['production', 'lowmem', '
|
|
14
|
+
if (env && ['production', 'lowmem', 'default'].includes(env)) {
|
|
15
15
|
return env;
|
|
16
16
|
}
|
|
17
17
|
return null;
|
|
@@ -51,7 +51,7 @@ export async function selectEnvironment(env, options = {}) {
|
|
|
51
51
|
choices: [
|
|
52
52
|
{ name: '标准生产环境 (2C4G+) [推荐]', value: 'production' },
|
|
53
53
|
{ name: '低配环境 (1C1G/1C2G)', value: 'lowmem' },
|
|
54
|
-
{ name: '
|
|
54
|
+
{ name: '默认环境 (无资源限制)', value: 'default' },
|
|
55
55
|
{ name: '❌ 取消', value: '__CANCEL__' },
|
|
56
56
|
],
|
|
57
57
|
loop: true,
|
package/oclif.manifest.json
CHANGED
|
@@ -61,14 +61,14 @@
|
|
|
61
61
|
"flags": {
|
|
62
62
|
"env": {
|
|
63
63
|
"char": "e",
|
|
64
|
-
"description": "部署环境 (production, lowmem,
|
|
64
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
65
65
|
"name": "env",
|
|
66
66
|
"hasDynamicHelp": false,
|
|
67
67
|
"multiple": false,
|
|
68
68
|
"options": [
|
|
69
69
|
"production",
|
|
70
70
|
"lowmem",
|
|
71
|
-
"
|
|
71
|
+
"default"
|
|
72
72
|
],
|
|
73
73
|
"type": "option"
|
|
74
74
|
},
|
|
@@ -104,14 +104,14 @@
|
|
|
104
104
|
"flags": {
|
|
105
105
|
"env": {
|
|
106
106
|
"char": "e",
|
|
107
|
-
"description": "部署环境 (production, lowmem,
|
|
107
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
108
108
|
"name": "env",
|
|
109
109
|
"hasDynamicHelp": false,
|
|
110
110
|
"multiple": false,
|
|
111
111
|
"options": [
|
|
112
112
|
"production",
|
|
113
113
|
"lowmem",
|
|
114
|
-
"
|
|
114
|
+
"default"
|
|
115
115
|
],
|
|
116
116
|
"type": "option"
|
|
117
117
|
},
|
|
@@ -147,14 +147,14 @@
|
|
|
147
147
|
"flags": {
|
|
148
148
|
"env": {
|
|
149
149
|
"char": "e",
|
|
150
|
-
"description": "部署环境 (production, lowmem,
|
|
150
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
151
151
|
"name": "env",
|
|
152
152
|
"hasDynamicHelp": false,
|
|
153
153
|
"multiple": false,
|
|
154
154
|
"options": [
|
|
155
155
|
"production",
|
|
156
156
|
"lowmem",
|
|
157
|
-
"
|
|
157
|
+
"default"
|
|
158
158
|
],
|
|
159
159
|
"type": "option"
|
|
160
160
|
}
|
|
@@ -182,14 +182,14 @@
|
|
|
182
182
|
"flags": {
|
|
183
183
|
"env": {
|
|
184
184
|
"char": "e",
|
|
185
|
-
"description": "部署环境 (production, lowmem,
|
|
185
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
186
186
|
"name": "env",
|
|
187
187
|
"hasDynamicHelp": false,
|
|
188
188
|
"multiple": false,
|
|
189
189
|
"options": [
|
|
190
190
|
"production",
|
|
191
191
|
"lowmem",
|
|
192
|
-
"
|
|
192
|
+
"default"
|
|
193
193
|
],
|
|
194
194
|
"type": "option"
|
|
195
195
|
}
|
|
@@ -217,14 +217,14 @@
|
|
|
217
217
|
"flags": {
|
|
218
218
|
"env": {
|
|
219
219
|
"char": "e",
|
|
220
|
-
"description": "部署环境 (production, lowmem,
|
|
220
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
221
221
|
"name": "env",
|
|
222
222
|
"hasDynamicHelp": false,
|
|
223
223
|
"multiple": false,
|
|
224
224
|
"options": [
|
|
225
225
|
"production",
|
|
226
226
|
"lowmem",
|
|
227
|
-
"
|
|
227
|
+
"default"
|
|
228
228
|
],
|
|
229
229
|
"type": "option"
|
|
230
230
|
}
|
|
@@ -252,14 +252,14 @@
|
|
|
252
252
|
"flags": {
|
|
253
253
|
"env": {
|
|
254
254
|
"char": "e",
|
|
255
|
-
"description": "部署环境 (production, lowmem,
|
|
255
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
256
256
|
"name": "env",
|
|
257
257
|
"hasDynamicHelp": false,
|
|
258
258
|
"multiple": false,
|
|
259
259
|
"options": [
|
|
260
260
|
"production",
|
|
261
261
|
"lowmem",
|
|
262
|
-
"
|
|
262
|
+
"default"
|
|
263
263
|
],
|
|
264
264
|
"type": "option"
|
|
265
265
|
}
|
|
@@ -287,14 +287,14 @@
|
|
|
287
287
|
"flags": {
|
|
288
288
|
"env": {
|
|
289
289
|
"char": "e",
|
|
290
|
-
"description": "部署环境 (production, lowmem,
|
|
290
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
291
291
|
"name": "env",
|
|
292
292
|
"hasDynamicHelp": false,
|
|
293
293
|
"multiple": false,
|
|
294
294
|
"options": [
|
|
295
295
|
"production",
|
|
296
296
|
"lowmem",
|
|
297
|
-
"
|
|
297
|
+
"default"
|
|
298
298
|
],
|
|
299
299
|
"type": "option"
|
|
300
300
|
}
|
|
@@ -322,14 +322,14 @@
|
|
|
322
322
|
"flags": {
|
|
323
323
|
"env": {
|
|
324
324
|
"char": "e",
|
|
325
|
-
"description": "部署环境 (production, lowmem,
|
|
325
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
326
326
|
"name": "env",
|
|
327
327
|
"hasDynamicHelp": false,
|
|
328
328
|
"multiple": false,
|
|
329
329
|
"options": [
|
|
330
330
|
"production",
|
|
331
331
|
"lowmem",
|
|
332
|
-
"
|
|
332
|
+
"default"
|
|
333
333
|
],
|
|
334
334
|
"type": "option"
|
|
335
335
|
}
|
|
@@ -357,14 +357,14 @@
|
|
|
357
357
|
"flags": {
|
|
358
358
|
"env": {
|
|
359
359
|
"char": "e",
|
|
360
|
-
"description": "部署环境 (production, lowmem,
|
|
360
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
361
361
|
"name": "env",
|
|
362
362
|
"hasDynamicHelp": false,
|
|
363
363
|
"multiple": false,
|
|
364
364
|
"options": [
|
|
365
365
|
"production",
|
|
366
366
|
"lowmem",
|
|
367
|
-
"
|
|
367
|
+
"default"
|
|
368
368
|
],
|
|
369
369
|
"type": "option"
|
|
370
370
|
}
|
|
@@ -392,14 +392,14 @@
|
|
|
392
392
|
"flags": {
|
|
393
393
|
"env": {
|
|
394
394
|
"char": "e",
|
|
395
|
-
"description": "部署环境 (production, lowmem,
|
|
395
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
396
396
|
"name": "env",
|
|
397
397
|
"hasDynamicHelp": false,
|
|
398
398
|
"multiple": false,
|
|
399
399
|
"options": [
|
|
400
400
|
"production",
|
|
401
401
|
"lowmem",
|
|
402
|
-
"
|
|
402
|
+
"default"
|
|
403
403
|
],
|
|
404
404
|
"type": "option"
|
|
405
405
|
}
|
|
@@ -458,14 +458,14 @@
|
|
|
458
458
|
"flags": {
|
|
459
459
|
"env": {
|
|
460
460
|
"char": "e",
|
|
461
|
-
"description": "部署环境 (production, lowmem,
|
|
461
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
462
462
|
"name": "env",
|
|
463
463
|
"hasDynamicHelp": false,
|
|
464
464
|
"multiple": false,
|
|
465
465
|
"options": [
|
|
466
466
|
"production",
|
|
467
467
|
"lowmem",
|
|
468
|
-
"
|
|
468
|
+
"default"
|
|
469
469
|
],
|
|
470
470
|
"type": "option"
|
|
471
471
|
}
|
|
@@ -493,14 +493,14 @@
|
|
|
493
493
|
"flags": {
|
|
494
494
|
"env": {
|
|
495
495
|
"char": "e",
|
|
496
|
-
"description": "部署环境 (production, lowmem,
|
|
496
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
497
497
|
"name": "env",
|
|
498
498
|
"hasDynamicHelp": false,
|
|
499
499
|
"multiple": false,
|
|
500
500
|
"options": [
|
|
501
501
|
"production",
|
|
502
502
|
"lowmem",
|
|
503
|
-
"
|
|
503
|
+
"default"
|
|
504
504
|
],
|
|
505
505
|
"type": "option"
|
|
506
506
|
}
|
|
@@ -528,14 +528,14 @@
|
|
|
528
528
|
"flags": {
|
|
529
529
|
"env": {
|
|
530
530
|
"char": "e",
|
|
531
|
-
"description": "部署环境 (production, lowmem,
|
|
531
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
532
532
|
"name": "env",
|
|
533
533
|
"hasDynamicHelp": false,
|
|
534
534
|
"multiple": false,
|
|
535
535
|
"options": [
|
|
536
536
|
"production",
|
|
537
537
|
"lowmem",
|
|
538
|
-
"
|
|
538
|
+
"default"
|
|
539
539
|
],
|
|
540
540
|
"type": "option"
|
|
541
541
|
}
|
|
@@ -563,14 +563,14 @@
|
|
|
563
563
|
"flags": {
|
|
564
564
|
"env": {
|
|
565
565
|
"char": "e",
|
|
566
|
-
"description": "部署环境 (production, lowmem,
|
|
566
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
567
567
|
"name": "env",
|
|
568
568
|
"hasDynamicHelp": false,
|
|
569
569
|
"multiple": false,
|
|
570
570
|
"options": [
|
|
571
571
|
"production",
|
|
572
572
|
"lowmem",
|
|
573
|
-
"
|
|
573
|
+
"default"
|
|
574
574
|
],
|
|
575
575
|
"type": "option"
|
|
576
576
|
}
|
|
@@ -598,14 +598,14 @@
|
|
|
598
598
|
"flags": {
|
|
599
599
|
"env": {
|
|
600
600
|
"char": "e",
|
|
601
|
-
"description": "部署环境 (production, lowmem,
|
|
601
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
602
602
|
"name": "env",
|
|
603
603
|
"hasDynamicHelp": false,
|
|
604
604
|
"multiple": false,
|
|
605
605
|
"options": [
|
|
606
606
|
"production",
|
|
607
607
|
"lowmem",
|
|
608
|
-
"
|
|
608
|
+
"default"
|
|
609
609
|
],
|
|
610
610
|
"type": "option"
|
|
611
611
|
}
|
|
@@ -633,14 +633,14 @@
|
|
|
633
633
|
"flags": {
|
|
634
634
|
"env": {
|
|
635
635
|
"char": "e",
|
|
636
|
-
"description": "部署环境 (production, lowmem,
|
|
636
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
637
637
|
"name": "env",
|
|
638
638
|
"hasDynamicHelp": false,
|
|
639
639
|
"multiple": false,
|
|
640
640
|
"options": [
|
|
641
641
|
"production",
|
|
642
642
|
"lowmem",
|
|
643
|
-
"
|
|
643
|
+
"default"
|
|
644
644
|
],
|
|
645
645
|
"type": "option"
|
|
646
646
|
},
|
|
@@ -675,14 +675,14 @@
|
|
|
675
675
|
"flags": {
|
|
676
676
|
"env": {
|
|
677
677
|
"char": "e",
|
|
678
|
-
"description": "部署环境 (production, lowmem,
|
|
678
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
679
679
|
"name": "env",
|
|
680
680
|
"hasDynamicHelp": false,
|
|
681
681
|
"multiple": false,
|
|
682
682
|
"options": [
|
|
683
683
|
"production",
|
|
684
684
|
"lowmem",
|
|
685
|
-
"
|
|
685
|
+
"default"
|
|
686
686
|
],
|
|
687
687
|
"type": "option"
|
|
688
688
|
}
|
|
@@ -717,14 +717,14 @@
|
|
|
717
717
|
},
|
|
718
718
|
"env": {
|
|
719
719
|
"char": "e",
|
|
720
|
-
"description": "部署环境 (production, lowmem,
|
|
720
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
721
721
|
"name": "env",
|
|
722
722
|
"hasDynamicHelp": false,
|
|
723
723
|
"multiple": false,
|
|
724
724
|
"options": [
|
|
725
725
|
"production",
|
|
726
726
|
"lowmem",
|
|
727
|
-
"
|
|
727
|
+
"default"
|
|
728
728
|
],
|
|
729
729
|
"type": "option"
|
|
730
730
|
}
|
|
@@ -752,14 +752,14 @@
|
|
|
752
752
|
"flags": {
|
|
753
753
|
"env": {
|
|
754
754
|
"char": "e",
|
|
755
|
-
"description": "部署环境 (production, lowmem,
|
|
755
|
+
"description": "部署环境 (production, lowmem, default)",
|
|
756
756
|
"name": "env",
|
|
757
757
|
"hasDynamicHelp": false,
|
|
758
758
|
"multiple": false,
|
|
759
759
|
"options": [
|
|
760
760
|
"production",
|
|
761
761
|
"lowmem",
|
|
762
|
-
"
|
|
762
|
+
"default"
|
|
763
763
|
],
|
|
764
764
|
"type": "option"
|
|
765
765
|
}
|
|
@@ -781,5 +781,5 @@
|
|
|
781
781
|
]
|
|
782
782
|
}
|
|
783
783
|
},
|
|
784
|
-
"version": "0.3.
|
|
784
|
+
"version": "0.3.3"
|
|
785
785
|
}
|
package/package.json
CHANGED