Bun 开箱即用支持 .jsx
和 .tsx
文件。Bun 的内部转换器在执行前将 JSX 语法转换为纯 JavaScript。
function Component(props: {message: string}) {
return (
<body>
<h1 style={{color: 'red'}}>{props.message}</h1>
</body>
);
}
console.log(<Component message="Hello world!" />);
配置
Bun 读取您的 tsconfig.json
或 jsconfig.json
配置文件,以确定如何在内部执行 JSX 转换。为了避免使用其中任何一个,还可以在 bunfig.toml
中定义以下选项。
尊重以下编译器选项。
jsx
JSX 构造如何内部转换为纯 JavaScript。下表列出了 jsx
的可能值,以及对以下简单 JSX 组件的转换
<Box width={5}>Hello</Box>
编译器选项 | 转换输出 |
---|---|
|
|
|
|
|
|
|
|
jsxFactory
注意 — 仅当 jsx
为 react
时才适用。
用于表示 JSX 构造的函数名称。默认值为 "createElement"
。这对于使用不同函数名称("h"
)的库(如 Preact)很有用。
编译器选项 | 转换输出 |
---|---|
|
|
jsxFragmentFactory
注意 — 仅当 jsx
为 react
时才适用。
用于表示 JSX 片段(如 <>Hello</>
)的函数名称;仅当 jsx
为 react
时适用。默认值为 "Fragment"
。
编译器选项 | 转换输出 |
---|---|
|
|
jsxImportSource
注意 — 仅当 jsx
为 react-jsx
或 react-jsxdev
时适用。
将从中导入组件工厂函数(createElement
、jsx
、jsxDEV
等)的模块。默认值为 "react"
。在使用 Preact 等组件库时,通常需要这样做。
编译器选项 | 转换输出 |
---|---|
|
|
|
|
|
|
JSX 语法
所有这些值都可以使用语法逐个文件设置。语法是一种特殊注释,用于在特定文件中设置编译器选项。
语法 | 等效配置 |
---|---|
|
|
|
|
|
|
日志记录
Bun 为 JSX 实施了特殊日志记录,以简化调试。给定以下文件
import { Stack, UserCard } from "./components";
console.log(
<Stack>
<UserCard name="Dom" bio="Street racer and Corona lover" />
<UserCard name="Jakob" bio="Super spy and Dom's secret brother" />
</Stack>
);
Bun 将在记录时美化打印组件树
Prop 双关
Bun 运行时还支持 JSX 的“prop 双关”。这是一种简写语法,可用于将变量分配给具有相同名称的 prop。
function Div(props: {className: string;}) {
const {className} = props;
// without punning
return <div className={className} />;
// with punning
return <div {className} />;
}