Update 2023: I highly advise using Vite with their official preset, as it's much easier to configure and miles faster than Webpack.
In this article, I share my configuration for Preact usage with Laravel Mix.
Install these dependencies before you get started:
preact
@babel/plugin-proposal-class-properties
@babel/preset-react
You can do it with this command:
npm install preact @babel/plugin-proposal-class-properties @babel/preset-react
Next, add this content to your webpack.mix.js
// webpack.mix.js
const mix = require('laravel-mix');
mix.webpackConfig({
"resolve": {
"alias": {
"react": "preact/compat",
"react-dom": "preact/compat"
}
}
});
mix.babelConfig({
"plugins": [
"@babel/plugin-proposal-class-properties"
],
});
mix.react('resources/js/app.js', 'public/js');
And here is an example app component, you can store it in resources/js/app.js
file:
// app.js
import { h, render, Component } from 'preact';
window.React = require('preact');
class App extends Component {
render() {
return <h1>Preact from Laravel Mix</h1>;
}
}
render(<App />, document.body);
Note: As we set out rendering node as document.body
, you should place your script tag inside <body>
tag. If you need to place <script>
tag in the <head>
section - you will need to add defer
attribute.
<body>
<script src="{{ mix('js/app.js') }}"></script>
</body>
That's all, happy coding! :)
Top comments (1)
Thanks for the post ... but What's benfit of using "babel/plugin-proposal-class-properties"?