全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-23 7 分钟 ✍️ juanwangdev

CDN 部署与资源分发

生产环境使用 CDN 分发静态资源,提升全球用户访问速度。

CDN 部署架构

JavaScript
用户请求 → CDN 边缘节点 → 缓存命中? → 返回资源
                          ↓ 未命中
                        源站获取 → 缓存 → 返回

配置 CDN 基础路径

HTML
export default defineConfig({
  base: 'https://cdn.example.com/assets/'
})

构建后资源引用:

JavaScript
<script src="https://cdn.example.com/assets/index-abc123.js"></script>
<link href="https://cdn.example.com/assets/index-def456.css">

资源哈希命名

Bash
export default defineConfig({
  build: {
    rollupOptions: {
      output: {
        // JS 哈希命名
        entryFileNames: 'js/[name]-[hash].js',
        chunkFileNames: 'js/[name]-[hash].js',
        // CSS 哈希命名
        assetFileNames: (assetInfo) => {
          if (assetInfo.name.endsWith('.css')) {
            return 'css/[name]-[hash][extname]'
          }
          return 'assets/[name]-[hash][extname]'
        }
      }
    }
  }
})

注意:哈希命名确保缓存正确,内容变化文件名变化。

上传 CDN

JavaScript
# 构建产物
npm run build

# 上传 dist/assets 到 CDN
aws s3 sync dist/assets s3://cdn-bucket/assets/

# 或使用其他 CDN 服务

CDN 缓存策略

资源类型缓存时间
HTML短缓存或不缓存
JS/CSS长期缓存
图片/字体长期缓存

HTML 处理

YAML
// HTML 不放 CDN,放源站
// base 只影响静态资源
export default defineConfig({
  base: 'https://cdn.example.com/assets/',
  build: {
    // HTML 输出到源站目录
    outDir: 'dist-server'
  }
})

CDN 配置示例

JavaScript
# CDN 配置
cache:
  js: max-age=31536000  # 1年
  css: max-age=31536000
  images: max-age=31536000
  html: max-age=0       # 不缓存

多 CDN 配置

text
// 使用多个 CDN 域名
const cdnDomains = [
  'https://cdn1.example.com',
  'https://cdn2.example.com'
]

export default defineConfig({
  build: {
    rollupOptions: {
      output: {
        // 可按资源类型分 CDN
        assetFileNames: (assetInfo) => {
          const cdn = assetInfo.name.endsWith('.css')
            ? cdnDomains[0]
            : cdnDomains[1]
          return `${cdn}/[name]-[hash][extname]`
        }
      }
    }
  }
})

要点总结

  • base 配置 CDN 基础路径
  • 哈希命名确保缓存正确
  • HTML 放源站,静态资源放 CDN
  • JS/CSS 长期缓存,HTML 短缓存
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 共享依赖版本管理
下一篇 → 构建产物版本管理
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码