一个强大的 React 代码预览器组件,支持实时编译、错误处理和依赖分析。
- 🚀 实时编译: 支持 TypeScript/JSX 代码的实时编译和预览
- 🔍 错误处理: 完善的编译时和运行时错误捕获与显示
- 📦 依赖分析: 自动分析和管理代码依赖关系
- 🎨 可定制: 支持自定义样式和配置
- 📝 日志系统: 内置统一的日志管理系统
- 🔧 开发工具: 提供调试面板和源码映射功能
npm install @zllling/react-previewerimport React from 'react';
import { ReactPreviewer } from '@zllling/react-previewer';
// 引入样式(必需)
import '@zllling/react-previewer/styles.css';
const App = () => {
const files = {
'App.tsx': `
import React from 'react';
const App = () => {
return (
<div>
<h1>Hello, React Previewer!</h1>
<p>这是一个实时预览的 React 组件</p>
</div>
);
};
export default App;
`
};
const depsInfo = {
'react': '18.2.0',
'react-dom': '18.2.0'
};
return (
<ReactPreviewer
files={files}
depsInfo={depsInfo}
entryFile="App.tsx"
onError={(error) => console.error('Preview error:', error)}
onElementClick={(sourceInfo) => console.log('Element clicked:', sourceInfo)}
/>
);
};有两种方式引入样式:
// 在你的应用入口文件(如 main.tsx 或 App.tsx)中
import '@zllling/react-previewer/styles.css';import { ReactPreviewer } from '@zllling/react-previewer';
import '@zllling/react-previewer/styles.css';
// 你的组件代码...import React from 'react';
import { ReactPreviewer } from '@zllling/react-previewer';
function App() {
const files = {
'App.tsx': `/* 你的 React 代码 */`,
'styles.css': `/* 你的 CSS 样式 */`
};
return (
<ReactPreviewer
files={files}
entryFile="App.tsx"
depsInfo={{
react: '18.2.0',
'react-dom': '18.2.0',
'@arco-design/web-react': '2.66.1'
}}
onError={(error) => {
console.error('预览错误:', error);
}}
onElementClick={(sourceInfo) => {
console.log('点击的元素源码信息:', sourceInfo);
}}
/>
);
}| 属性 | 类型 | 必需 | 默认值 | 描述 |
|---|---|---|---|---|
files |
Record<string, string> |
✅ | - | 要预览的文件内容 |
depsInfo |
Record<string, string> |
✅ | - | 依赖包信息 |
entryFile |
string |
❌ | 'App.tsx' |
入口文件名 |
onError |
(error: Error) => void |
❌ | - | 错误回调函数 |
onElementClick |
(sourceInfo: SourceInfo) => void |
❌ | - | 元素点击回调 |
loggerConfig |
Partial<LoggerConfig> |
❌ | - | 日志配置 |
interface SourceInfo {
file: string;
startLine: number;
endLine: number;
startColumn: number;
endColumn: number;
content: string;
position: { x: number; y: number };
}
interface LoggerConfig {
enabled: boolean;
level: LogLevel;
prefix?: string;
showTimestamp?: boolean;
}import { ReactPreviewer, LogLevel } from '@zllling/react-previewer';
<ReactPreviewer
files={files}
depsInfo={depsInfo}
loggerConfig={{
enabled: true,
level: LogLevel.DEBUG,
prefix: '[MyApp]',
showTimestamp: true
}}
/>import {
PreviewFrame,
ErrorBoundary,
ErrorDisplay,
PreviewerToolbar
} from '@zllling/react-previewer';
// 使用预览帧
<PreviewFrame
files={files}
entryFile="App.tsx"
depsInfo={depsInfo}
onError={handleError}
isInspecting={true}
/>
// 使用错误边界
<ErrorBoundary>
<YourComponent />
</ErrorBoundary>
// 使用错误显示
<ErrorDisplay error={error} />import {
CodeTransformer,
TypeScriptDependencyAnalyzer,
DependencyGraph
} from '@zllling/react-previewer';
// 代码转换
const transformer = new CodeTransformer();
const result = await transformer.transform(code, 'App.tsx');
// 依赖分析
const analyzer = new TypeScriptDependencyAnalyzer();
const dependencies = await analyzer.analyze(code, 'App.tsx', files);
// 依赖图构建
const graph = new DependencyGraph();
graph.buildFromFiles(files);npm installnpm run devnpm run build:libnpm publish- 样式引入:必须引入样式文件,否则组件可能显示异常
- 依赖管理:确保在
depsInfo中正确配置所需的依赖包 - 文件格式:支持
.tsx、.ts、.jsx、.js、.css等文件格式
MIT