Babel preset for all React plugins, providing comprehensive JSX transformation and React development support.
npx @tessl/cli install tessl/npm-babel-preset-react@6.24.0Babel Preset React is a comprehensive Babel configuration preset that bundles all the essential plugins and transformations needed for React development. It provides JSX syntax transformation, Flow type checking support, React-specific optimizations, and development-time enhancements for source mapping and component introspection.
npm install --save-dev babel-preset-reactThe preset is used through Babel configuration rather than direct imports. It's consumed by Babel through standard preset mechanisms:
Via .babelrc:
{
"presets": ["react"]
}Via package.json babel field:
{
"babel": {
"presets": ["react"]
}
}Via CLI:
babel script.js --presets reactVia Node API:
const babel = require("babel-core");
const result = babel.transform("code", {
presets: ["react"]
});npm install --save-dev babel-cli babel-preset-react.babelrc configuration file:{
"presets": ["react"]
}// Input (JSX)
const element = <h1>Hello, world!</h1>;
// Output (after transformation)
const element = React.createElement("h1", null, "Hello, world!");The preset automatically includes development-specific plugins when NODE_ENV is set to development:
NODE_ENV=development babel script.js --presets reactCore JSX syntax parsing and transformation to React.createElement calls.
// Preset Configuration Object (actual export from src/index.js)
export default {
presets: [
presetFlow // babel-preset-flow
],
plugins: [
transformReactJSX, // babel-plugin-transform-react-jsx
transformSyntaxJSX, // babel-plugin-syntax-jsx
transformReactDisplayName // babel-plugin-transform-react-display-name
],
env: {
development: {
plugins: [
// Development plugins array is empty in current version
]
}
}
}Includes babel-preset-flow for Flow type checking support, allowing you to use Flow type annotations alongside React components.
Flow Type Example:
// @flow
type Props = {
name: string,
age: number
};
function UserProfile(props: Props) {
return <div>Name: {props.name}, Age: {props.age}</div>;
}Automatically adds displayName property to React components for better debugging experience in React DevTools.
Before transformation:
const MyComponent = React.createClass({
render() {
return <div>Hello</div>;
}
});After transformation:
const MyComponent = React.createClass({
displayName: "MyComponent",
render() {
return <div>Hello</div>;
}
});The preset includes environment-specific configuration for potential future development-time features:
// Automatic configuration based on NODE_ENV
{
env: {
development: {
plugins: [
// Currently empty - no development-specific plugins are active
]
}
}
}The preset exports a single configuration object that Babel uses when the preset is applied:
/**
* Default export: Complete preset configuration object
* Used by Babel when this preset is specified in configuration
*/
export default {
presets: [
// Array of included Babel presets
presetFlow
],
plugins: [
// Array of included Babel plugins for React transformation
transformReactJSX,
transformSyntaxJSX,
transformReactDisplayName
],
env: {
// Environment-specific configurations
development: {
plugins: [] // Currently empty
}
}
};The preset includes the following Babel plugins and presets as dependencies:
Active dependencies (used in transformation):
Listed dependencies (not currently active):
This preset was commonly used with older Create React App setups and custom Babel configurations:
{
"presets": ["react"],
"plugins": ["transform-class-properties"]
}When using with Webpack and babel-loader:
// webpack.config.js
module.exports = {
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['react']
}
}
}
]
}
};For programmatic transformation using babel-core:
const babel = require("babel-core");
const code = `
const component = <div>Hello World</div>;
`;
const result = babel.transform(code, {
presets: ["react"]
});
console.log(result.code);
// Output: const component = React.createElement("div", null, "Hello World");