@ acusti/vite-plugin-反应-编译器
A 类 维特 运行的插件 React 编译器 通过 oxc- 转换- 反应, (中文(简体) ), 本地节点绑定 oxc 项目的 Rust 移植编译器 基于 Babel 的 React 编译器构建路径 .
它是从建造工具中提取的 外语,在其中运行 生产.
为什么会这样
现为本地反应编译器集成:
@vitejs/plugin-react 6.1,通过 compiler: true 运行
oxc- 转换- 反应 —— 相同的 Rust 绑定这个插件使用的—— 相反
贝贝。 对于一个简单的Vite + React app, 那面旗帜是整个故事; 这个
插件没有要添加的内容 .
捕捉到的是这个 compiler: true 是一个选项 @vitejs/plugin-react
以及许多设置不会运行这个插件。 反应路由器在
框架模式是常见情况: 它运行 @react-router/dev/vite 内
地点 @vitejs/plugin-react,表示没有 compiler: true,没有
reactCompilerPreset 贝贝也倒下,因为
@vitejs/plugin-react也一样。 换入不同的 React/JSX 插件和
本地反应编译器支持也随之而来.
此插件是编译器的通过, 从 @vitejs/plugin-react 这样
它可以在其中任何一个下运行: a transform-hook 调用插件
氧化-变形-直接反应,与 enforce: 'pre' (该职位
@vitejs/plugin-react并发放JSX
(单位:千美元)jsx: 'preserve'),所以无论什么插件处理 JSX/新鲜下游
继续负责 (oxc- transform- react 字条类型脚本语法)
本身,匹配 Babel 路径如何使用 @babel/ preset-typescript.)
使用量
npm install --save-dev @acusti/vite-plugin-react-compiler
# or
yarn add --dev @acusti/vite-plugin-react-compiler
# or
pnpm add --save-dev @acusti/vite-plugin-react-compiler
# or
bun add --dev @acusti/vite-plugin-react-compiler
该插件依赖于一个精确的,测试过的版本 oxc- 转换- 反应数字 :
装订在快速移动的0.x放行列车跟踪React编译器上
主和新装订的释放接近100%的bug修正( Rust 端口)
以现有的广泛使用的 Babel 插件追求对等, 因此插件
将最新的版本标注在通过repo的测试套件上
常规插件发布 。 如果您需要不同的版本, 请使用您的软件包
经理 overrides (npm, pnpm, bun) 或 (npm, pnpm, bun) resolutions 强迫它.
喜欢 @ acusti/vite-plugin-svg-反应,此插件需要 Vite \\ 8: 它 插入Vite 8的原生牛克/滚入变换管 没有它.
将插件添加到您的 Vite 配置中, 并附带您的其他 Vite 插件 :
// vite.config.ts
import { reactRouter } from '@react-router/dev/vite';
import reactCompiler from '@acusti/vite-plugin-react-compiler';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [reactRouter(), reactCompiler()],
});
选项
插件会选择一个具有四个属性的可选选项对象:
include编号 :exclude: 标准维特createFilter模式选择哪个模块获得编译器通过。 默认 :include: /\.[jt]sx?$/, (中文(简体) ),exclude: /[/\\]node_modules[/\\]/。 。 。 .compiler: 选项逐字传递到 React 编译器,使用相同的 名称为 bail-plugin-反应编译器数字 :compilationMode, (中文(简体) ),panicThreshold(违约)'none', (中文(简体) ),target(违约)'19', (中文(简体) ),environment旗帜类enableTreatRefLikeIdentifiersAsRefs,等等。 (笑声) 回调值选项 (例如:.logger,函数值sources)不要越过本土 边界而不支持;sources接受文件名数组 取而代之的是子弦,以及reportDiagnostics(以下)涵盖常用 联 合 国logger,看到编译器跳出什么.memoize: 每个模块的缓存转换结果 id, 由内容键入 hash(每个文件绑入一个条目). 多环境建设(如:. React Router apps 构建客户端 + SSR 环境)运行每个变换 每个环境一次;缓存使重复通过自由. 默认为true。 。 。 .
reactCompiler({
exclude: [/node_modules/, /\.stories\./],
compiler: {
environment: { enableTreatRefLikeIdentifiersAsRefs: true },
},
});
如果编译器报告一个致命错误( 分析失败, 拒绝选项) ,
或诊断升级 panicThreshold),插件失败构建
通过 this.error(...)就像巴贝尔语法错误一样 非脂肪
编译器救市行为与对 Babel 插件的行为一样
panicThreshold: 'none': 受影响的函数未组合
继续建设.
这些救市默认是沉默的。 看编译器跳过什么
为什么,设置 compiler: { reportDiagnostics: true }: 每个可回收物
诊断(救助,或选择一种
函数出)作为警告打印在您的构建或dev服务器输出中,
和编译器的代码框架及其在文件中的位置,以及构建
继续.
reactCompiler({ compiler: { reportDiagnostics: true } });
与 memoize 上面,一个文件的诊断 报告一次每个不同的
内容,不是每个环境一次。 与 panicThreshold 设置为
'critical_errors' 或者说 'all_errors'升级的诊断失败
通过 this.error(...) 而不是警告.
如 React 编译器主机, 和不同 bail-plugin- react-compiller@ 1.0.0 互联网档案馆的存檔,存档日期2013-12-20,则
编译器还跳过其组件或钩线 useMemo 或者说 useCallback
抚养人名单缺少抚养人名单或额外抚养人名单
备忘录的更新完全如所写。 与 reportDiagnostics 每个
一个报告是“失踪的记忆依赖”或“额外基金”
记忆依赖性” panicThreshold 设置为 'critical_errors'
或者说 'all_errors'诊断失败了 编译这些
包含依赖关系的组件, 编译器推导为 Babel
插件确实如此, 关闭检查 :
reactCompiler({
compiler: {
environment: { validateExhaustiveMemoizationDependencies: false },
},
});
洞穴和生产成果
反相编译器的 Rust 端口和 oxc- transform- react 绑定是
实验性并明确标注为上游。 测量和核实
在信任 Babel 插件之前, 与其对齐( __COMPILER_RUNTIME.c
输出中的备忘录缓存调用很方便 diff).
因为 Rust 端口轨道 React 编译器主干线而不是 1. 0 释放,它与 bail-plugin- react-compiller@ 1.0.0 互联网档案馆的存檔,存档日期2013-12-20 两者 方向 : 它编译一些代码 Babel 插件保存 (template-literal 对象键,在尝试/捕获中的条件),它跳过 手动记忆缺失或额外的组件和钩子 依赖, Babel 插件所汇编的(参见 选项) (中文(简体) ). 除了插件本身的测试外, 这个 Repo 运行一个上游跟踪套件 与被钉住的装订版本相对应:它夹住两种相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相分相相分相分相分相分相分相分相分相分相分相分相分相分相分相分相相分相分相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相 贝贝平地在降落时固定(反应-猎物抑制选择) 自0.144.0起已停止编制,并跟踪已知的上游差距 当它们出现的时候,每条捆绑物,在它航行之前,都要重新验证 插件发布 .
在发射时测量,在生产维特的克-变形-反应0.142.0上 8 + React Router app 此插件是从中取出, 反对 bail-plugin- react-compiller@ 1.0.0 互联网档案馆的存檔,存档日期2013-12-20 覆盖987个源文件:
- 完全记忆平和,零回归 ——每个功能 Babel 插件编译, Rust 端口编译, 它编译了一个 严格超群.
- 编译器传出速度快了~16x 比贝贝通行证.
- 整个生产建设速度快到2.5x (53s ~ 21s) (中文(简体) ).