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"
。这对于像 Preact 这样使用不同函数名("h"
)的库很有用。
编译器选项 | 转译输出 |
---|---|
|
|
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 将在记录时漂亮地打印组件树。
属性简写
Bun 运行时还支持 JSX 的“属性简写”。这是一种简写语法,可用于将变量分配给具有相同名称的属性。
function Div(props: {className: string;}) {
const {className} = props;
// without punning
return <div className={className} />;
// with punning
return <div {className} />;
}