Building a Full-Stack Single-Page App with AdonisJs, Inertia.js, and Vue.js
Introduction
When building web applications, it’s common to decouple the backend from the frontend and use a GraphQL or REST API for communication. However, this approach can add complexity and increase deployment and hosting responsibilities. What if you could build a fully JavaScript single-page app without the added complexity of APIs and separate frontends? This article explores how to achieve this using AdonisJs, Inertia.js, and Vue.js.
Getting Started with AdonisJs, Inertia.js, and Vue.js
AdonisJs is a popular Node.js web framework for building APIs and server-side applications. Inertia.js is a library for building full-stack single-page applications (SPAs) using supported frameworks like React, Vue, and Svelte on the frontend. Vue.js is a popular JavaScript framework for building user interfaces.
Setting up an AdonisJs and Inertia.js Project
To create an AdonisJs application, run the following command:
npm init adonisjs-app@latest
Next, navigate into your project and configure the inertiajs-adonisjs adapter to add Inertia to your AdonisJs project.
Configuring the Inertiajs-Adonisjs Adapter Middleware
Register the inertiajs-adonisjs adapter middleware globally into your project by adding it to your ./start/kernel.ts
file.
Connecting the Vue.js App to Inertia.js
In your Vue ./resources/js/app.js
app file, import createInertiaApp
and add some configurations.
Setting up Server-Side Rendering
To get server-side rendering working, install a few dependencies and add an additional script entry point specific to SSR in a new file.
Setting up Routing
Setting up routes is straightforward. Register routes and use inertia.render()
to render them.
Creating the Homepage
Create a new route for /
by creating a ./resources/js/Pages/Home.vue
page.
Passing Props
Pass props to your component from the ./start/routes.ts
routes file.
Setting up Tailwind CSS
Install the required packages and generate the configuration file.
Configuring PostCSS
Configure PostCSS by enabling the PostCSSLoader in ./webpack.config.js
.
Creating Vue.js Components
Create and add components to your application like a regular Vue application.
Building the SiteNav and SiteHeader Components
Create new files for the SiteNav and SiteHeader components.
Making Components Global
Make your components globally accessible by registering them in your ./resources/js/app.js
.
Setting up Default and Per-Page Layouts
Create a default layout file and assign the layout component to the layout property in the page file.
Using the Inertia.js Form Helper
Inertia supports processing form submissions that use asynchronous HTTP requests.
Creating the FormInput Component
Create a new ./resources/js/components/FormInput.vue
file.
Building the Register Page
Create a new ./resources/js/pages/Register.vue
file.
Updating Routes
Update your Register GET and POST requests routes.
By following these steps, you can easily set up AdonisJs, Inertia.js, and Vue.js to build fast and performant web applications. These technologies provide comprehensive solutions for building modern web applications, including server-side rendering, Tailwind CSS for styling, and the Inertia.js form helper for form submission.