JSPM

vite-plugin-cloud-upload

1.0.8
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 9
    • Score
      100M100P100Q81263F
    • License MIT

    A Vite plugin to automatically upload build assets to cloud storage (Tencent Cloud COS & Aliyun OSS).

    Package Exports

    • vite-plugin-cloud-upload

    Readme

    vite-plugin-cloud-upload

    English | 中文

    npm version npm downloads license

    一个 Vite 插件,它会在构建过程完成后,自动将你的构建产物上传到云存储。无需任何手动操作,即可将静态文件推送到 CDN 或存储桶,让你的部署工作流更加丝滑。

    目前支持 腾讯云 COS阿里云 OSS

    ✨ 特性

    • 🚀 自动上传: vite build 命令结束后自动触发上传。
    • ☁️ 多厂商支持: 对腾讯云 COS 和阿里云 OSS 提供一流支持。
    • ⚡ 并发执行: 并行上传多个文件,以实现最快速度。
    • 🧹 远程清理: 可选择在上传前清空远程目录下的旧文件。
    • 🎯 文件过滤: 使用正则表达式来筛选需要上传的文件。
    • 🗑️ 本地删除: 可选择在上传成功后删除本地的构建文件。
    • 📞 生命周期钩子: 提供 onProgressonUploadedonFailed 等钩子,用于执行自定义逻辑。

    📦 安装

    npm install vite-plugin-cloud-upload --save-dev
    pnpm add -D vite-plugin-cloud-upload
    yarn add vite-plugin-cloud-upload --dev

    🚀 使用方法

    在你的 vite.config.ts 文件中导入插件,并将其添加到 plugins 数组中。

    // vite.config.ts
    import { defineConfig } from 'vite';
    import cloudUpload from 'vite-plugin-cloud-upload';
    
    export default defineConfig({
      plugins: [
        // ...你的其他插件
        cloudUpload({
          // 在这里进行配置...
        }),
      ],
    });

    腾讯云 COS 示例

    为了安全起见,强烈建议将 secretIdsecretKey 等敏感信息存储在 .env 文件或系统环境变量中,不要硬编码在代码里。

    // vite.config.ts
    import { defineConfig } from 'vite';
    import cloudUpload from 'vite-plugin-cloud-upload';
    
    export default defineConfig({
      plugins: [
        cloudUpload({
          provider: 'tencent',
          providerConfig: {
            secretId: process.env.COS_SECRET_ID,   // 推荐使用环境变量
            secretKey: process.env.COS_SECRET_KEY,
            bucket: 'your-bucket-name-1250000000', // 你的存储桶名称
            region: 'ap-guangzhou',                // 你的存储桶所在地域
          },
          keyPrefix: 'my-project/latest', // 上传到指定的文件夹
          cleanRemote: true,              // 上传前清空目标文件夹
        }),
      ],
    });

    阿里云 OSS 示例

    // vite.config.ts
    import { defineConfig } from 'vite';
    import cloudUpload from 'vite-plugin-cloud-upload';
    
    export default defineConfig({
      plugins: [
        cloudUpload({
          provider: 'aliyun',
          providerConfig: {
            accessKeyId: process.env.OSS_ACCESS_KEY_ID,
            accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
            bucket: 'your-aliyun-bucket-name',
            region: 'oss-cn-hangzhou',
          },
          keyPrefix: 'assets', // 上传到 'assets' 文件夹
          // 只上传 .js 和 .css 文件
          include: /\.(js|css)$/,
          // 上传后删除本地文件
          deleteLocalAfterUpload: true,
        }),
      ],
    });

    ⚙️ 配置选项

    选项 类型 是否必需 描述
    provider 'tencent' | 'aliyun' 云服务提供商的类型。
    providerConfig TencentCOSOptions | AliOSSOptions 所选云服务商的配置对象(凭证、存储桶等)。
    outDir string 本地构建输出目录,相对于项目根目录。默认为 dist
    recursive boolean 是否递归扫描 outDir 下的子目录。默认为 true
    keyPrefix string 在存储桶中上传路径的前缀(例如 my-app/v1)。默认为存储桶根目录。
    cleanRemote boolean 若为 true,在上传前会清空远程存储桶中 keyPrefix 目录下的所有文件。默认为 false
    include RegExp 一个正则表达式,用于筛选需要上传的文件。如果未提供,则上传所有文件。
    deleteLocalAfterUpload boolean 若为 true,在文件成功上传后删除本地对应的文件。默认为 false
    concurrency number 并发上传的数量。默认为 6
    retry number 如果单个文件上传失败,重试的次数。默认为 2
    onProgress (total: number, finished: number) => void 用于跟踪上传进度的回调钩子,在每个文件处理完毕后触发。
    onUploaded (task: UploadTask) => void 文件成功上传后的回调钩子。
    onFailed (task: UploadTask, error: Error) => void 文件上传失败后的回调钩子。

    📞 高级用法:生命周期钩子

    你可以使用钩子来监控上传过程,例如在控制台中显示一个动态的进度条。

    // vite.config.ts
    import { defineConfig } from 'vite';
    import cloudUpload from 'vite-plugin-cloud-upload';
    
    export default defineConfig({
      plugins: [
        cloudUpload({
          provider: 'tencent',
          providerConfig: { /* ...你的配置... */ },
          onProgress: (total, finished) => {
            const percentage = Math.round((finished / total) * 100);
            // \r 让光标回到行首,实现单行刷新效果
            process.stdout.write(`上传中: ${finished}/${total} (${percentage}%) \r`);
          },
          onUploaded: (task) => {
            // 使用 console.log 换行,避免覆盖进度条
            console.log(`\n✔ 上传成功: ${task.key}`);
          },
          onFailed: (task, error) => {
            console.error(`\n✖ 上传失败 ${task.key}:`, error.message);
          },
        }),
      ],
    });

    📄 许可证

    本项目基于 MIT 许可证 授权。