yx-oss-cli 1.0.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 +255 -0
- package/dist/api.d.ts +115 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +176 -0
- package/dist/api.js.map +1 -0
- package/dist/bin/oss-cli.d.ts +7 -0
- package/dist/bin/oss-cli.d.ts.map +1 -0
- package/dist/bin/oss-cli.js +178 -0
- package/dist/bin/oss-cli.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/services/config.service.d.ts +56 -0
- package/dist/services/config.service.d.ts.map +1 -0
- package/dist/services/config.service.js +115 -0
- package/dist/services/config.service.js.map +1 -0
- package/dist/services/file.service.d.ts +46 -0
- package/dist/services/file.service.d.ts.map +1 -0
- package/dist/services/file.service.js +94 -0
- package/dist/services/file.service.js.map +1 -0
- package/dist/services/oss.service.d.ts +53 -0
- package/dist/services/oss.service.d.ts.map +1 -0
- package/dist/services/oss.service.js +171 -0
- package/dist/services/oss.service.js.map +1 -0
- package/dist/utils/logger.d.ts +55 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +103 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +44 -0
package/README.md
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# OSS CLI
|
|
2
|
+
|
|
3
|
+
阿里云 OSS 命令行工具,支持文件上传、删除、同步等操作,适用于 CI/CD 流程和日常开发。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
### 方式一:全局安装(推荐)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# 进入 oss-cli 目录构建
|
|
11
|
+
cd oss-cli
|
|
12
|
+
npm install
|
|
13
|
+
npm run build
|
|
14
|
+
|
|
15
|
+
# 全局链接
|
|
16
|
+
npm link
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
安装后可在任意位置使用 `oss-cli` 命令。
|
|
20
|
+
|
|
21
|
+
### 方式二:作为项目依赖
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# 在你的项目中安装
|
|
25
|
+
npm install /path/to/oss-cli
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### 方式三:发布到 npm(团队共享)
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# 在 oss-cli 目录
|
|
32
|
+
npm publish
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
然后在其他项目中:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npm install @anthropic/oss-cli -D
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 配置凭证
|
|
42
|
+
|
|
43
|
+
### 环境变量(推荐用于 CI/CD)
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
export OSS_ACCESS_KEY_ID=your-access-key-id
|
|
47
|
+
export OSS_ACCESS_KEY_SECRET=your-access-key-secret
|
|
48
|
+
export OSS_BUCKET=your-bucket-name # 可选,默认 czxvasfile
|
|
49
|
+
export OSS_REGION=oss-cn-shanghai # 可选,默认 oss-cn-shanghai
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 命令行参数
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
oss-cli sync ./dist h5/test/app \
|
|
56
|
+
--access-key-id=xxx \
|
|
57
|
+
--access-key-secret=xxx \
|
|
58
|
+
--bucket=my-bucket \
|
|
59
|
+
--region=oss-cn-hangzhou
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 命令
|
|
63
|
+
|
|
64
|
+
### sync - 同步目录
|
|
65
|
+
|
|
66
|
+
先删除 OSS 目标目录的所有文件,再上传本地目录。适合部署场景。
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
oss-cli sync <本地路径> <OSS路径> [选项]
|
|
70
|
+
|
|
71
|
+
# 示例
|
|
72
|
+
oss-cli sync ./dist/dev/my-app h5/test/my-app
|
|
73
|
+
oss-cli sync ./build h5/prod/project --concurrency=5
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### upload - 上传文件/目录
|
|
77
|
+
|
|
78
|
+
仅上传,不删除已有文件。
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
oss-cli upload <本地路径> <OSS路径> [选项]
|
|
82
|
+
|
|
83
|
+
# 上传目录
|
|
84
|
+
oss-cli upload ./dist h5/test/app
|
|
85
|
+
|
|
86
|
+
# 上传单个文件
|
|
87
|
+
oss-cli upload ./index.html h5/test/app/index.html
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### delete - 删除 OSS 路径
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
oss-cli delete <OSS路径> [选项]
|
|
94
|
+
|
|
95
|
+
# 示例
|
|
96
|
+
oss-cli delete h5/test/old-project
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### test - 测试连接
|
|
100
|
+
|
|
101
|
+
验证 OSS 凭证和连接是否正常。
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
oss-cli test
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 选项
|
|
108
|
+
|
|
109
|
+
| 选项 | 环境变量 | 默认值 | 说明 |
|
|
110
|
+
| --------------------- | ----------------------- | ----------------- | ------------------------ |
|
|
111
|
+
| `--access-key-id` | `OSS_ACCESS_KEY_ID` | - | AccessKey ID(必需) |
|
|
112
|
+
| `--access-key-secret` | `OSS_ACCESS_KEY_SECRET` | - | AccessKey Secret(必需) |
|
|
113
|
+
| `--bucket` | `OSS_BUCKET` | `czxvasfile` | Bucket 名称 |
|
|
114
|
+
| `--region` | `OSS_REGION` | `oss-cn-shanghai` | 区域 |
|
|
115
|
+
| `--concurrency` | - | `10` | 并发上传数 |
|
|
116
|
+
|
|
117
|
+
## 在项目中使用
|
|
118
|
+
|
|
119
|
+
### package.json 脚本
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"scripts": {
|
|
124
|
+
"deploy:test": "oss-cli sync ./dist/dev/my-app h5/test/my-app",
|
|
125
|
+
"deploy:prod": "oss-cli sync ./dist/prod/my-app h5/prod/my-app"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Jenkins Pipeline
|
|
131
|
+
|
|
132
|
+
```groovy
|
|
133
|
+
pipeline {
|
|
134
|
+
environment {
|
|
135
|
+
OSS_ACCESS_KEY_ID = credentials('oss-access-key-id')
|
|
136
|
+
OSS_ACCESS_KEY_SECRET = credentials('oss-access-key-secret')
|
|
137
|
+
}
|
|
138
|
+
stages {
|
|
139
|
+
stage('Deploy') {
|
|
140
|
+
steps {
|
|
141
|
+
sh 'npm run build'
|
|
142
|
+
sh 'oss-cli sync ./dist h5/${BRANCH_NAME}/my-app'
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### GitHub Actions
|
|
150
|
+
|
|
151
|
+
```yaml
|
|
152
|
+
- name: Deploy to OSS
|
|
153
|
+
env:
|
|
154
|
+
OSS_ACCESS_KEY_ID: ${{ secrets.OSS_ACCESS_KEY_ID }}
|
|
155
|
+
OSS_ACCESS_KEY_SECRET: ${{ secrets.OSS_ACCESS_KEY_SECRET }}
|
|
156
|
+
run: |
|
|
157
|
+
npx oss-cli sync ./dist h5/prod/my-app
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## 特性
|
|
161
|
+
|
|
162
|
+
- **HTML 文件自动设置不缓存** - `.html` 文件上传时自动添加 `Cache-Control: no-cache` 头
|
|
163
|
+
- **自动忽略无用文件** - 跳过 `.DS_Store`、`.map` 等文件
|
|
164
|
+
- **并发上传** - 默认 10 个并发,可配置
|
|
165
|
+
- **友好的日志输出** - 带 emoji 的进度显示
|
|
166
|
+
|
|
167
|
+
## 编程方式使用
|
|
168
|
+
|
|
169
|
+
### 简化 API(推荐)
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
import {
|
|
173
|
+
syncToOss,
|
|
174
|
+
uploadToOss,
|
|
175
|
+
deleteFromOss,
|
|
176
|
+
testOssConnection,
|
|
177
|
+
} from "@anthropic/oss-cli";
|
|
178
|
+
|
|
179
|
+
// 同步目录(先删除再上传)
|
|
180
|
+
const syncResult = await syncToOss("./dist", "h5/test/my-app", {
|
|
181
|
+
accessKeyId: "xxx",
|
|
182
|
+
accessKeySecret: "xxx",
|
|
183
|
+
bucket: "my-bucket", // 可选
|
|
184
|
+
region: "oss-cn-shanghai", // 可选
|
|
185
|
+
concurrency: 10, // 可选
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
if (syncResult.success) {
|
|
189
|
+
console.log(`删除: ${syncResult.deletedCount} 个文件`);
|
|
190
|
+
console.log(`上传: ${syncResult.uploadedCount} 个文件`);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// 仅上传(不删除)
|
|
194
|
+
const uploadResult = await uploadToOss("./dist", "h5/test/my-app", {
|
|
195
|
+
accessKeyId: "xxx",
|
|
196
|
+
accessKeySecret: "xxx",
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
// 删除目录
|
|
200
|
+
const deleteResult = await deleteFromOss("h5/test/old-app", {
|
|
201
|
+
accessKeyId: "xxx",
|
|
202
|
+
accessKeySecret: "xxx",
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
// 测试连接
|
|
206
|
+
const testResult = await testOssConnection({
|
|
207
|
+
accessKeyId: "xxx",
|
|
208
|
+
accessKeySecret: "xxx",
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
if (testResult.success) {
|
|
212
|
+
console.log(`Bucket: ${testResult.bucketInfo?.name}`);
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### 底层服务(高级用法)
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
import { OssService, ConfigService, FileService } from "@anthropic/oss-cli";
|
|
220
|
+
|
|
221
|
+
const config = ConfigService.getOssConfig({
|
|
222
|
+
accessKeyId: "xxx",
|
|
223
|
+
accessKeySecret: "xxx",
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
const ossService = new OssService(config);
|
|
227
|
+
const cliOptions = ConfigService.getCliOptions({ concurrency: 5 });
|
|
228
|
+
|
|
229
|
+
// 同步目录
|
|
230
|
+
await ossService.syncDirectory("./dist", "h5/test/app", cliOptions);
|
|
231
|
+
|
|
232
|
+
// 上传目录
|
|
233
|
+
await ossService.uploadDirectory("./dist", "h5/test/app", cliOptions);
|
|
234
|
+
|
|
235
|
+
// 删除目录
|
|
236
|
+
await ossService.deleteDirectory("h5/test/old-app");
|
|
237
|
+
|
|
238
|
+
// 测试连接
|
|
239
|
+
await ossService.testConnection();
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## 常见问题
|
|
243
|
+
|
|
244
|
+
### 连接失败
|
|
245
|
+
|
|
246
|
+
1. 检查 AccessKey ID/Secret 是否正确
|
|
247
|
+
2. 检查 Bucket 名称和区域是否匹配
|
|
248
|
+
3. 检查系统时间是否准确(OSS 签名依赖时间)
|
|
249
|
+
4. 检查网络连接
|
|
250
|
+
|
|
251
|
+
### 上传失败
|
|
252
|
+
|
|
253
|
+
1. 检查本地路径是否存在
|
|
254
|
+
2. 检查 OSS 权限是否足够
|
|
255
|
+
3. 尝试降低并发数:`--concurrency=1`
|
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OSS CLI API - 供其他项目调用的简化接口
|
|
3
|
+
*/
|
|
4
|
+
import { DeleteResult } from './services/oss.service.js';
|
|
5
|
+
export interface SyncOptions {
|
|
6
|
+
/** AccessKey ID */
|
|
7
|
+
accessKeyId: string;
|
|
8
|
+
/** AccessKey Secret */
|
|
9
|
+
accessKeySecret: string;
|
|
10
|
+
/** Bucket 名称,默认 czxvasfile */
|
|
11
|
+
bucket?: string;
|
|
12
|
+
/** 区域,默认 oss-cn-shanghai */
|
|
13
|
+
region?: string;
|
|
14
|
+
/** 并发数,默认 10 */
|
|
15
|
+
concurrency?: number;
|
|
16
|
+
/** 超时时间(毫秒),默认 60000 */
|
|
17
|
+
timeout?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface SyncResult {
|
|
20
|
+
/** 是否成功 */
|
|
21
|
+
success: boolean;
|
|
22
|
+
/** 删除的文件数 */
|
|
23
|
+
deletedCount: number;
|
|
24
|
+
/** 上传成功数 */
|
|
25
|
+
uploadedCount: number;
|
|
26
|
+
/** 上传失败数 */
|
|
27
|
+
failedCount: number;
|
|
28
|
+
/** 错误信息 */
|
|
29
|
+
error?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface UploadToOssResult {
|
|
32
|
+
/** 是否成功 */
|
|
33
|
+
success: boolean;
|
|
34
|
+
/** 上传成功数 */
|
|
35
|
+
uploadedCount: number;
|
|
36
|
+
/** 上传失败数 */
|
|
37
|
+
failedCount: number;
|
|
38
|
+
/** 上传的文件列表 */
|
|
39
|
+
files: string[];
|
|
40
|
+
/** 错误信息 */
|
|
41
|
+
error?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 同步本地目录到 OSS(先删除再上传)
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* import { syncToOss } from '@anthropic/oss-cli';
|
|
49
|
+
*
|
|
50
|
+
* const result = await syncToOss('./dist', 'h5/test/my-app', {
|
|
51
|
+
* accessKeyId: 'xxx',
|
|
52
|
+
* accessKeySecret: 'xxx',
|
|
53
|
+
* });
|
|
54
|
+
*
|
|
55
|
+
* if (result.success) {
|
|
56
|
+
* console.log(`上传成功: ${result.uploadedCount} 个文件`);
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function syncToOss(localPath: string, ossPath: string, options: SyncOptions): Promise<SyncResult>;
|
|
61
|
+
/**
|
|
62
|
+
* 上传本地目录到 OSS(不删除已有文件)
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* import { uploadToOss } from '@anthropic/oss-cli';
|
|
67
|
+
*
|
|
68
|
+
* const result = await uploadToOss('./dist', 'h5/test/my-app', {
|
|
69
|
+
* accessKeyId: 'xxx',
|
|
70
|
+
* accessKeySecret: 'xxx',
|
|
71
|
+
* });
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function uploadToOss(localPath: string, ossPath: string, options: SyncOptions): Promise<UploadToOssResult>;
|
|
75
|
+
/**
|
|
76
|
+
* 删除 OSS 路径下的所有文件
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* import { deleteFromOss } from '@anthropic/oss-cli';
|
|
81
|
+
*
|
|
82
|
+
* const result = await deleteFromOss('h5/test/old-app', {
|
|
83
|
+
* accessKeyId: 'xxx',
|
|
84
|
+
* accessKeySecret: 'xxx',
|
|
85
|
+
* });
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export declare function deleteFromOss(ossPath: string, options: SyncOptions): Promise<DeleteResult>;
|
|
89
|
+
/**
|
|
90
|
+
* 测试 OSS 连接
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* import { testOssConnection } from '@anthropic/oss-cli';
|
|
95
|
+
*
|
|
96
|
+
* const result = await testOssConnection({
|
|
97
|
+
* accessKeyId: 'xxx',
|
|
98
|
+
* accessKeySecret: 'xxx',
|
|
99
|
+
* });
|
|
100
|
+
*
|
|
101
|
+
* if (result.success) {
|
|
102
|
+
* console.log(`Bucket: ${result.bucketInfo?.name}`);
|
|
103
|
+
* }
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export declare function testOssConnection(options: SyncOptions): Promise<{
|
|
107
|
+
success: boolean;
|
|
108
|
+
bucketInfo?: {
|
|
109
|
+
name: string;
|
|
110
|
+
region: string;
|
|
111
|
+
creationDate: string;
|
|
112
|
+
};
|
|
113
|
+
error?: string;
|
|
114
|
+
}>;
|
|
115
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAc,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,WAAW,WAAW;IACxB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACvB,WAAW;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAC9B,WAAW;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,SAAS,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,GACrB,OAAO,CAAC,UAAU,CAAC,CAkCrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAkC5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,GACrB,OAAO,CAAC,YAAY,CAAC,CAoBvB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;IACnE,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAwBD"}
|
package/dist/api.js
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OSS CLI API - 供其他项目调用的简化接口
|
|
3
|
+
*/
|
|
4
|
+
import { OssService } from './services/oss.service.js';
|
|
5
|
+
/**
|
|
6
|
+
* 同步本地目录到 OSS(先删除再上传)
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { syncToOss } from '@anthropic/oss-cli';
|
|
11
|
+
*
|
|
12
|
+
* const result = await syncToOss('./dist', 'h5/test/my-app', {
|
|
13
|
+
* accessKeyId: 'xxx',
|
|
14
|
+
* accessKeySecret: 'xxx',
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* if (result.success) {
|
|
18
|
+
* console.log(`上传成功: ${result.uploadedCount} 个文件`);
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export async function syncToOss(localPath, ossPath, options) {
|
|
23
|
+
try {
|
|
24
|
+
const ossConfig = {
|
|
25
|
+
accessKeyId: options.accessKeyId,
|
|
26
|
+
accessKeySecret: options.accessKeySecret,
|
|
27
|
+
bucket: options.bucket ?? 'czxvasfile',
|
|
28
|
+
region: options.region ?? 'oss-cn-shanghai',
|
|
29
|
+
timeout: options.timeout ?? 60000,
|
|
30
|
+
};
|
|
31
|
+
const cliOptions = {
|
|
32
|
+
concurrency: options.concurrency ?? 10,
|
|
33
|
+
ignorePatterns: [/\.DS_Store$/i, /\.map$/i],
|
|
34
|
+
};
|
|
35
|
+
const ossService = new OssService(ossConfig);
|
|
36
|
+
const result = await ossService.syncDirectory(localPath, ossPath, cliOptions);
|
|
37
|
+
return {
|
|
38
|
+
success: result.uploadResult.failed === 0,
|
|
39
|
+
deletedCount: result.deleteResult.deletedCount,
|
|
40
|
+
uploadedCount: result.uploadResult.success,
|
|
41
|
+
failedCount: result.uploadResult.failed,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const err = error;
|
|
46
|
+
return {
|
|
47
|
+
success: false,
|
|
48
|
+
deletedCount: 0,
|
|
49
|
+
uploadedCount: 0,
|
|
50
|
+
failedCount: 0,
|
|
51
|
+
error: err.message,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 上传本地目录到 OSS(不删除已有文件)
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* import { uploadToOss } from '@anthropic/oss-cli';
|
|
61
|
+
*
|
|
62
|
+
* const result = await uploadToOss('./dist', 'h5/test/my-app', {
|
|
63
|
+
* accessKeyId: 'xxx',
|
|
64
|
+
* accessKeySecret: 'xxx',
|
|
65
|
+
* });
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export async function uploadToOss(localPath, ossPath, options) {
|
|
69
|
+
try {
|
|
70
|
+
const ossConfig = {
|
|
71
|
+
accessKeyId: options.accessKeyId,
|
|
72
|
+
accessKeySecret: options.accessKeySecret,
|
|
73
|
+
bucket: options.bucket ?? 'czxvasfile',
|
|
74
|
+
region: options.region ?? 'oss-cn-shanghai',
|
|
75
|
+
timeout: options.timeout ?? 60000,
|
|
76
|
+
};
|
|
77
|
+
const cliOptions = {
|
|
78
|
+
concurrency: options.concurrency ?? 10,
|
|
79
|
+
ignorePatterns: [/\.DS_Store$/i, /\.map$/i],
|
|
80
|
+
};
|
|
81
|
+
const ossService = new OssService(ossConfig);
|
|
82
|
+
const result = await ossService.uploadDirectory(localPath, ossPath, cliOptions);
|
|
83
|
+
return {
|
|
84
|
+
success: result.failed === 0,
|
|
85
|
+
uploadedCount: result.success,
|
|
86
|
+
failedCount: result.failed,
|
|
87
|
+
files: result.files,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
const err = error;
|
|
92
|
+
return {
|
|
93
|
+
success: false,
|
|
94
|
+
uploadedCount: 0,
|
|
95
|
+
failedCount: 0,
|
|
96
|
+
files: [],
|
|
97
|
+
error: err.message,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 删除 OSS 路径下的所有文件
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* import { deleteFromOss } from '@anthropic/oss-cli';
|
|
107
|
+
*
|
|
108
|
+
* const result = await deleteFromOss('h5/test/old-app', {
|
|
109
|
+
* accessKeyId: 'xxx',
|
|
110
|
+
* accessKeySecret: 'xxx',
|
|
111
|
+
* });
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export async function deleteFromOss(ossPath, options) {
|
|
115
|
+
try {
|
|
116
|
+
const ossConfig = {
|
|
117
|
+
accessKeyId: options.accessKeyId,
|
|
118
|
+
accessKeySecret: options.accessKeySecret,
|
|
119
|
+
bucket: options.bucket ?? 'czxvasfile',
|
|
120
|
+
region: options.region ?? 'oss-cn-shanghai',
|
|
121
|
+
timeout: options.timeout ?? 60000,
|
|
122
|
+
};
|
|
123
|
+
const ossService = new OssService(ossConfig);
|
|
124
|
+
return await ossService.deleteDirectory(ossPath);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
const err = error;
|
|
128
|
+
return {
|
|
129
|
+
success: false,
|
|
130
|
+
deletedCount: 0,
|
|
131
|
+
error: err.message,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* 测试 OSS 连接
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* import { testOssConnection } from '@anthropic/oss-cli';
|
|
141
|
+
*
|
|
142
|
+
* const result = await testOssConnection({
|
|
143
|
+
* accessKeyId: 'xxx',
|
|
144
|
+
* accessKeySecret: 'xxx',
|
|
145
|
+
* });
|
|
146
|
+
*
|
|
147
|
+
* if (result.success) {
|
|
148
|
+
* console.log(`Bucket: ${result.bucketInfo?.name}`);
|
|
149
|
+
* }
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
export async function testOssConnection(options) {
|
|
153
|
+
try {
|
|
154
|
+
const ossConfig = {
|
|
155
|
+
accessKeyId: options.accessKeyId,
|
|
156
|
+
accessKeySecret: options.accessKeySecret,
|
|
157
|
+
bucket: options.bucket ?? 'czxvasfile',
|
|
158
|
+
region: options.region ?? 'oss-cn-shanghai',
|
|
159
|
+
timeout: options.timeout ?? 60000,
|
|
160
|
+
};
|
|
161
|
+
const ossService = new OssService(ossConfig);
|
|
162
|
+
const bucketInfo = await ossService.testConnection();
|
|
163
|
+
return {
|
|
164
|
+
success: true,
|
|
165
|
+
bucketInfo,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
const err = error;
|
|
170
|
+
return {
|
|
171
|
+
success: false,
|
|
172
|
+
error: err.message,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oss-cli.d.ts","sourceRoot":"","sources":["../../src/bin/oss-cli.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
|