Как подключить Payload CMS к существующему проекту Next.js
Полностью рабочая и проверенная инструкция по подключению Payload CMS к существующему проекту Next.js (App Router).
-
Создаём в папке
appсуществующего проекта две подпапки(frontend)и(payload). -
Переносим исходники существующего проекта из папки
appв подпапку(frontend). -
Копируем исходники Payload CMS в подпапку
(payload). Исходники Payload CMS необходимо скопировать из папки(payload)пустого шаблона Payload CMS на GitHub по ссылке. -
Копируем файлы
payload.config.tsиpayload-types.tsи папкуcollectionsиз пустого шаблона Payload CMS на GitHub по ссылке выше на один уровень (рядом) с папкойapp.
В результате должна получиться примерно такая структура исходников:
src
├─ app
├─── (frontend)
├───── // Исходники существующего проекта
├─── (payload)
├───── // Исходники Payload CMS
├─ collections
├─ payload-types.ts
├─ payload.config.ts
- Копируем файл
tsconfig.jsonиз корня пустого шаблона Payload CMS на GitHub по ссылке выше в корень существующего проекта (если его нет). Если файлtsconfig.jsonуже существует – добавляем в него путь к конфигурации Payload CMS:
{
"compilerOptions": {
// ...
"paths": {
"@/*": ["./src/*"],
"@payload-config": ["./src/payload.config.ts"]
}
}
// ...
}- Добавляем в файл
package.jsonпараметр"type": "module":
{
"name": "next-payload",
"version": "0.1.0",
"type": "module",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
}
// ...
}- Добавляем к проекту необходимые пакеты Payload CMS:
npm i payload @payloadcms/next @payloadcms/richtext-lexical sharp graphql- Добавляем адаптер базы данных на примере SQLite:
npm i @payloadcms/db-sqliteС инструкциями по установке другого адаптера, например, MongoDB или Postgres, можно ознакомиться по ссылке.
- Добавляем плагин Payload CMS в конфигурацию Next.js:
import { withPayload } from '@payloadcms/next/withPayload';
/** @type {import('next').NextConfig} */
const nextConfig = {};
export default nextConfig;
export default withPayload(nextConfig);- Завершаем настройку конфигурации Payload CMS в файле
payload.config.ts, который мы скопировали в п. 4 выше:
import { mongooseAdapter } from "@payloadcms/db-mongodb";
import { payloadCloudPlugin } from "@payloadcms/payload-cloud";
import { sqliteAdapter } from "@payloadcms/db-sqlite";
import { lexicalEditor } from "@payloadcms/richtext-lexical";
import path from "path";
import { buildConfig } from "payload";
import { fileURLToPath } from "url";
import sharp from "sharp";
import { Users } from "./collections/Users";
import { Media } from "./collections/Media";
const filename = fileURLToPath(import.meta.url);
const dirname = path.dirname(filename);
export default buildConfig({
admin: {
user: Users.slug,
importMap: {
baseDir: path.resolve(dirname),
},
},
collections: [Users, Media],
editor: lexicalEditor(),
secret: process.env.PAYLOAD_SECRET || "",
typescript: {
outputFile: path.resolve(dirname, "payload-types.ts"),
},
db: mongooseAdapter({
url: process.env.DATABASE_URI || "",
}),
db: sqliteAdapter({
client: {
url: process.env.DATABASE_URI || "",
},
}),
sharp,
plugins: [payloadCloudPlugin()],
});- Создаем в корне проекта файл
.envили добавляем в существующий файл.envследующие переменные окружения:
DATABASE_URI=file:./.db
PAYLOAD_SECRET=423152346576796780678623Примечания:
- файл
.dbсоздавать не нужно, он автоматически будет создан при первом обращении к админке в режиме разработчика; PAYLOAD_SECRETнеобходимо заменить на свои цифры.
- Запускаем проект в режиме разработчика:
npm run devи переходим в админку по адресу:
http://localhost:3000/adminЕсли всё было выполнено правильно – откроется форма для создания первого пользователя.






