Getting Started with Nuxt.js and BCMS
This guide will walk you through integrating BCMS with a Nuxt project. Let’s get started!
The quickest way to go from scratch to a simple Nuxt blog with BCMS is by running the following command locally:
npx @thebcms/cli create nuxt starter simple-blog
Follow the prompts as they appear.
Running this command will:
Set up a new BCMS project
Populate it with sample content
Scaffold a Nuxt project locally
Create an .env file and update your project with the required BCMS configuration
Once completed, simply run:
npm install npm run dev
If you prefer a detailed, step-by-step approach, continue below:
Open Your BCMS Project
Head to https://app.thebcms.com and open your BCMS project. Ensure you have entries in your project so you can fetch data and display it in Nuxt.js. For example, create a Blog template and add a Cover Image media property.
![1.png](https://cdn.thebcms.com/api/v3/org/620528baca65b6578d29868d/instance/670e90c0cedcf9e4d34d1a23/media/670e90c0cedcf9e4d34d2474/bin2/1.png?apiKey=670e90c0cedcf9e4d34d24e7.a2132a1499ac4abf17c3c3183070d09975292fb5fe5c0f15d2d8c9288171554b)
Create a Blog Entry
Create a new blog entry titled My First Blog, add a cover image, and write some content.
![2.png](https://cdn.thebcms.com/api/v3/org/620528baca65b6578d29868d/instance/670e90c0cedcf9e4d34d1a23/media/670e90c0cedcf9e4d34d2475/bin2/2.png?apiKey=670e90c0cedcf9e4d34d24e7.a2132a1499ac4abf17c3c3183070d09975292fb5fe5c0f15d2d8c9288171554b)
Generate an API Key
Navigate to Administration > Settings > API Keys. Create a new API key. Keep this page open, as you’ll need the API key information in the next steps. Ensure the key has permission to fetch entries from the Blog template.
![3.png](https://cdn.thebcms.com/api/v3/org/620528baca65b6578d29868d/instance/670e90c0cedcf9e4d34d1a23/media/670e90c0cedcf9e4d34d2476/bin2/3.png?apiKey=670e90c0cedcf9e4d34d24e7.a2132a1499ac4abf17c3c3183070d09975292fb5fe5c0f15d2d8c9288171554b)
Set Up Your Nuxt.js Project
Open your terminal and create a new Nuxt.js project using the Nuxt.js starter:
npx nuxi@latest init <project-name>
Once the project is created, open it in your code editor.
Install BCMS Packages
Install the necessary BCMS packages:
npm i --save @thebcms/cli @thebcms/types @thebcms/utils @thebcms/client @thebcms/components-vue
Update Scripts in package.json
Modify the scripts section in package.json
to include the following commands:
The bcms --pull types --lng ts
command runs the BCMS CLI to pull types from BCMS and store them in /bcms/types/
. These types are compatible with both JavaScript and TypeScript.
{ "scripts":{ "build":"bcms --pull types --lng ts && nuxt build", "dev":"bcms --pull types --lng ts && nuxt dev", "generate":"bcms --pull types --lng ts && nuxt generate", "preview":"bcms --pull types --lng ts && nuxt preview", "postinstall":"bcms --pull types --lng ts && nuxt prepare" } }
Configure TypeScript (Optional)
If you are using TypeScript, open tsconfig.json
and update the moduleResolution
to Node
:
{ "extends":"./.nuxt/tsconfig.json", "compilerOptions":{ "moduleResolution":"Node" } }
Set Up the BCMS Configuration
Create a new file in the root of your project called bcms.config.cjs
and add the following configuration:
module.exports = { client: { orgId: "YOUR_PROJECT_ORG_ID", instanceId: "YOUR_PROJECT_INSTANCE_ID", apiKey: { id: "API_KEY_ID", secret: "API_KEY_SECRET" }, }, };
You can find the required information on the API key page you generated earlier.
Initialize BCMS Client
In the root of your project, create a file called bcms.ts
and initialize the BCMS client:
import { Client } from "@thebcms/client"; export const bcms = new Client( "ORG_ID", "INSTANCE_ID", { id: "API_KEY_ID", secret: "API_KEY_SECRET", }, { injectSvg: true, } );
Fetch and Display Data in Nuxt.js
Now that BCMS is configured, open /app.vue
and fetch the blog data from BCMS to display it on your page:
<template> <div> <div v-for="(blog, blogIdx) in blogs" :key="blogIdx"> <BCMSImage :media="blog.meta.cover_image" :client="bcms" /> <BCMSContentManager :items="blog.content" /> </div> </div> </template> <script setup lang="ts"> import { bcms } from "~/bcms"; import type { BlogEntry, BlogEntryMetaItem } from "~/bcms/types/ts"; import type { EntryContentParsedItem } from "@thebcms/client/types"; import { BCMSContentManager, BCMSImage } from "@thebcms/components-vue"; const result = await useAsyncData(async () => { const entries = await bcms.entry.getAll('blog') as BlogEntry[]; return entries.map(entry => { return { meta: entry.meta.en as BlogEntryMetaItem, content: entry.content.en as EntryContentParsedItem[] }; }); }); const blogs = result.data; </script>
That’s it—happy coding!