Awesome
@compositor/jsx-loader
Webpack loader for Compositor JSX
npm i @compositor/jsx-loader
// webpack.config.js
{
module: {
rules: [
{
test: /\.jsx$/,
use: [
'babel-loader',
'@compositor/jsx-loader'
]
}
]
}
}
JSX Format
Compositor JSX is a static file format that uses JSX, without any wrapping JavaScript syntax. This format is well suited for creating prototypes, demos, and pages that use a common set of React UI components.
---
title: Hello
scope: import * as scope from 'rebass'
---
<Box>
<Heading>{props.title}</Heading>
</Box>
JSX files are converted to pure functional components, which helps to develop UI compositions decoupled from application state.
Front Matter
Front matter is used to specify default props and component scope for the file.
Scope
Scope can be specified with the scope
field in front matter,
or with the scope
option in a webpack configuration.
The scope
value is included at the top of the transpiled component module and any valid JavaScript expression should work.
The scope string should evaluate to an object where the keys are provided in scope to the component.
// example scope.js file
import { Box, Flex } from 'grid-styled'
export default {
Box,
Flex
}
Specified in JSX front matter:
---
scope: import scope from './scope'
---
Or specified as a loader option in webpack configuration:
{
module: {
rules: [
{
test: /\.jsx$/,
use: [
'babel-loader',
{
loader: '@compositor/jsx-loader',
options: {
scope: `import scope from './scope'`
}
}
]
}
]
}
}
Raw JSX Source
The transpiled module will also include a named export jsx
for access to the source JSX content.
import { jsx } from './Hello.jsx'
MIT License