@be-link/cos 1.12.0-beta.3 → 1.12.0-beta.4
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/bin/upload.js +52 -23
- package/dist/beLinkCos.d.ts +7 -0
- package/dist/beLinkCos.d.ts.map +1 -1
- package/dist/config.d.ts +15 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/index.cjs.js +59 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +57 -6
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/bin/upload.js
CHANGED
|
@@ -5,18 +5,46 @@ const fs = require('fs');
|
|
|
5
5
|
const path = require('path');
|
|
6
6
|
const https = require('https');
|
|
7
7
|
const COS = require('cos-nodejs-sdk-v5');
|
|
8
|
-
const {
|
|
8
|
+
const { getBucketConfig, getRegion } = require('../dist/index.cjs.js');
|
|
9
9
|
|
|
10
|
+
// 解析命令行参数
|
|
10
11
|
const argv = process.argv.slice(2);
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
let mode = 'development';
|
|
13
|
+
let projectName = undefined;
|
|
14
|
+
|
|
15
|
+
// 支持两种方式传递参数:
|
|
16
|
+
// 方式1: node_modules/.bin/cos production --project be-link-live-h5
|
|
17
|
+
// 方式2: node_modules/.bin/cos production -p be-link-live-h5
|
|
18
|
+
// 方式3: node_modules/.bin/cos production (使用默认配置)
|
|
19
|
+
for (let i = 0; i < argv.length; i++) {
|
|
20
|
+
const arg = argv[i];
|
|
21
|
+
if (arg === '--project' || arg === '-p') {
|
|
22
|
+
projectName = argv[i + 1];
|
|
23
|
+
i++; // 跳过下一个参数(项目名称)
|
|
24
|
+
} else if (arg === '--mode' || arg === '-m') {
|
|
25
|
+
mode = argv[i + 1];
|
|
26
|
+
i++;
|
|
27
|
+
} else if (!arg.startsWith('-') && ['development', 'test', 'production'].includes(arg)) {
|
|
28
|
+
// 兼容旧版本:第一个参数是 mode
|
|
29
|
+
mode = arg;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
console.log('🚀 上传模式:', mode);
|
|
34
|
+
if (projectName) {
|
|
35
|
+
console.log('📦 项目标识:', projectName);
|
|
36
|
+
}
|
|
13
37
|
|
|
14
|
-
//
|
|
38
|
+
// 获取项目名称(用于远程路径)
|
|
15
39
|
const baseUrl = mode === 'production' ? 'project/prod/' : 'project/dev/';
|
|
16
40
|
const packageUrl = path.resolve(process.cwd(), './package.json');
|
|
17
41
|
const projectPackage = fs.readFileSync(packageUrl, { encoding: 'utf-8' });
|
|
18
|
-
const
|
|
19
|
-
const projectRemoteUrl = baseUrl +
|
|
42
|
+
const packageProjectName = JSON.parse(projectPackage).name;
|
|
43
|
+
const projectRemoteUrl = baseUrl + packageProjectName;
|
|
44
|
+
|
|
45
|
+
// 获取桶配置和地域
|
|
46
|
+
const bucketConfig = getBucketConfig(mode, projectName);
|
|
47
|
+
const region = getRegion(bucketConfig);
|
|
20
48
|
|
|
21
49
|
// 构建参数输出的地址
|
|
22
50
|
const distDirUrl = process.cwd() + '/dist';
|
|
@@ -148,8 +176,8 @@ function upload(url, filename, retryCount = 0, maxRetries = 3) {
|
|
|
148
176
|
|
|
149
177
|
cos.putObject(
|
|
150
178
|
{
|
|
151
|
-
Bucket:
|
|
152
|
-
Region:
|
|
179
|
+
Bucket: bucketConfig.name,
|
|
180
|
+
Region: region,
|
|
153
181
|
Key: projectRemoteUrl + filename /* 必须 */,
|
|
154
182
|
StorageClass: 'STANDARD',
|
|
155
183
|
ACL: 'public-read', // 设置为公开读,确保文件可访问
|
|
@@ -164,14 +192,11 @@ function upload(url, filename, retryCount = 0, maxRetries = 3) {
|
|
|
164
192
|
// 重试逻辑
|
|
165
193
|
if (retryCount < maxRetries) {
|
|
166
194
|
console.log(` ⚠️ 上传失败,正在重试 (${retryCount + 1}/${maxRetries}): ${filename}`);
|
|
167
|
-
setTimeout(
|
|
168
|
-
(
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
},
|
|
173
|
-
1000 * (retryCount + 1),
|
|
174
|
-
); // 递增延迟
|
|
195
|
+
setTimeout(() => {
|
|
196
|
+
upload(url, filename, retryCount + 1, maxRetries)
|
|
197
|
+
.then(resolve)
|
|
198
|
+
.catch(reject);
|
|
199
|
+
}, 1000 * (retryCount + 1)); // 递增延迟
|
|
175
200
|
} else {
|
|
176
201
|
console.error(` ❌ 上传失败(已重试 ${maxRetries} 次): ${filename}`, err.message);
|
|
177
202
|
reject(err);
|
|
@@ -216,8 +241,8 @@ function deleteProject() {
|
|
|
216
241
|
// 先获取目录下的所有文件
|
|
217
242
|
cos.getBucket(
|
|
218
243
|
{
|
|
219
|
-
Bucket:
|
|
220
|
-
Region:
|
|
244
|
+
Bucket: bucketConfig.name,
|
|
245
|
+
Region: region,
|
|
221
246
|
Prefix: projectRemoteUrl,
|
|
222
247
|
},
|
|
223
248
|
function (err, data) {
|
|
@@ -239,8 +264,8 @@ function deleteProject() {
|
|
|
239
264
|
// 批量删除文件
|
|
240
265
|
cos.deleteMultipleObject(
|
|
241
266
|
{
|
|
242
|
-
Bucket:
|
|
243
|
-
Region:
|
|
267
|
+
Bucket: bucketConfig.name,
|
|
268
|
+
Region: region,
|
|
244
269
|
Objects: files.map((file) => ({ Key: file.Key })),
|
|
245
270
|
},
|
|
246
271
|
function (err, data) {
|
|
@@ -266,8 +291,12 @@ async function staticUploadToCos() {
|
|
|
266
291
|
console.log('\n' + '='.repeat(60));
|
|
267
292
|
console.log('📦 开始上传静态资源到 COS');
|
|
268
293
|
console.log('='.repeat(60));
|
|
269
|
-
console.log(`📂 项目名称: ${
|
|
270
|
-
console.log(`🌍 环境模式: ${mode
|
|
294
|
+
console.log(`📂 项目名称: ${packageProjectName}`);
|
|
295
|
+
console.log(`🌍 环境模式: ${mode}`);
|
|
296
|
+
console.log(`🪣 存储桶: ${bucketConfig.name} (${region})`);
|
|
297
|
+
if (projectName) {
|
|
298
|
+
console.log(`🎯 项目标识: ${projectName}`);
|
|
299
|
+
}
|
|
271
300
|
console.log(`📍 远程路径: ${projectRemoteUrl}`);
|
|
272
301
|
console.log(`📁 本地目录: ${distDirUrl}`);
|
|
273
302
|
console.log('='.repeat(60) + '\n');
|
|
@@ -311,7 +340,7 @@ async function staticUploadToCos() {
|
|
|
311
340
|
console.log('='.repeat(60));
|
|
312
341
|
console.log(`✅ 成功上传: ${results.length} 个文件`);
|
|
313
342
|
console.log(`⏱️ 耗时: ${duration} 秒`);
|
|
314
|
-
console.log(`🔗 访问地址: https://${
|
|
343
|
+
console.log(`🔗 访问地址: https://${bucketConfig.host}/${projectRemoteUrl}`);
|
|
315
344
|
console.log('='.repeat(60) + '\n');
|
|
316
345
|
|
|
317
346
|
process.exit(0);
|
package/dist/beLinkCos.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export declare class BeLinkCOS {
|
|
|
27
27
|
headers: Record<string, any>;
|
|
28
28
|
/** 当前环境模式 */
|
|
29
29
|
mode: EnvMode | null;
|
|
30
|
+
/** 项目名称 */
|
|
31
|
+
projectName: string | undefined;
|
|
30
32
|
/** 是否限制临时密钥的使用范围 */
|
|
31
33
|
private scopeLimit;
|
|
32
34
|
/** 生命周期状态 */
|
|
@@ -85,11 +87,16 @@ export declare class BeLinkCOS {
|
|
|
85
87
|
* 验证配置
|
|
86
88
|
*/
|
|
87
89
|
protected validateConfig(config: InitConfig): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* 获取当前使用的存储桶配置
|
|
92
|
+
*/
|
|
93
|
+
private getCurrentBucketConfig;
|
|
88
94
|
/**
|
|
89
95
|
* 获取配置
|
|
90
96
|
*/
|
|
91
97
|
getConfig(): {
|
|
92
98
|
mode: EnvMode | null;
|
|
99
|
+
projectName: string | undefined;
|
|
93
100
|
headers: Record<string, any>;
|
|
94
101
|
scopeLimit: boolean;
|
|
95
102
|
} | null;
|
package/dist/beLinkCos.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"beLinkCos.d.ts","sourceRoot":"","sources":["../src/beLinkCos.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"beLinkCos.d.ts","sourceRoot":"","sources":["../src/beLinkCos.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAA8B,MAAM,UAAU,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEtE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,SAAS;IACpB,iBAAiB;IACjB,OAAO,CAAC,GAAG,CAAa;IACxB,kBAAkB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAC/D,aAAa;IACN,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IACzC,aAAa;IACN,IAAI,EAAE,OAAO,GAAG,IAAI,CAAQ;IACnC,WAAW;IACJ,WAAW,EAAE,MAAM,GAAG,SAAS,CAAa;IACnD,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAkB;IACpC,aAAa;IACb,SAAS,CAAC,aAAa,EAAE,OAAO,CAAS;IACzC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAS;IACvC,WAAW;IACX,OAAO,CAAC,KAAK,CAAkB;IAE/B;;;;;;;;;;;;;;;;;;;;OAoBG;gBACS,MAAM,CAAC,EAAE,UAAU;IAO/B;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IA0B9B;;;;;;;OAOG;YACW,OAAO;IAqCrB;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAYjD;;OAEG;IACH,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAMvC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAMxC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAMzC;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAmBrD;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;OAEG;IACH,SAAS,IAAI;QACX,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;QACrB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB,GAAG,IAAI;IAaR;;;;;;;;;;;;;;OAcG;IACI,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,GAAE,MAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;IA+DtF;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;IASnB;;;;;;;;;;;OAWG;IACU,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAU7D;;;;;;;;;;;;;;;;;;;;OAoBG;IACU,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAwCjF;;OAEG;IACH,OAAO,IAAI,IAAI;CAuBhB"}
|
package/dist/config.d.ts
CHANGED
|
@@ -21,6 +21,21 @@ export interface BucketConfig {
|
|
|
21
21
|
* 根据环境自动切换到对应的存储桶
|
|
22
22
|
*/
|
|
23
23
|
export declare const BUCKETS_CONFIG: Record<EnvMode, BucketConfig>;
|
|
24
|
+
/**
|
|
25
|
+
* 特定项目的自定义存储桶配置
|
|
26
|
+
* 优先级高于默认配置
|
|
27
|
+
*/
|
|
28
|
+
export declare const PROJECT_BUCKETS_CONFIG: Record<string, Partial<Record<EnvMode, BucketConfig>>>;
|
|
29
|
+
/**
|
|
30
|
+
* 获取存储桶配置
|
|
31
|
+
* 优先使用项目特定配置,如果没有则使用默认配置
|
|
32
|
+
*/
|
|
33
|
+
export declare function getBucketConfig(mode: EnvMode, projectName?: string): BucketConfig;
|
|
34
|
+
/**
|
|
35
|
+
* 获取存储桶所在地域
|
|
36
|
+
* 根据桶配置动态判断地域
|
|
37
|
+
*/
|
|
38
|
+
export declare function getRegion(bucketConfig: BucketConfig): string;
|
|
24
39
|
/** COS 存储桶所在地域(南京) */
|
|
25
40
|
export declare const REGION: "ap-nanjing";
|
|
26
41
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,YAAY,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,CAgBxD,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,MAAM,EAAG,YAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,GAAG,YAAY,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,CAgBxD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAQzF,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,CAKjF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,CAM5D;AAED,sBAAsB;AACtB,eAAO,MAAM,MAAM,EAAG,YAAqB,CAAC"}
|
package/dist/index.cjs.js
CHANGED
|
@@ -24,6 +24,40 @@ const BUCKETS_CONFIG = {
|
|
|
24
24
|
protocol: 'https',
|
|
25
25
|
},
|
|
26
26
|
};
|
|
27
|
+
/**
|
|
28
|
+
* 特定项目的自定义存储桶配置
|
|
29
|
+
* 优先级高于默认配置
|
|
30
|
+
*/
|
|
31
|
+
const PROJECT_BUCKETS_CONFIG = {
|
|
32
|
+
'be-link-live-h5': {
|
|
33
|
+
production: {
|
|
34
|
+
name: 'release-belink-1304510571',
|
|
35
|
+
host: 'release-belink-1304510571.cos.ap-shanghai.myqcloud.com',
|
|
36
|
+
protocol: 'https',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* 获取存储桶配置
|
|
42
|
+
* 优先使用项目特定配置,如果没有则使用默认配置
|
|
43
|
+
*/
|
|
44
|
+
function getBucketConfig(mode, projectName) {
|
|
45
|
+
if (projectName && PROJECT_BUCKETS_CONFIG[projectName]?.[mode]) {
|
|
46
|
+
return PROJECT_BUCKETS_CONFIG[projectName][mode];
|
|
47
|
+
}
|
|
48
|
+
return BUCKETS_CONFIG[mode];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 获取存储桶所在地域
|
|
52
|
+
* 根据桶配置动态判断地域
|
|
53
|
+
*/
|
|
54
|
+
function getRegion(bucketConfig) {
|
|
55
|
+
// 根据 host 判断地域
|
|
56
|
+
if (bucketConfig.host.includes('ap-shanghai')) {
|
|
57
|
+
return 'ap-shanghai';
|
|
58
|
+
}
|
|
59
|
+
return 'ap-nanjing';
|
|
60
|
+
}
|
|
27
61
|
/** COS 存储桶所在地域(南京) */
|
|
28
62
|
const REGION = 'ap-nanjing';
|
|
29
63
|
|
|
@@ -76,6 +110,8 @@ class BeLinkCOS {
|
|
|
76
110
|
this.headers = {};
|
|
77
111
|
/** 当前环境模式 */
|
|
78
112
|
this.mode = null;
|
|
113
|
+
/** 项目名称 */
|
|
114
|
+
this.projectName = undefined;
|
|
79
115
|
/** 是否限制临时密钥的使用范围 */
|
|
80
116
|
this.scopeLimit = false;
|
|
81
117
|
/** 生命周期状态 */
|
|
@@ -107,11 +143,12 @@ class BeLinkCOS {
|
|
|
107
143
|
}
|
|
108
144
|
// 保存配置
|
|
109
145
|
this.mode = config.mode;
|
|
146
|
+
this.projectName = config.projectName;
|
|
110
147
|
this.headers = config.headers || {};
|
|
111
148
|
this.scopeLimit = config.ScopeLimit || false;
|
|
112
149
|
this.debug = config.debug || false;
|
|
113
150
|
this.isInitialized = true;
|
|
114
|
-
this.log('COS 实例初始化成功', { mode: this.mode });
|
|
151
|
+
this.log('COS 实例初始化成功', { mode: this.mode, projectName: this.projectName });
|
|
115
152
|
}
|
|
116
153
|
/**
|
|
117
154
|
* 初始化 COS SDK 实例
|
|
@@ -204,6 +241,15 @@ class BeLinkCOS {
|
|
|
204
241
|
}
|
|
205
242
|
return true;
|
|
206
243
|
}
|
|
244
|
+
/**
|
|
245
|
+
* 获取当前使用的存储桶配置
|
|
246
|
+
*/
|
|
247
|
+
getCurrentBucketConfig() {
|
|
248
|
+
if (!this.mode) {
|
|
249
|
+
throw new Error('实例未初始化');
|
|
250
|
+
}
|
|
251
|
+
return getBucketConfig(this.mode, this.projectName);
|
|
252
|
+
}
|
|
207
253
|
/**
|
|
208
254
|
* 获取配置
|
|
209
255
|
*/
|
|
@@ -214,6 +260,7 @@ class BeLinkCOS {
|
|
|
214
260
|
}
|
|
215
261
|
return {
|
|
216
262
|
mode: this.mode,
|
|
263
|
+
projectName: this.projectName,
|
|
217
264
|
headers: this.headers,
|
|
218
265
|
scopeLimit: this.scopeLimit,
|
|
219
266
|
};
|
|
@@ -321,7 +368,8 @@ class BeLinkCOS {
|
|
|
321
368
|
return null;
|
|
322
369
|
}
|
|
323
370
|
const path = this.getFilePath(file);
|
|
324
|
-
|
|
371
|
+
const bucketConfig = this.getCurrentBucketConfig();
|
|
372
|
+
return `https://${bucketConfig.host}${path}`;
|
|
325
373
|
}
|
|
326
374
|
/**
|
|
327
375
|
* 上传文件到腾讯云 COS
|
|
@@ -353,11 +401,13 @@ class BeLinkCOS {
|
|
|
353
401
|
await this.initCOS();
|
|
354
402
|
}
|
|
355
403
|
const key = this.getFilePath(file);
|
|
356
|
-
|
|
404
|
+
const bucketConfig = this.getCurrentBucketConfig();
|
|
405
|
+
const region = getRegion(bucketConfig);
|
|
406
|
+
this.log('开始上传文件:', { filename: file.name, key, bucket: bucketConfig.name, region });
|
|
357
407
|
return new Promise((resolve, reject) => {
|
|
358
408
|
this.cos?.putObject({
|
|
359
|
-
Bucket:
|
|
360
|
-
Region:
|
|
409
|
+
Bucket: bucketConfig.name,
|
|
410
|
+
Region: region,
|
|
361
411
|
Key: key,
|
|
362
412
|
Body: file,
|
|
363
413
|
onProgress: config?.onProgressCallback,
|
|
@@ -391,6 +441,7 @@ class BeLinkCOS {
|
|
|
391
441
|
this.isDestroyed = true;
|
|
392
442
|
this.isInitialized = false;
|
|
393
443
|
this.mode = null;
|
|
444
|
+
this.projectName = undefined;
|
|
394
445
|
this.headers = {};
|
|
395
446
|
this.scopeLimit = false;
|
|
396
447
|
this.log('实例已销毁');
|
|
@@ -403,4 +454,7 @@ class BeLinkCOS {
|
|
|
403
454
|
|
|
404
455
|
exports.BUCKETS_CONFIG = BUCKETS_CONFIG;
|
|
405
456
|
exports.BeLinkCOS = BeLinkCOS;
|
|
457
|
+
exports.PROJECT_BUCKETS_CONFIG = PROJECT_BUCKETS_CONFIG;
|
|
406
458
|
exports.REGION = REGION;
|
|
459
|
+
exports.getBucketConfig = getBucketConfig;
|
|
460
|
+
exports.getRegion = getRegion;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { BeLinkCOS } from './beLinkCos';
|
|
2
2
|
export type { EnvMode, BucketConfig } from './config';
|
|
3
|
-
export { BUCKETS_CONFIG, REGION } from './config';
|
|
3
|
+
export { BUCKETS_CONFIG, REGION, PROJECT_BUCKETS_CONFIG, getBucketConfig, getRegion } from './config';
|
|
4
4
|
export type { InitConfig, UploadConfig, UploadResult } from './types';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,sBAAsB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGtG,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/index.esm.js
CHANGED
|
@@ -22,6 +22,40 @@ const BUCKETS_CONFIG = {
|
|
|
22
22
|
protocol: 'https',
|
|
23
23
|
},
|
|
24
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* 特定项目的自定义存储桶配置
|
|
27
|
+
* 优先级高于默认配置
|
|
28
|
+
*/
|
|
29
|
+
const PROJECT_BUCKETS_CONFIG = {
|
|
30
|
+
'be-link-live-h5': {
|
|
31
|
+
production: {
|
|
32
|
+
name: 'release-belink-1304510571',
|
|
33
|
+
host: 'release-belink-1304510571.cos.ap-shanghai.myqcloud.com',
|
|
34
|
+
protocol: 'https',
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* 获取存储桶配置
|
|
40
|
+
* 优先使用项目特定配置,如果没有则使用默认配置
|
|
41
|
+
*/
|
|
42
|
+
function getBucketConfig(mode, projectName) {
|
|
43
|
+
if (projectName && PROJECT_BUCKETS_CONFIG[projectName]?.[mode]) {
|
|
44
|
+
return PROJECT_BUCKETS_CONFIG[projectName][mode];
|
|
45
|
+
}
|
|
46
|
+
return BUCKETS_CONFIG[mode];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 获取存储桶所在地域
|
|
50
|
+
* 根据桶配置动态判断地域
|
|
51
|
+
*/
|
|
52
|
+
function getRegion(bucketConfig) {
|
|
53
|
+
// 根据 host 判断地域
|
|
54
|
+
if (bucketConfig.host.includes('ap-shanghai')) {
|
|
55
|
+
return 'ap-shanghai';
|
|
56
|
+
}
|
|
57
|
+
return 'ap-nanjing';
|
|
58
|
+
}
|
|
25
59
|
/** COS 存储桶所在地域(南京) */
|
|
26
60
|
const REGION = 'ap-nanjing';
|
|
27
61
|
|
|
@@ -74,6 +108,8 @@ class BeLinkCOS {
|
|
|
74
108
|
this.headers = {};
|
|
75
109
|
/** 当前环境模式 */
|
|
76
110
|
this.mode = null;
|
|
111
|
+
/** 项目名称 */
|
|
112
|
+
this.projectName = undefined;
|
|
77
113
|
/** 是否限制临时密钥的使用范围 */
|
|
78
114
|
this.scopeLimit = false;
|
|
79
115
|
/** 生命周期状态 */
|
|
@@ -105,11 +141,12 @@ class BeLinkCOS {
|
|
|
105
141
|
}
|
|
106
142
|
// 保存配置
|
|
107
143
|
this.mode = config.mode;
|
|
144
|
+
this.projectName = config.projectName;
|
|
108
145
|
this.headers = config.headers || {};
|
|
109
146
|
this.scopeLimit = config.ScopeLimit || false;
|
|
110
147
|
this.debug = config.debug || false;
|
|
111
148
|
this.isInitialized = true;
|
|
112
|
-
this.log('COS 实例初始化成功', { mode: this.mode });
|
|
149
|
+
this.log('COS 实例初始化成功', { mode: this.mode, projectName: this.projectName });
|
|
113
150
|
}
|
|
114
151
|
/**
|
|
115
152
|
* 初始化 COS SDK 实例
|
|
@@ -202,6 +239,15 @@ class BeLinkCOS {
|
|
|
202
239
|
}
|
|
203
240
|
return true;
|
|
204
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* 获取当前使用的存储桶配置
|
|
244
|
+
*/
|
|
245
|
+
getCurrentBucketConfig() {
|
|
246
|
+
if (!this.mode) {
|
|
247
|
+
throw new Error('实例未初始化');
|
|
248
|
+
}
|
|
249
|
+
return getBucketConfig(this.mode, this.projectName);
|
|
250
|
+
}
|
|
205
251
|
/**
|
|
206
252
|
* 获取配置
|
|
207
253
|
*/
|
|
@@ -212,6 +258,7 @@ class BeLinkCOS {
|
|
|
212
258
|
}
|
|
213
259
|
return {
|
|
214
260
|
mode: this.mode,
|
|
261
|
+
projectName: this.projectName,
|
|
215
262
|
headers: this.headers,
|
|
216
263
|
scopeLimit: this.scopeLimit,
|
|
217
264
|
};
|
|
@@ -319,7 +366,8 @@ class BeLinkCOS {
|
|
|
319
366
|
return null;
|
|
320
367
|
}
|
|
321
368
|
const path = this.getFilePath(file);
|
|
322
|
-
|
|
369
|
+
const bucketConfig = this.getCurrentBucketConfig();
|
|
370
|
+
return `https://${bucketConfig.host}${path}`;
|
|
323
371
|
}
|
|
324
372
|
/**
|
|
325
373
|
* 上传文件到腾讯云 COS
|
|
@@ -351,11 +399,13 @@ class BeLinkCOS {
|
|
|
351
399
|
await this.initCOS();
|
|
352
400
|
}
|
|
353
401
|
const key = this.getFilePath(file);
|
|
354
|
-
|
|
402
|
+
const bucketConfig = this.getCurrentBucketConfig();
|
|
403
|
+
const region = getRegion(bucketConfig);
|
|
404
|
+
this.log('开始上传文件:', { filename: file.name, key, bucket: bucketConfig.name, region });
|
|
355
405
|
return new Promise((resolve, reject) => {
|
|
356
406
|
this.cos?.putObject({
|
|
357
|
-
Bucket:
|
|
358
|
-
Region:
|
|
407
|
+
Bucket: bucketConfig.name,
|
|
408
|
+
Region: region,
|
|
359
409
|
Key: key,
|
|
360
410
|
Body: file,
|
|
361
411
|
onProgress: config?.onProgressCallback,
|
|
@@ -389,6 +439,7 @@ class BeLinkCOS {
|
|
|
389
439
|
this.isDestroyed = true;
|
|
390
440
|
this.isInitialized = false;
|
|
391
441
|
this.mode = null;
|
|
442
|
+
this.projectName = undefined;
|
|
392
443
|
this.headers = {};
|
|
393
444
|
this.scopeLimit = false;
|
|
394
445
|
this.log('实例已销毁');
|
|
@@ -399,4 +450,4 @@ class BeLinkCOS {
|
|
|
399
450
|
}
|
|
400
451
|
}
|
|
401
452
|
|
|
402
|
-
export { BUCKETS_CONFIG, BeLinkCOS, REGION };
|
|
453
|
+
export { BUCKETS_CONFIG, BeLinkCOS, PROJECT_BUCKETS_CONFIG, REGION, getBucketConfig, getRegion };
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd,iBAAiB;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE9B,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,aAAa;IACb,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,KAAK,IAAI,CAAC;IACjD,uBAAuB;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU;IACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,iBAAiB;IACjB,GAAG,EAAE,MAAM,CAAC;CACb"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iBAAiB;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE9B,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,aAAa;IACb,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,KAAK,IAAI,CAAC;IACjD,uBAAuB;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU;IACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,iBAAiB;IACjB,GAAG,EAAE,MAAM,CAAC;CACb"}
|