{"_id":"@atomfe/oss-uploader","_rev":"6-f3efbf1467575d7072a6e207378cd8ce","name":"@atomfe/oss-uploader","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@atomfe/oss-uploader","version":"1.0.0","keywords":["aliyun","oss","upload","uploader","cli","storage","cloud","deployment","file-upload","batch-upload","aliyun-oss","oss-uploader","oss-cli","typescript"],"author":{"name":"lorainwings"},"license":"MIT","_id":"@atomfe/oss-uploader@1.0.0","maintainers":[{"name":"lorainwings","email":"lorainwings@gmail.com"}],"homepage":"https://github.com/lorainwings/aliyun-oss-uploader#readme","bugs":{"url":"https://github.com/lorainwings/aliyun-oss-uploader/issues"},"bin":{"oss-uploader":"dist/cli.mjs"},"dist":{"shasum":"90b0a79958bca404bf639f77b93f82a217673b29","tarball":"https://registry.npmjs.org/@atomfe/oss-uploader/-/oss-uploader-1.0.0.tgz","fileCount":17,"integrity":"sha512-mZraOBFVx2po/nk5VqnEkzLjVCsCv4xYPpaT3J8lVAMZP5U3YHgy32YH1MDePv4KXA7KifkjVD7t2BkZ2p53ng==","signatures":[{"sig":"MEYCIQC4IQPXJFkm6uD4AtIRYeYEkOx3f0ZyXqwNf2EVeoo3KwIhAIbtzZL0la3JzZIDgKuTxXOZRAZaeJlkxNsF/ae8leoE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atomfe%2foss-uploader@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":221212},"main":"./dist/index.cjs","_from":"file:atomfe-oss-uploader-1.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","release":"pnpm run build && changeset publish","test:ui":"vitest --ui","version":"changeset version","lint:fix":"eslint src --ext .ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"vitest watch","format:check":"prettier --check \"src/**/*.ts\" \"test/**/*.ts\"","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"lorainwings","email":"lorainwings@gmail.com"},"_resolved":"/tmp/52aaedb854803fa6a271407846addacf/atomfe-oss-uploader-1.0.0.tgz","_integrity":"sha512-mZraOBFVx2po/nk5VqnEkzLjVCsCv4xYPpaT3J8lVAMZP5U3YHgy32YH1MDePv4KXA7KifkjVD7t2BkZ2p53ng==","repository":{"url":"git+https://github.com/lorainwings/aliyun-oss-uploader.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful OSS uploader for uploading files to Aliyun OSS","directories":{},"lint-staged":{"src/**/*.ts":["eslint --fix","prettier --write"]},"_nodeVersion":"20.19.5","dependencies":{"ora":"^8.1.1","glob":"^11.0.0","chalk":"^5.3.0","ali-oss":"^6.21.0","commander":"^12.1.0","cosmiconfig":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","eslint":"^9.17.0","vitest":"^2.1.8","globals":"^15.13.0","prettier":"^3.4.2","@eslint/js":"^9.17.0","@vitest/ui":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2","lint-staged":"^15.2.11","@changesets/cli":"^2.27.10","@commitlint/cli":"^19.6.1","typescript-eslint":"^8.19.1","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@commitlint/config-conventional":"^19.6.0"},"_npmOperationalInternal":{"tmp":"tmp/oss-uploader_1.0.0_1760812759846_0.7482472080888105","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@atomfe/oss-uploader","version":"1.1.0","keywords":["aliyun","oss","upload","uploader","cli","storage","cloud","deployment","file-upload","batch-upload","aliyun-oss","oss-uploader","oss-cli","typescript"],"author":{"name":"lorainwings"},"license":"MIT","_id":"@atomfe/oss-uploader@1.1.0","maintainers":[{"name":"lorainwings","email":"lorainwings@gmail.com"}],"homepage":"https://github.com/lorainwings/aliyun-oss-uploader#readme","bugs":{"url":"https://github.com/lorainwings/aliyun-oss-uploader/issues"},"bin":{"oss-uploader":"dist/cli.mjs"},"dist":{"shasum":"2692d508b81277867dd66aaff20680a26be0adcf","tarball":"https://registry.npmjs.org/@atomfe/oss-uploader/-/oss-uploader-1.1.0.tgz","fileCount":17,"integrity":"sha512-i+ePeOYrLJz4eQ76+AkmxFnGJ+LfrJADz1yJBBO24WsmAar0sqeQVDN/+syID9++pA9E94HtiCxrFa8MtwIdOQ==","signatures":[{"sig":"MEQCIFc8+nFl8BY+W7ZtNOolTGnfAv14N8wrJE5aEkGyx+RrAiA71qiqeO9ZH2Nzf9aclFzwXNWVaxnig6sSt9Kl96lKGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atomfe%2foss-uploader@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":263267},"main":"./dist/index.cjs","_from":"file:atomfe-oss-uploader-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","release":"pnpm run build && changeset publish","test:ui":"vitest --ui","version":"changeset version","lint:fix":"eslint src --ext .ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"vitest watch","format:check":"prettier --check \"src/**/*.ts\" \"test/**/*.ts\"","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"lorainwings","email":"lorainwings@gmail.com"},"_resolved":"/tmp/dee1bba90acb9c573f58099001356f99/atomfe-oss-uploader-1.1.0.tgz","_integrity":"sha512-i+ePeOYrLJz4eQ76+AkmxFnGJ+LfrJADz1yJBBO24WsmAar0sqeQVDN/+syID9++pA9E94HtiCxrFa8MtwIdOQ==","repository":{"url":"git+https://github.com/lorainwings/aliyun-oss-uploader.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful OSS uploader for uploading files to Aliyun OSS","directories":{},"lint-staged":{"src/**/*.ts":["eslint --fix","prettier --write"]},"_nodeVersion":"20.19.5","dependencies":{"ora":"^8.1.1","glob":"^11.0.0","chalk":"^5.3.0","ali-oss":"^6.21.0","commander":"^12.1.0","cosmiconfig":"^9.0.0","cli-progress":"^3.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","eslint":"^9.17.0","vitest":"^2.1.8","globals":"^15.13.0","prettier":"^3.4.2","@eslint/js":"^9.17.0","@vitest/ui":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2","lint-staged":"^15.2.11","@changesets/cli":"^2.27.10","@commitlint/cli":"^19.6.1","typescript-eslint":"^8.19.1","@types/cli-progress":"^3.11.6","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@commitlint/config-conventional":"^19.6.0"},"_npmOperationalInternal":{"tmp":"tmp/oss-uploader_1.1.0_1760853199957_0.6276208508734169","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@atomfe/oss-uploader","version":"1.1.1","keywords":["aliyun","oss","upload","uploader","cli","storage","cloud","deployment","file-upload","batch-upload","aliyun-oss","oss-uploader","oss-cli","typescript"],"author":{"name":"lorainwings"},"license":"MIT","_id":"@atomfe/oss-uploader@1.1.1","maintainers":[{"name":"lorainwings","email":"lorainwings@gmail.com"}],"homepage":"https://github.com/lorainwings/aliyun-oss-uploader#readme","bugs":{"url":"https://github.com/lorainwings/aliyun-oss-uploader/issues"},"bin":{"oss-uploader":"dist/cli.mjs"},"dist":{"shasum":"3e119aa0e2efe03e504f479f5990f4c9cb1282e7","tarball":"https://registry.npmjs.org/@atomfe/oss-uploader/-/oss-uploader-1.1.1.tgz","fileCount":17,"integrity":"sha512-7NITqhTVNIne7x4GlpockEDO/U+VurDMf8FBFmill2WvlZyNhowQRzZy/gKQr/oa18O2kd6sGArYTpXNs2JuQA==","signatures":[{"sig":"MEYCIQC4RtWKkKpu4qj3M2XBhXEVnqknQXlyPBhB44W5W3yWrwIhANySxQS8H9PF7CU8R57WohGpp6og0WGJ9rjrd7MLNnmw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atomfe%2foss-uploader@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":274927},"main":"./dist/index.cjs","_from":"file:atomfe-oss-uploader-1.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","release":"pnpm run build && changeset publish","test:ui":"vitest --ui","version":"changeset version","lint:fix":"eslint src --ext .ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"vitest watch","format:check":"prettier --check \"src/**/*.ts\" \"test/**/*.ts\"","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"lorainwings","email":"lorainwings@gmail.com"},"_resolved":"/tmp/8f2f427eb8c4caff40044cf319ff48d5/atomfe-oss-uploader-1.1.1.tgz","_integrity":"sha512-7NITqhTVNIne7x4GlpockEDO/U+VurDMf8FBFmill2WvlZyNhowQRzZy/gKQr/oa18O2kd6sGArYTpXNs2JuQA==","repository":{"url":"git+https://github.com/lorainwings/aliyun-oss-uploader.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful OSS uploader for uploading files to Aliyun OSS","directories":{},"lint-staged":{"src/**/*.ts":["eslint --fix","prettier --write"]},"_nodeVersion":"20.19.5","dependencies":{"ora":"^8.1.1","glob":"^11.0.0","chalk":"^5.3.0","ali-oss":"^6.21.0","commander":"^12.1.0","cosmiconfig":"^9.0.0","cli-progress":"^3.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","eslint":"^9.17.0","vitest":"^2.1.8","globals":"^15.13.0","prettier":"^3.4.2","@eslint/js":"^9.17.0","@vitest/ui":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2","lint-staged":"^15.2.11","@changesets/cli":"^2.27.10","@commitlint/cli":"^19.6.1","typescript-eslint":"^8.19.1","@types/cli-progress":"^3.11.6","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@commitlint/config-conventional":"^19.6.0"},"_npmOperationalInternal":{"tmp":"tmp/oss-uploader_1.1.1_1760877544927_0.180661408546259","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@atomfe/oss-uploader","version":"1.1.2","keywords":["aliyun","oss","upload","uploader","cli","storage","cloud","deployment","file-upload","batch-upload","aliyun-oss","oss-uploader","oss-cli","typescript"],"author":{"name":"lorainwings"},"license":"MIT","_id":"@atomfe/oss-uploader@1.1.2","maintainers":[{"name":"lorainwings","email":"lorainwings@gmail.com"}],"homepage":"https://github.com/lorainwings/aliyun-oss-uploader#readme","bugs":{"url":"https://github.com/lorainwings/aliyun-oss-uploader/issues"},"bin":{"oss-uploader":"dist/cli.mjs"},"dist":{"shasum":"9a6347328a7b7c5a253d28ebdb406931a53e5e6c","tarball":"https://registry.npmjs.org/@atomfe/oss-uploader/-/oss-uploader-1.1.2.tgz","fileCount":17,"integrity":"sha512-/bRMR/DJUSloe1yg0a9VrzXfVGVXpsBQJEEpymIZTNAFhRLdAYXJF9RpNdmAYbtRqNi89Q/CVihN3E8siLnHNg==","signatures":[{"sig":"MEYCIQCHylvSPnLWfRMAroqgUh1C/sjazIqnLsHj7I4Gy8UWWAIhAImmc23o0Y1CkSpKkj5Ywtyn4usLa3crHpQne/5RKThg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atomfe%2foss-uploader@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":304676},"main":"./dist/index.cjs","_from":"file:atomfe-oss-uploader-1.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","release":"pnpm run build && changeset publish","test:ui":"vitest --ui","version":"changeset version","lint:fix":"eslint src --ext .ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"vitest watch","format:check":"prettier --check \"src/**/*.ts\" \"test/**/*.ts\"","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"lorainwings","email":"lorainwings@gmail.com"},"_resolved":"/tmp/78cc49b3b3b027b8d833c64f8e616dd7/atomfe-oss-uploader-1.1.2.tgz","_integrity":"sha512-/bRMR/DJUSloe1yg0a9VrzXfVGVXpsBQJEEpymIZTNAFhRLdAYXJF9RpNdmAYbtRqNi89Q/CVihN3E8siLnHNg==","repository":{"url":"git+https://github.com/lorainwings/aliyun-oss-uploader.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful OSS uploader for uploading files to Aliyun OSS","directories":{},"lint-staged":{"src/**/*.ts":["eslint --fix","prettier --write"]},"_nodeVersion":"20.19.5","dependencies":{"ora":"^8.1.1","glob":"^11.0.0","chalk":"^5.3.0","ali-oss":"^6.21.0","commander":"^12.1.0","cosmiconfig":"^9.0.0","cli-progress":"^3.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","eslint":"^9.17.0","vitest":"^2.1.8","globals":"^15.13.0","prettier":"^3.4.2","@eslint/js":"^9.17.0","@vitest/ui":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2","lint-staged":"^15.2.11","@changesets/cli":"^2.27.10","@commitlint/cli":"^19.6.1","typescript-eslint":"^8.19.1","@types/cli-progress":"^3.11.6","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@commitlint/config-conventional":"^19.6.0"},"_npmOperationalInternal":{"tmp":"tmp/oss-uploader_1.1.2_1761836302377_0.6890268176632011","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@atomfe/oss-uploader","version":"1.1.3","keywords":["aliyun","oss","upload","uploader","cli","storage","cloud","deployment","file-upload","batch-upload","aliyun-oss","oss-uploader","oss-cli","typescript"],"author":{"name":"lorainwings"},"license":"MIT","_id":"@atomfe/oss-uploader@1.1.3","maintainers":[{"name":"lorainwings","email":"lorainwings@gmail.com"}],"homepage":"https://github.com/lorainwings/aliyun-oss-uploader#readme","bugs":{"url":"https://github.com/lorainwings/aliyun-oss-uploader/issues"},"bin":{"oss-uploader":"dist/cli.mjs"},"dist":{"shasum":"3596696406f4e0094f5a28a0a89a4435ee373d96","tarball":"https://registry.npmjs.org/@atomfe/oss-uploader/-/oss-uploader-1.1.3.tgz","fileCount":17,"integrity":"sha512-i0CaXMQsnrnQA3oQdva3HC8WBL7rN0zm0ulvKhrvNoW9UPYO5iPoLBwgdMr/lL4h/mhnq0kgcDP03hJCPeRYuw==","signatures":[{"sig":"MEYCIQDW4R5OG0+0jrNigKvxWB97638R6UkOAfp4emQ2LiKIvgIhANUa73GQPsZZKSN3tzXRPHjrEhy5FJGt3FFGAFBeRu8p","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atomfe%2foss-uploader@1.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":326993},"main":"./dist/index.cjs","_from":"file:atomfe-oss-uploader-1.1.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"vitest run","build":"tsup","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","release":"pnpm run build && changeset publish","test:ui":"vitest --ui","version":"changeset version","lint:fix":"eslint src --ext .ts --fix","changeset":"changeset","typecheck":"tsc --noEmit","test:watch":"vitest watch","format:check":"prettier --check \"src/**/*.ts\" \"test/**/*.ts\"","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"lorainwings","email":"lorainwings@gmail.com"},"_resolved":"/tmp/9d1535d59ab73da14e751139643fc384/atomfe-oss-uploader-1.1.3.tgz","_integrity":"sha512-i0CaXMQsnrnQA3oQdva3HC8WBL7rN0zm0ulvKhrvNoW9UPYO5iPoLBwgdMr/lL4h/mhnq0kgcDP03hJCPeRYuw==","repository":{"url":"git+https://github.com/lorainwings/aliyun-oss-uploader.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful OSS uploader for uploading files to Aliyun OSS","directories":{},"lint-staged":{"src/**/*.ts":["eslint --fix","prettier --write"]},"_nodeVersion":"20.19.5","dependencies":{"ora":"^8.1.1","glob":"^11.0.0","chalk":"^5.3.0","ali-oss":"^6.21.0","commander":"^12.1.0","cosmiconfig":"^9.0.0","cli-progress":"^3.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","husky":"^9.1.7","eslint":"^9.17.0","vitest":"^2.1.8","globals":"^15.13.0","prettier":"^3.4.2","@eslint/js":"^9.17.0","@vitest/ui":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2","lint-staged":"^15.2.11","@changesets/cli":"^2.27.10","@commitlint/cli":"^19.6.1","typescript-eslint":"^8.19.1","@types/cli-progress":"^3.11.6","@vitest/coverage-v8":"^2.1.8","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","@commitlint/config-conventional":"^19.6.0"},"_npmOperationalInternal":{"tmp":"tmp/oss-uploader_1.1.3_1762412531265_0.07053101161236075","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@atomfe/oss-uploader","version":"1.2.0","description":"A powerful OSS uploader for uploading files to Aliyun OSS","main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs","default":"./dist/index.mjs"},"./package.json":"./package.json"},"bin":{"oss-uploader":"dist/cli.mjs"},"scripts":{"dev":"tsup --watch","build":"tsup","test":"vitest run","test:watch":"vitest watch","test:ui":"vitest --ui","test:coverage":"vitest run --coverage","lint":"eslint src --ext .ts","lint:fix":"eslint src --ext .ts --fix","format":"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"","format:check":"prettier --check \"src/**/*.ts\" \"test/**/*.ts\"","typecheck":"tsc --noEmit","prepare":"husky","prepublishOnly":"pnpm run build && pnpm run lint && pnpm run format:check && pnpm run test","changeset":"changeset","version":"changeset version","release":"pnpm run build && changeset publish"},"keywords":["aliyun","oss","upload","uploader","cli","storage","cloud","deployment","file-upload","batch-upload","aliyun-oss","oss-uploader","oss-cli","typescript"],"author":{"name":"lorainwings"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/lorainwings/aliyun-oss-uploader.git"},"bugs":{"url":"https://github.com/lorainwings/aliyun-oss-uploader/issues"},"homepage":"https://github.com/lorainwings/aliyun-oss-uploader#readme","packageManager":"pnpm@10.18.2","dependencies":{"@inquirer/prompts":"^8.2.0","ali-oss":"^6.21.0","chalk":"^5.3.0","cli-progress":"^3.12.0","commander":"^12.1.0","cosmiconfig":"^9.0.0","glob":"^11.0.0","ora":"^8.1.1"},"devDependencies":{"@changesets/cli":"^2.27.10","@commitlint/cli":"^19.6.1","@commitlint/config-conventional":"^19.6.0","@eslint/js":"^9.17.0","@types/cli-progress":"^3.11.6","@types/node":"^22.10.2","@vitest/coverage-v8":"^2.1.8","@vitest/ui":"^2.1.8","eslint":"^9.17.0","eslint-config-prettier":"^9.1.0","eslint-plugin-prettier":"^5.2.1","globals":"^15.13.0","husky":"^9.1.7","lint-staged":"^15.2.11","prettier":"^3.4.2","tsup":"^8.5.0","typescript":"^5.7.2","typescript-eslint":"^8.19.1","vitest":"^2.1.8"},"engines":{"node":">=18.0.0","npm":">=9.0.0"},"lint-staged":{"src/**/*.ts":["eslint --fix","prettier --write"]},"gitHead":"3cf5bdbfa3a2a10701e36d7f0c45a8a7ef0e60db","_id":"@atomfe/oss-uploader@1.2.0","_nodeVersion":"22.22.0","_npmVersion":"11.8.0","dist":{"integrity":"sha512-uE+lC0+vtfqK0S8Pdao5lspNbuWFCY022kO6Iwlpji7dxBIM2PqoEIafhcA9vijUD8MJJvWYmyK/f7mzwxO6vA==","shasum":"8ec729cc2f6427b9b24012612b079aa5857858d7","tarball":"https://registry.npmjs.org/@atomfe/oss-uploader/-/oss-uploader-1.2.0.tgz","fileCount":17,"unpackedSize":356836,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@atomfe%2foss-uploader@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEUEwz3CX+DLnYAlgAffdOAIe/2FfRCJjxM9uVsFKO97AiBMjUqmpCpuKgtRzh+A04jzZh0juKCOb1Pi0DtKJpAtww=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c52ad426-e2cc-43b5-8354-f9f54638f221"}},"directories":{},"maintainers":[{"name":"lorainwings","email":"lorainwings@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/oss-uploader_1.2.0_1769836794034_0.034847628501966765"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-18T18:39:19.765Z","modified":"2026-01-31T05:19:54.552Z","1.0.0":"2025-10-18T18:39:20.034Z","1.1.0":"2025-10-19T05:53:20.157Z","1.1.1":"2025-10-19T12:39:05.120Z","1.1.2":"2025-10-30T14:58:22.610Z","1.1.3":"2025-11-06T07:02:11.459Z","1.2.0":"2026-01-31T05:19:54.224Z"},"bugs":{"url":"https://github.com/lorainwings/aliyun-oss-uploader/issues"},"author":{"name":"lorainwings"},"license":"MIT","homepage":"https://github.com/lorainwings/aliyun-oss-uploader#readme","keywords":["aliyun","oss","upload","uploader","cli","storage","cloud","deployment","file-upload","batch-upload","aliyun-oss","oss-uploader","oss-cli","typescript"],"repository":{"type":"git","url":"git+https://github.com/lorainwings/aliyun-oss-uploader.git"},"description":"A powerful OSS uploader for uploading files to Aliyun OSS","maintainers":[{"name":"lorainwings","email":"lorainwings@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"./favico.ico\" alt=\"oss-uploader Logo\" width=\"280\" />\n</p>\n\n<h1 align=\"center\"><b>oss-uploader</b></h1>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@atomfe/oss-uploader\"><img src=\"https://img.shields.io/npm/v/@atomfe/oss-uploader?color=42b883&label=npm&logo=npm\" alt=\"npm\"></a>\n  <a href=\"https://www.npmjs.com/package/@atomfe/oss-uploader\"><img src=\"https://img.shields.io/npm/dy/@atomfe/oss-uploader?label=downloads&logo=npm\" alt=\"downloads\"></a>\n  <a href=\"https://github.com/lorainwings/aliyun-oss-uploader/blob/main/LICENSE\"><img src=\"https://img.shields.io/github/license/lorainwings/aliyun-oss-uploader?color=blue&label=license&logo=open-source-initiative\" alt=\"license\"></a>\n  <a href=\"https://github.com/lorainwings/aliyun-oss-uploader/actions\"><img src=\"https://img.shields.io/github/actions/workflow/status/lorainwings/aliyun-oss-uploader/ci.yml?branch=main&label=CI&logo=github\" alt=\"CI\"></a>\n  <a href=\"https://codecov.io/gh/lorainwings/aliyun-oss-uploader\"><img src=\"https://codecov.io/gh/lorainwings/aliyun-oss-uploader/branch/main/graph/badge.svg\" alt=\"Coverage\"></a>\n  <img src=\"https://img.shields.io/badge/TypeScript-5.7-3178c6?logo=typescript&logoColor=white\" alt=\"TypeScript\">\n  <img src=\"https://img.shields.io/badge/Node.js-18%2B-339933?logo=node.js&logoColor=white\" alt=\"Node.js\">\n  <img src=\"https://img.shields.io/badge/ESM%2FCJS-双格式模块-yellow?logo=javascript&logoColor=white\" alt=\"Dual Module\">\n</p>\n\n<p align=\"center\">\n  <strong>🚀 强大的阿里云 OSS 上传器 🚀</strong>\n</p>\n\n<p align=\"center\">\n  <em>简单、快速、可靠 - 完美适配你的部署工作流</em>\n</p>\n\n<p align=\"center\">\n  <a href=\"./README.md\">English</a> | 简体中文\n</p>\n\n---\n\n## ✨ 特性\n\n- 🚀 **简单易用** - 一条命令完成文件上传\n- 📦 **批量上传** - 支持目录递归上传\n- 🔐 **安全可靠** - 多种配置文件格式，安全存储凭证\n- 🎯 **灵活配置** - 支持 Glob 模式文件过滤\n- 📊 **实时进度** - 实时显示上传进度和统计信息\n- 🗺️ **映射文件** - 自动生成本地文件与 OSS 地址的映射\n- 🔑 **内容哈希** - 自动添加 8 位内容哈希\n- 🛠️ **功能完整** - 上传、列表、删除等完整操作\n- 💪 **类型安全** - 使用 TypeScript 编写，完整的类型支持\n- ⚡ **现代化** - 双格式模块（ESM/CJS），使用最新的工具链\n- 🔄 **兼容性好** - 同时支持 CommonJS 和 ES Module 项目\n\n## 📦 安装\n\n```bash\nnpm install -g @atomfe/oss-uploader\n# 或\npnpm add -g @atomfe/oss-uploader\n# 或\nyarn global add @atomfe/oss-uploader\n```\n\n## 🚀 快速开始\n\n### 方式 1：JSON 配置\n\n```bash\n# 1. 初始化配置（JSON 格式）\noss-uploader init\n\n# 2. 编辑 .ossrc.json 填入你的凭证\n{\n  \"region\": \"YOUR_REGION\",\n  \"accessKeyId\": \"YOUR_ACCESS_KEY_ID\",\n  \"accessKeySecret\": \"YOUR_ACCESS_KEY_SECRET\",\n  \"bucket\": \"YOUR_BUCKET_NAME\"\n}\n\n# 3. 上传文件\noss-uploader upload ./file.txt\noss-uploader upload ./dist -t static/\n```\n\n### 方式 2：JavaScript 配置（推荐）\n\n```bash\n# 1. 初始化 JavaScript 配置\noss-uploader init -o oss.config.js\n\n# 2. 设置环境变量或编辑 oss.config.js\nexport OSS_REGION=\"oss-cn-hangzhou\"\nexport OSS_ACCESS_KEY_ID=\"your-access-key-id\"\nexport OSS_ACCESS_KEY_SECRET=\"your-access-key-secret\"\nexport OSS_BUCKET=\"your-bucket-name\"\n\n# 3. 上传文件\noss-uploader upload ./file.txt\noss-uploader upload ./dist -t static/\n```\n\n## 📖 使用说明\n\n### 命令列表\n\n```bash\n# 上传文件或目录（支持多个文件路径）\noss-uploader upload <sources...> [options]\n\n# 列出 OSS bucket 中的文件\noss-uploader list [prefix]\n\n# 从 OSS 删除文件\noss-uploader delete <path>\n\n# 显示 bucket 信息\noss-uploader info\n\n# 创建示例配置\noss-uploader init [选项]\n\n# init 命令选项：\n#   -o, --output <path>  配置文件输出路径（默认：.ossrc.json）\n#   -t, --type <type>    配置文件类型：json 或 js\n```\n\n### 上传选项\n\n| 选项 | 说明 |\n|------|------|\n| `-t, --target <path>` | OSS bucket 中的目标路径 |\n| `-c, --config <path>` | 配置文件路径 |\n| `-r, --recursive` | 递归上传目录（默认：true） |\n| `-o, --overwrite` | 覆盖已存在的文件（默认：true） |\n| `-i, --include <patterns...>` | 包含的文件模式（glob） |\n| `-e, --exclude <patterns...>` | 排除的文件模式（glob） |\n| `-v, --verbose` | 显示详细输出 |\n| `-m, --mapping [path]` | 生成上传映射文件（默认：.oss-uploader-mapping.json） |\n| `--no-mapping` | 不生成上传映射文件 |\n| `-h, --content-hash` | 添加内容哈希到文件名（默认：true） |\n| `--no-content-hash` | 不添加内容哈希到文件名 |\n\n### 使用示例\n\n```bash\n# 上传单个文件\noss-uploader upload ./image.png\n\n# 上传多个文件（批量上传）\noss-uploader upload ./file1.js ./file2.css ./image.png\n\n# 上传多个文件到指定目录\noss-uploader upload ./image1.png ./image2.jpg ./logo.svg -t images/2024/\n\n# 上传到指定目录\noss-uploader upload ./image.png -t images/2024/\n\n# 使用文件模式上传目录\noss-uploader upload ./dist -i \"**/*.js\" \"**/*.css\"\n\n# 排除特定文件\noss-uploader upload ./dist -e \"**/*.map\" \"**/test/**\"\n\n# 详细模式\noss-uploader upload ./dist -v\n\n# 生成自定义路径的映射文件\noss-uploader upload ./dist -m ./upload-map.json\n\n# 不生成映射文件\noss-uploader upload ./dist --no-mapping\n\n# 使用内容哈希上传（默认行为）\noss-uploader upload ./dist\n# 结果: file.js → file.a1b2c3d4.js\n\n# 不使用内容哈希上传\noss-uploader upload ./dist --no-content-hash\n# 结果: file.js → file.js\n\n# 混合上传文件和目录（批量上传）\noss-uploader upload ./src/file1.js ./src/file2.css ./assets\n```\n\n## 📊 进度展示\n\n工具会在上传过程中显示实时进度，支持两种模式：\n\n### 默认模式（进度条）\n\n批量上传时，会显示一个美观的进度条，包含：\n\n- ✅ 上传进度百分比\n- 📈 已上传/总文件数\n- 📄 当前正在上传的文件名\n\n```\nUpload Progress |████████████████████░░░░░░| 75% | 15/20 Files | src/components/Button.tsx\n```\n\n### 详细模式（-v）\n\n使用 `-v` 或 `--verbose` 选项可以查看每个文件的详细上传信息：\n\n```bash\noss-uploader upload ./dist -v\n```\n\n显示输出：\n\n```\n✓ Uploaded: src/index.js → static/index.js (24.5 KB)\n✓ Uploaded: src/styles.css → static/styles.css (12.3 KB)\n...\n```\n\n## 🔐 内容哈希功能\n\n默认情况下，上传器会为文件名添加 8 位内容哈希（类似于 webpack 的 chunkhash），提供缓存破坏能力。\n\n### 工作原理\n\n工具会根据文件内容生成 MD5 哈希，并将前 8 个字符添加到文件扩展名之前：\n\n```\n原文件名:  app.js\n上传后:   app.a1b2c3d4.js\n\n原文件名:  style.min.css\n上传后:   style.min.e5f6g7h8.css\n```\n\n### 优势\n\n- ✅ **缓存破坏** - 文件内容变化时自动失效浏览器缓存\n- 🔄 **版本控制** - 相同内容始终生成相同的哈希\n- 🚀 **CDN 友好** - 完美适配 CDN 缓存管理\n- 📦 **构建流程** - 与现代构建工具无缝集成\n\n### 使用方法\n\n```bash\n# 默认：启用内容哈希\noss-uploader upload ./dist\n# app.js → app.a1b2c3d4.js\n\n# 禁用内容哈希\noss-uploader upload ./dist --no-content-hash\n# app.js → app.js\n\n# 使用编程式 API\nimport { OSSUploader } from '@atomfe/oss-uploader';\n\nconst uploader = new OSSUploader(config);\n\n// 启用内容哈希（默认）\nawait uploader.upload({\n  source: './dist',\n  target: 'static/',\n  contentHash: true  // 默认值\n});\n\n// 禁用内容哈希\nawait uploader.upload({\n  source: './dist',\n  target: 'static/',\n  contentHash: false\n});\n```\n\n### 使用场景\n\n- 🌐 **静态站点部署** - 确保访客获取最新版本\n- 📱 **单页应用** - 可靠的资源更新机制\n- 🔧 **微服务架构** - 跨服务的一致版本管理\n- 📦 **资源分发** - 追踪不同版本的发布资源\n\n## 🗺️ 上传映射文件\n\n每次上传完成后，工具会自动在当前目录生成一个 `.oss-uploader-mapping.json` 文件，包含所有上传文件的详细信息：\n\n```json\n{\n  \"uploadTime\": \"2025-10-18T10:30:00.000Z\",\n  \"bucket\": \"my-bucket\",\n  \"region\": \"YOUR_REGION\",\n  \"totalFiles\": 10,\n  \"totalSize\": 1024000,\n  \"files\": [\n    {\n      \"localPath\": \"/path/to/local/file.js\",\n      \"remotePath\": \"static/file.js\",\n      \"url\": \"https://my-bucket.YOUR_REGION.aliyuncs.com/static/file.js\",\n      \"size\": 1024,\n      \"uploadTime\": \"2025-10-18T10:30:00.000Z\"\n    }\n  ]\n}\n```\n\n### 映射文件用途\n\n- 📝 **记录备份** - 保存每次上传的完整记录\n- 🔗 **快速访问** - 获取所有上传文件的 URL\n- 📊 **统计分析** - 分析上传的文件数量和大小\n- 🔄 **CI/CD 集成** - 在构建流程中使用映射信息\n- 📱 **CDN 配置** - 方便配置 CDN 缓存规则\n\n## ⚙️ 配置\n\n工具支持多种配置来源：\n\n**优先级顺序：** 优先使用配置文件，无配置文件时使用环境变量\n\n> **注意：** 如果存在配置文件，将优先使用配置文件。只有在找不到配置文件时才会使用环境变量。\n\n### 配置来源\n\n1. **配置文件**（按以下顺序搜索）：\n   - `.ossrc` / `.ossrc.json`\n   - `.ossrc.yaml` / `.ossrc.yml`\n   - `oss.config.js` / `oss.config.json`\n   - `package.json` 中的 `oss` 字段\n\n2. **环境变量**：\n   - `OSS_REGION`\n   - `OSS_ACCESS_KEY_ID`\n   - `OSS_ACCESS_KEY_SECRET`\n   - `OSS_BUCKET`\n   - `OSS_ENDPOINT`（可选）\n   - `OSS_INTERNAL`（可选，`true`/`false`）\n   - `OSS_SECURE`（可选，`true`/`false`）\n   - `OSS_TIMEOUT`（可选，单位毫秒）\n\n### 配置字段\n\n| 字段 | 必需 | 说明 |\n|------|------|------|\n| `region` | ✅ | OSS 地域（如：`oss-cn-hangzhou`） |\n| `accessKeyId` | ✅ | AccessKey ID |\n| `accessKeySecret` | ✅ | AccessKey Secret |\n| `bucket` | ✅ | Bucket 名称 |\n| `endpoint` | ❌ | 自定义 endpoint |\n| `internal` | ❌ | 是否使用内网 |\n| `secure` | ❌ | 是否使用 HTTPS（默认：true） |\n| `timeout` | ❌ | 超时时间（毫秒，默认：60000） |\n\n### 示例：`.ossrc.json`\n\n```json\n{\n  \"region\": \"YOUR_REGION\",\n  \"accessKeyId\": \"YOUR_ACCESS_KEY_ID\",\n  \"accessKeySecret\": \"YOUR_ACCESS_KEY_SECRET\",\n  \"bucket\": \"my-bucket\"\n}\n```\n\n### 示例：`oss.config.js`\n\n使用 `oss-uploader init -o oss.config.js` 生成 JavaScript 配置\n\n**ESM 格式（带后备值）：**\n\n```javascript\nexport default {\n  region: process.env.OSS_REGION || 'YOUR_REGION',\n  accessKeyId: process.env.OSS_ACCESS_KEY_ID || 'YOUR_ACCESS_KEY_ID',\n  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET || 'YOUR_ACCESS_KEY_SECRET',\n  bucket: process.env.OSS_BUCKET || 'YOUR_BUCKET_NAME',\n  \n  // 可选字段\n  // endpoint: process.env.OSS_ENDPOINT,\n  // internal: process.env.OSS_INTERNAL === 'true',\n  secure: true,\n  timeout: 60000,\n};\n```\n\n**CommonJS 格式：**\n\n```javascript\nmodule.exports = {\n  region: process.env.OSS_REGION || 'YOUR_REGION',\n  accessKeyId: process.env.OSS_ACCESS_KEY_ID || 'YOUR_ACCESS_KEY_ID',\n  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET || 'YOUR_ACCESS_KEY_SECRET',\n  bucket: process.env.OSS_BUCKET || 'YOUR_BUCKET_NAME',\n  secure: true,\n  timeout: 60000,\n};\n```\n\n### 示例：仅使用环境变量\n\n```bash\n# 设置环境变量\nexport OSS_REGION=\"YOUR_REGION\"\nexport OSS_ACCESS_KEY_ID=\"你的-access-key-id\"\nexport OSS_ACCESS_KEY_SECRET=\"你的-access-key-secret\"\nexport OSS_BUCKET=\"my-bucket\"\n\n# 可选的环境变量\nexport OSS_SECURE=\"true\"\nexport OSS_TIMEOUT=\"60000\"\n\n# 现在可以不使用配置文件直接使用 CLI\noss-uploader upload ./dist -t static/\n\n# 注意：如果存在配置文件，将优先使用配置文件而不是环境变量\n```\n\n## 🔧 编程使用\n\n### ESM (ES 模块)\n\n```typescript\nimport { OSSUploader, loadConfig } from 'oss-uploader';\n\nconst config = await loadConfig();\nconst uploader = new OSSUploader(config);\n\nconst results = await uploader.upload({\n  source: './dist',\n  target: 'static/',\n  recursive: true,\n  overwrite: true,\n  verbose: true,\n  generateMapping: true,\n});\n\nconsole.log('上传结果:', results);\n```\n\n### CommonJS\n\n```javascript\nconst { OSSUploader, loadConfig } = require('oss-uploader');\n\n(async () => {\n  const config = await loadConfig();\n  const uploader = new OSSUploader(config);\n\n  const results = await uploader.upload({\n    source: './dist',\n    target: 'static/',\n    recursive: true,\n    overwrite: true,\n    verbose: true,\n    generateMapping: true,\n  });\n\n  console.log('上传结果:', results);\n})();\n```\n\n## 🎯 使用场景\n\n### 前端部署\n\n```bash\nnpm run build\noss-uploader upload ./dist -t static/my-app/\n```\n\n### CI/CD 集成\n\n```yaml\n# GitHub Actions - 使用环境变量（推荐）\n- name: 上传到 OSS\n  env:\n    OSS_REGION: ${{ secrets.OSS_REGION }}\n    OSS_ACCESS_KEY_ID: ${{ secrets.OSS_ACCESS_KEY_ID }}\n    OSS_ACCESS_KEY_SECRET: ${{ secrets.OSS_ACCESS_KEY_SECRET }}\n    OSS_BUCKET: ${{ secrets.OSS_BUCKET }}\n  run: |\n    npm install -g @atomfe/oss-uploader\n    oss-uploader upload ./dist -t static/\n\n# 备选方案：使用配置文件\n- name: 上传到 OSS\n  run: |\n    npm install -g @atomfe/oss-uploader\n    echo '{\"region\":\"${{ secrets.OSS_REGION }}\",\"accessKeyId\":\"${{ secrets.OSS_ACCESS_KEY_ID }}\",\"accessKeySecret\":\"${{ secrets.OSS_ACCESS_KEY_SECRET }}\",\"bucket\":\"${{ secrets.OSS_BUCKET }}\"}' > .ossrc.json\n    oss-uploader upload ./dist -t static/\n```\n\n### Package.json 脚本\n\n```json\n{\n  \"scripts\": {\n    \"deploy\": \"npm run build && oss-uploader upload ./dist -t static/\"\n  }\n}\n```\n\n### 使用映射文件\n\n```javascript\n// 读取映射文件\nimport mapping from './.oss-uploader-mapping.json' assert { type: 'json' };\n\n// 获取所有上传的 URL\nconst urls = mapping.files.map(f => f.url);\n\n// 更新 HTML 中的资源引用\nconst updateHTML = html => {\n  mapping.files.forEach(file => {\n    html = html.replace(\n      new RegExp(file.localPath, 'g'),\n      file.url\n    );\n  });\n  return html;\n};\n```\n\n## 🔐 安全建议\n\n- ✅ 将 `.ossrc.json` 添加到 `.gitignore`\n- ✅ 使用 RAM 子账号而非主账号\n- ✅ 在 CI/CD 中使用环境变量\n- ✅ 定期轮换 AccessKey\n- ❌ 永远不要在代码中硬编码凭证\n\n## 🤝 贡献\n\n欢迎贡献代码！请随时提交 Pull Request。\n\n如需报告 bug 或请求新功能，请创建 issue。\n\n## 📝 开发\n\n```bash\n# 安装依赖\npnpm install\n\n# 开发模式\npnpm run dev\n\n# 构建\npnpm run build\n\n# 测试\npnpm run test\npnpm run test:coverage\n\n# 代码检查与格式化\npnpm run lint\npnpm run format\n```\n\n## 🆕 更新日志\n\n查看 [CHANGELOG.md](./CHANGELOG.md) 了解版本更新历史。\n\n## 📄 开源协议\n\n[MIT](./LICENSE) © 2025\n\n## 🌟 核心特性\n\n### 现代化技术栈\n\n- ✅ **双模块格式** - 同时支持 ESM 和 CommonJS\n- ✅ **TypeScript 5.7** - 完整的类型安全\n- ✅ **tsup 构建** - 基于 esbuild 的超快构建\n- ✅ **Vitest 测试** - 现代化的测试框架\n- ✅ **npm Provenance** - 供应链安全保障\n\n### 开发体验\n\n- 🔥 **快速构建** - 0.05s 超快构建速度\n- 🎨 **代码质量** - ESLint + Prettier\n- 📊 **测试覆盖** - 单元测试 + 覆盖率报告\n- 🔄 **自动发布** - Changesets 自动化版本管理\n- 📚 **完整文档** - 中英文双语文档\n\n## 💡 提示与技巧\n\n### 1. 使用环境变量\n\n```bash\nexport OSS_ACCESS_KEY_ID=\"your-key\"\nexport OSS_ACCESS_KEY_SECRET=\"your-secret\"\nexport OSS_BUCKET=\"your-bucket\"\nexport OSS_REGION=\"YOUR_REGION\"\n```\n\n### 2. 批量处理映射文件\n\n```bash\n# 合并多个映射文件\ncat .oss-uploader-mapping-*.json | jq -s 'map(.files) | add' > all-uploads.json\n```\n\n### 3. 自动化部署脚本\n\n```bash\n#!/bin/bash\n# deploy.sh\n\n# 构建项目\nnpm run build\n\n# 上传到 OSS\noss-uploader upload ./dist -t \"static/v$(date +%Y%m%d)/\" -v\n\n# 读取映射文件并发送通知\nnode -e \"\nconst mapping = require('./.oss-uploader-mapping.json');\nconsole.log(\\`✅ 上传完成！共 \\${mapping.totalFiles} 个文件\\`);\nconsole.log(\\`📦 总大小：\\${(mapping.totalSize / 1024 / 1024).toFixed(2)} MB\\`);\n\"\n```\n\n## 🔗 相关链接\n\n- [阿里云 OSS 文档](https://help.aliyun.com/product/31815.html)\n- [GitHub 仓库](https://github.com/lorainwings/aliyun-oss-uploader)\n- [npm 包](https://www.npmjs.com/package/@atomfe/oss-uploader)\n- [问题反馈](https://github.com/lorainwings/aliyun-oss-uploader/issues)\n\n---\n\n<p align=\"center\">\n  用 ❤️ 制作 by <a href=\"https://github.com/lorainwings\">lorainwings</a>\n</p>\n","readmeFilename":"README.zh-CN.md"}