aroma-jsx-engine
Version:
A lightweight and flexible JSX/TSX engine for rendering React components in Node.js applications. Designed to work seamlessly with the [`aroma.js`](https://www.npmjs.com/package/aroma.js) framework, this package allows you to compile and render JSX/TSX co
129 lines (91 loc) • 3.26 kB
Markdown
# aroma-jsx-engine
A lightweight and flexible JSX/TSX engine for rendering React components in Node.js applications. Designed to work seamlessly with the [`aroma.js`](https://www.npmjs.com/package/aroma.js) framework, this package allows you to compile and render JSX/TSX components dynamically, making it perfect for server-side rendering (SSR).
---
## Features
- **Dynamic JSX/TSX Compilation**: Automatically detects and compiles both JavaScript (`.jsx`) and TypeScript (`.tsx`) files.
- **Lightweight**: Minimal dependencies, designed to keep your project lightweight.
- **Easy Integration**: Works seamlessly with `aroma.js` and other Node.js frameworks.
- **TypeScript Support**: Built-in support for TypeScript components.
- **Server-Side Rendering (SSR)**: Render React components to HTML strings for SSR.
---
## Installation
You can install `aroma-jsx-engine` via npm:
```bash
npm install aroma-jsx-engine
```
Or via yarn:
```bash
yarn add aroma-jsx-engine
```
## Usage
1. Compile and Render JSX/TSX
You can compile and render JSX/TSX components dynamically in your Node.js application.
Example
```javascript
const { compile, render } = require("aroma-jsx-engine");
// Define a JSX component as a string
const jsxCode = `
const MyComponent = ({ name, React }) => (
<div>
<h1>Hello, {name}!</h1>
<p>This is a JSX component.</p>
</div>
);
module.exports = MyComponent;
`;
// Compile the JSX code
const MyComponent = compile(jsxCode);
// Render the component to an HTML string
const htmlString = render(MyComponent, { name: "World" });
console.log(htmlString);
```
Output
```html
<div>
<h1>Hello, World!</h1>
<p>This is a JSX component.</p>
</div>
```
2. Load and Render JSX/TSX from Files
You can also load and render JSX/TSX components from external files.
Example
```javascript
const { loadFromFile, render } = require("aroma-jsx-engine");
// Load a JSX/TSX component from a file
const MyComponent = loadFromFile("./components/MyComponent.tsx");
// Render the component to an HTML string
const htmlString = render(MyComponent, { name: "World" });
console.log(htmlString);
```
Example JSX/TSX File (MyComponent.tsx)
```tsx
interface MyComponentProps {
name: string;
}
const MyComponent: React.FC<MyComponentProps> = ({ name }) => (
<div>
<h1>Hello, {name}!</h1>
<p>This is a TSX component loaded from an external file.</p>
</div>
);
module.exports = MyComponent;
```
3. Use with aroma.js
aroma-jsx-engine integrates seamlessly with the aroma.js framework for server-side rendering.
Example
```javascript
const Aroma = require("aroma.js");
const { loadFromFile, render } = require("aroma-jsx-engine");
const app = new Aroma();
// Load a JSX/TSX component from a file
const MyComponent = loadFromFile("./components/MyComponent.tsx");
// Define a route that renders the component
app.get("/", (req, res) => {
const htmlString = render(MyComponent, { name: "World" });
res.send(htmlString);
});
// Start the server
app.listen(3000, () => console.log("Server running on port 3000"));
```
## Author
Aavesh Jilani