环境变量

Next.js 和 Drupal 的配置变量。


.env.local

# Required
NEXT_PUBLIC_DRUPAL_BASE_URL=http://localhost:8080
NEXT_IMAGE_DOMAIN=localhost
# Required for Preview Mode
DRUPAL_PREVIEW_SECRET=
# Required for On-demand Revalidation
DRUPAL_REVALIDATE_SECRET=
# Authentication (Bearer)
DRUPAL_CLIENT_ID=
DRUPAL_CLIENT_SECRET=
# Authentication (Basic)
DRUPAL_USERNAME=
DRUPAL_PASSWORD=
# Optional
DRUPAL_SITE_ID=
DRUPAL_FRONT_PAGE=

必需

这些环境变量是初始化新的 DrupalClient 所必需的。

名称描述
NEXT_PUBLIC_DRUPAL_BASE_URLDrupal 站点的基本 URL。例如:https://drupal.org
NEXT_IMAGE_DOMAIN用于 next/image 的域名。例如:drupal.org
const drupal = new DrupalClient(process.env.NEXT_PUBLIC_DRUPAL_BASE_URL)

预览模式

预览模式所需的环境变量。

名称描述
DRUPAL_PREVIEW_SECRET用于 预览模式 的密钥。例如:6SZy9xkdtR
const drupal = new DrupalClient(process.env.NEXT_PUBLIC_DRUPAL_BASE_URL, {
previewSecret: process.env.DRUPAL_PREVIEW_SECRET,
})

按需重新验证

按需重新验证所需的环境变量。

名称描述
DRUPAL_REVALIDATE_SECRET用于按需重新验证的密钥。示例:U2Y5bbkKJ08Ua8F

pages/api/revalidate.ts

export default async function handler(request, response) {
const secret = request.query.secret as string
// Validate secret.
if (secret !== process.env.DRUPAL_REVALIDATE_SECRET) {
return response.status(401).json({ message: "Invalid secret." })
}
}

身份验证 (Bearer)

名称描述
DRUPAL_CLIENT_IDOAuth 客户端 ID。示例:a53b1d17-6b23-478d-8649-9aee63974c80
DRUPAL_CLIENT_SECRETOAuth 客户端密钥。示例:3#9h$2DU#8qKb6&
const drupal = new DrupalClient(process.env.NEXT_PUBLIC_DRUPAL_BASE_URL, {
auth: {
clientId: process.env.DRUPAL_CLIENT_ID,
clientSecret: process.env.DRUPAL_CLIENT_SECRET,
},
})

身份验证 (Basic)

名称描述
DRUPAL_USERNAMEDrupal 用户名。示例:admin
DRUPAL_PASSWORDDrupal 密码。示例:password
const drupal = new DrupalClient(process.env.NEXT_PUBLIC_DRUPAL_BASE_URL, {
auth: {
username: process.env.DRUPAL_USERNAME,
password: process.env.DRUPAL_PASSWORD,
},
})

可选

这些环境变量是可选的,并且next-drupal 1.4.0开始不再需要

名称描述
DRUPAL_SITE_IDDrupal 上 Next.js 站点的站点 ID。示例:marketing_site。有关使用示例,请参阅按站点筛选指南。
DRUPAL_FRONT_PAGE首页路径:示例:/front

DRUPAL_SITE_ID

// Fetch all articles with DRUPAL_SITE_ID in field_sites.
const nodes = await drupal.getResourceCollection<DrupalNode[]>(
"node--article",
{
params: {
filter: {
"field_sites.meta.drupal_internal__target_id":
process.env.DRUPAL_SITE_ID,
},
},
}
)

DRUPAL_FRONT_PAGE

const drupal = new DrupalClient(process.env.NEXT_PUBLIC_DRUPAL_BASE_URL, {
frontPage: process.env.DRUPAL_FRONT_PAGE,
})