Skip to content

大家好,我是农村程序员,独立开发者,编程记者,前端之虎陈随易。

我会在这里分享代码技术,编程资讯,行业热点等内容,欢迎关注。

如果你觉得本文有用,一键三连 (点赞评论转发),就是对我最大的支持~


本文可随意转发或转载,保留署名信息即可。

大家好,我是编程记者,前端之虎陈随易,据最新消息,前端构建工具 Vite v7.0 已正式发布。

很难想象,从 vite 宣布开发到现在成为大多数前端知名项目的脚手架,已经过去了5年时间,也很令人惊叹,仅仅5年时间,Vite 已经成为尤大继 Vue 之后的又一影响全球前端开发者的利器,为这些在背后创造,贡献,维护的同行们致敬。

通过 https://vite.new,我们可以非常方便地体验 Vite 项目构建的流程和体验。

比较遗憾的是,本次 rolldown 并没有内置在 vite 7 中,如果你想体验由 rolldown 驱动的 vite 体验,请使用 rolldown-vite 包替换 vite 即可。

点击查看 rolldown-vite 使用说明

下面分享本次更新的主要内容:

更新文章访问地址:https://vite.dev/blog/announcing-vite7.html

Node.js 支持版本提升

Vite 现在需要 Node.js 20.19+22.12+ 版本。

由于 Node.js 18 将于 2025 年 4 月底达到 EOL 级别,Vite 已将其弃用。

浏览器支持版本提升

在 Vite 7 中,默认浏览器目标将从 modules 更改为新的默认值:baseline-widely-available

build.target 默认浏览器值在 Vite 7.0 中有所变化:

  • Chrome 87 → 107
  • Edge 88 → 107
  • Firefox 78 → 104
  • Safari 14.0 → 16.0

Vitest 支持

从 Vitest 3.2,默认提供对 Vite 7 的支持。

增加 buildApp 钩子

在 Vite 7 中,添加了一个新的 buildApp 钩子,允许插件协调环境的构建。

用法如下:

js
export default {
    builder: {
        buildApp: async (builder) => {
            const environments = Object.values(builder.environments);
            return Promise.all(environments.map((environment) => builder.build(environment)));
        }
    }
};

移除 scss 的 api 选项

css.preprocessorOptions.{sass,scss}.api 被移除了,统一使用 modern-compiler

推荐安装 sass-embedded,而不是 sass,最主要区别如下:

特性sass-embeddedsass
编译器引擎Dart SassJavaScript
性能更快较慢
内存使用更低较高
功能完整性完整基本功能
启动时间稍慢(需要启动进程)
平台支持需要二进制文件纯 JavaScript

移除代码分割插件

splitVendorChunkPlugin 已经在 Vite 7 中移除,如果我们要使用代码分块,请使用 build.rollupOptions 参数设置 output.manualChunks,如下所示:

js
function manualChunks(id, { getModuleInfo }) {
    const match = /.*\.strings\.(\w+)\.js/.exec(id);
    if (match) {
        const language = match[1]; // e.g. "en"
        const dependentEntryPoints = [];

        // 我们在这里使用 Set 集合,这样每个模块最多处理一次。
        // 这可以防止循环依赖情况下的无限循环
        const idsToHandle = new Set(getModuleInfo(id).dynamicImporters);

        for (const moduleId of idsToHandle) {
            const { isEntry, dynamicImporters, importers } = getModuleInfo(moduleId);
            if (isEntry || dynamicImporters.length > 0) dependentEntryPoints.push(moduleId);

            // Set 迭代器足够智能,可以迭代迭代过程中添加的元素
            for (const importerId of importers) idsToHandle.add(importerId);
        }

        // 如果有唯一条目,我们会根据条目名称将其放入一个块中
        if (dependentEntryPoints.length === 1) {
            return `${dependentEntryPoints[0].split('/').slice(-1)[0].split('.')[0]}.strings.${language}`;
        }
        // 对于多个条目,我们将其放入“共享”块中
        if (dependentEntryPoints.length > 1) {
            return `shared.strings.${language}`;
        }
    }
}

这就是本次 Vite 7 更新的主要内容,更详细的更新内容请 👉 点此了解

何以解忧,唯有代码。不忘初心,方得始终。