vite对媒体、图片等文件打包处理单独发布到CDN

2023-11-28  本文已影响0人  FateOfKing

vite对媒体、图片等文件打包处理单独发布到CDN

1. 如果你希望对某几个库进行CDN部署,推荐使用vite-plugin-cdn-import

2.如果你希望对整个项目进行CDN部署,使用vite.config.ts中的base字段即可

import { defineConfig } from 'vite';

 
export default defineConfig(({ mode }) => {
  const isProduction = mode === 'production';
  const cdnDomain = isProduction ? process.env.VITE_CDN_DOMAIN : '/';
 
  return {
    base: cdnDomain,
  };

3.如果你希望只对某些文件进行CDN部署,比如图片,MP4等

// vite.config.ts
// https://vitejs.dev/config/
export default ({ mode }: ConfigEnv): UserConfigExport => {
  return {
    //......其他配置

    build: {

      rollupOptions: {
        output: {
          assetFileNames: (chunkInfo) => {
            // 用后缀名称进行区别处理
            // 处理其他资源文件名 e.g. css png 等
            if (
              chunkInfo.name?.endsWith('.webm') ||
              chunkInfo.name?.endsWith('.png') ||
              chunkInfo.name?.endsWith('.jpg') ||
              chunkInfo.name?.endsWith('.gif')
            ) {
              return `assets/images/[name].[ext]`;
            }

            return `assets/[name].[hash].[ext]`;
          },
        },
      },
    },
    experimental: {
      renderBuiltUrl(filename: string) {
        if (
          filename.endsWith('.webm') ||
          filename.endsWith('.png') ||
          filename.endsWith('.jpg') ||
          filename.endsWith('.gif')
        ) {
          const name = filename.replace('assets/images/', '');
          return `https://cdnURL/images/${name}`;
        }

        return filename;
      },
    },
  };
};

打包后dist的结构

├── assets
│   ├── images
│   │   ├── xxx.png
│   ├── xxx.js
│   ├── xxx.css
├── index.html
└── vite.svg
上一篇下一篇

猜你喜欢

热点阅读