所有分类
  • 所有分类
  • Html5资源
  • React资源
  • Vue资源
  • Php资源
  • ‌小程序资源
  • Python资源

Vite 7.0 引入的几个重要新 API 详解

🚀 概述

Vite 7.0 引入了多个重要的新 API 和功能增强,主要包括 Environment API 的改进、Rolldown 集成、以及新的构建配置选项。本文档重点介绍这些新 API 的使用方法和实际应用场景。

🆕 新 API 特性

1. build.target 新默认值 API

作用:提供更现代的浏览器兼容性目标,基于 Web 标准的 Baseline 规范。

API 变更

// vite.config.js
export default {
  build: {
    // 新默认值
    target: "baseline-widely-available",

    // 自定义配置
    target: ["chrome107", "firefox104", "safari16"],

    // 保持旧行为
    target: "modules",
  },
};

使用场景

  • 现代 Web 应用开发
  • 需要使用最新 Web API 的项目
  • 追求更好性能和更小包体积的应用

2. Environment API 增强

作用:提供多环境构建支持,允许在同一个 Vite 项目中配置不同的运行环境(如客户端、服务端、Worker 等)。

2.1 buildApp 钩子 API

新增功能:允许插件协调多环境构建过程。

API 使用

// 插件中使用 buildApp 钩子
export function myPlugin() {
  return {
    name: "my-plugin",
    buildApp: async (builder) => {
      // 获取所有环境
      const environments = Object.values(builder.environments);

      // 串行构建
      for (const env of environments) {
        await builder.build(env);
      }

      // 或并行构建
      return Promise.all(environments.map((env) => builder.build(env)));
    },
  };
}

使用场景

  • 多环境应用(SSR + 客户端)
  • 微前端架构
  • 需要协调构建顺序的复杂项目

2.2 RunnableDevEnvironment API

作用:提供在开发环境中运行模块的能力,支持 HMR。

API 使用

import { createServer, isRunnableDevEnvironment } from "vite";

const server = await createServer({
  environments: {
    ssr: {
      // SSR 环境配置
    },
  },
});

// 检查环境类型
if (isRunnableDevEnvironment(server.environments.ssr)) {
  // 动态导入模块
  const { render } = await server.environments.ssr.runner.import(
    "/src/entry-server.js"
  );

  // 执行服务端渲染
  const html = await render(url);
}

使用场景

  • SSR 开发环境
  • 服务端 API 开发
  • 需要在开发时执行 Node.js 代码的场景

3. Rolldown 集成 API

作用:基于 Rust 的高性能打包器,提供比传统 JavaScript 打包器更快的构建速度。

3.1 rolldown-vite 包使用

API 使用

// package.json - 直接替换
{
  "dependencies": {
    "vite": "npm:rolldown-vite@latest"
  }
}

// package.json - 使用 overrides
{
  "overrides": {
    "vite": "npm:rolldown-vite@latest"
  }
}

3.2 advancedChunks API

新功能:替代 manualChunks,提供更精细的代码分割控制。

API 使用

// vite.config.js
export default {
  build: {
    rollupOptions: {
      output: {
        // 新的 advancedChunks API
        advancedChunks: {
          groups: [
            {
              name: "vendor",
              test: /\/react(?:-dom)?/,
              priority: 10,
            },
            {
              name: "utils",
              test: /\/src\/utils/,
              priority: 5,
            },
          ],
        },
      },
    },
  },
};

使用场景

  • 大型项目的代码分割优化
  • 需要精确控制 chunk 生成的场景
  • 提升构建性能的项目

3.3 withFilter API

新功能:优化插件性能,减少 Rust 和 JavaScript 运行时之间的通信开销。

API 使用

import { withFilter, defineConfig } from "vite";
import svgr from "vite-plugin-svgr";

export default defineConfig({
  plugins: [
    // 使用 withFilter 包装器
    withFilter(
      svgr({
        // SVG 插件配置
      }),
      {
        load: { id: /\.svg\?react$/ },
        transform: { id: /\.svg$/ },
      }
    ),
  ],
});

使用场景

  • 提升插件执行性能
  • 减少不必要的插件调用
  • 优化大型项目的构建速度

3.4 experimental.enableNativePlugin API

新功能:启用基于 Rust 的原生插件,提供更好的性能。

API 使用

// vite.config.js
export default {
  experimental: {
    enableNativePlugin: true,
  },
  // 其他配置...
};

使用场景

  • 追求极致构建性能
  • 大型项目优化
  • 实验性功能测试

4. FetchableDevEnvironment API

作用:通过 Fetch API 接口与不同运行时环境通信,支持更广泛的运行时。

API 使用

import {
  createServer,
  createFetchableDevEnvironment,
  isFetchableDevEnvironment,
} from "vite";

const server = await createServer({
  environments: {
    worker: {
      dev: {
        createEnvironment(name, config) {
          return createFetchableDevEnvironment(name, config, {
            handleRequest(request) {
              // 处理 Request 并返回 Response
              return new Response("Hello from worker");
            },
          });
        },
      },
    },
  },
});

// 使用 FetchableDevEnvironment
if (isFetchableDevEnvironment(server.environments.worker)) {
  const response = await server.environments.worker.dispatchFetch(
    new Request("/api/hello")
  );
}

使用场景

  • Cloudflare Workers 开发
  • Edge Runtime 应用
  • 需要跨运行时通信的场景

5. transformWithOxc API

新功能:使用 Oxc 替代 esbuild 进行代码转换,提供更好的性能。

API 使用

import { transformWithOxc } from "vite";

// 替代 transformWithEsbuild
const result = await transformWithOxc(code, {
  loader: "tsx",
  target: "es2020",
});

使用场景

  • 插件开发中的代码转换
  • 自定义构建流程
  • 性能敏感的转换操作

6. rolldownVersion 检测 API

新功能:检测当前是否使用 rolldown-vite。

API 使用

import { rolldownVersion } from "vite";

// 方法 1:检查导出
if (rolldownVersion) {
  // 使用 rolldown-vite 特定逻辑
  console.log("Using rolldown-vite:", rolldownVersion);
}

// 方法 2:在插件中检查
const plugin = {
  name: "my-plugin",
  configResolved() {
    if (this.meta.rolldownVersion) {
      // rolldown-vite 特定行为
    } else {
      // 标准 vite 行为
    }
  },
};

使用场景

  • 插件兼容性处理
  • 条件功能启用
  • 性能优化选择

� 实际应用示例

多环境 SSR 应用

// vite.config.js
import { defineConfig } from "vite";

export default defineConfig({
  environments: {
    // 客户端环境
    client: {
      build: {
        outDir: "dist/client",
        rollupOptions: {
          input: "src/entry-client.js",
        },
      },
    },
    // 服务端环境
    server: {
      build: {
        outDir: "dist/server",
        rollupOptions: {
          input: "src/entry-server.js",
        },
      },
    },
  },
  plugins: [
    {
      name: "ssr-plugin",
      buildApp: async (builder) => {
        // 先构建客户端,再构建服务端
        await builder.build(builder.environments.client);
        await builder.build(builder.environments.server);
      },
    },
  ],
});

Cloudflare Workers 集成

// vite.config.js
import { defineConfig } from "vite";
import { cloudflare } from "@cloudflare/vite-plugin";

export default defineConfig({
  plugins: [cloudflare()],
  environments: {
    worker: {
      dev: {
        createEnvironment(name, config) {
          return createFetchableDevEnvironment(name, config, {
            handleRequest(request) {
              // 处理 Worker 请求
              return fetch(request);
            },
          });
        },
      },
    },
  },
});

高性能构建配置

// vite.config.js
import { defineConfig, withFilter } from "vite";

export default defineConfig({
  // 使用 Rolldown
  build: {
    rollupOptions: {
      output: {
        advancedChunks: {
          groups: [
            { name: "vendor", test: /node_modules/ },
            { name: "common", test: /src\/shared/ },
          ],
        },
      },
    },
  },
  experimental: {
    enableNativePlugin: true,
  },
  plugins: [
    // 优化插件性能
    withFilter(myPlugin(), {
      transform: { id: /\.(ts|tsx)$/ },
    }),
  ],
});

常见问题解决

问题 1:构建目标警告

// ❌ 可能出现的警告
// Warning: build.target 'modules' is deprecated

// ✅ 解决方案
export default {
  build: {
    target: "baseline-widely-available", // 或指定具体版本
  },
};

问题 2:插件兼容性

// ❌ 某些插件可能不兼容
import { someOldPlugin } from "vite-plugin-old";

// ✅ 检查插件是否有更新版本
// 或寻找替代方案

问题 3:Rolldown 选项验证

// ❌ Rolldown 可能警告未知选项
export default {
  build: {
    rollupOptions: {
      output: {
        generatedCode: 'es2015' // 可能不被 Rolldown 支持
      }
    }
  }
}

// ✅ 使用条件配置
import { rolldownVersion } from 'vite'

export default {
  build: {
    rollupOptions: {
      output: rolldownVersion ? {
        // Rolldown 特定配置
      } : {
        // Rollup 特定配置
        generatedCode: 'es2015'
      }
    }
  }
}

这些新 API 为现代前端开发提供了更强大的工具链支持,特别是在多环境部署、性能优化和跨平台开发方面带来了显著改进。

资源下载
下载价格免费
注意:本网站资源属于虚拟产品,不支持退款。请谨慎购买! 购买后资源无法下载,请联系客服QQ:844475003,微信号:th844475003。
原文链接:https://code.ifrontend.net/archives/870,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?