CMS로서의 Next.js와 Tumblr 4부: 오픈 그래프 이미지
9780 단어 playwrightjavascriptnextjs
이것은 원래 하나의 게시물로 의도되었지만 조금 길어지고 조금 느려서 Open Graph 이미지부터 시작하겠습니다.
Open Graph 이미지는 Twitter 또는 Facebook과 같은 소셜 미디어 사이트에서 링크를 공유할 때 본 적이 있는 미리보기 이미지입니다. 기본적으로 Tumblr는 Tumblr 로고가 있는 일반 이미지를 표시하며 일부 테마는 아바타를 가져오거나 사용자 지정 이미지를 업로드할 수 있습니다. 그러나 다른 게시물에 다른 이미지를 첨부하거나 동적으로 생성하는 좋은 방법은 없습니다. 내 목표는 각 게시물이 제목이나 설명 및 유형을 표시하는 고유한 텍스트 기반 이미지를 갖는 것이었습니다.
이 주제에 대한 많은 좋은 기사가 있지만 그들의 지침은 내가 원하는 것을 정확히 얻지 못했기 때문에 결국 내 솔루션을 함께 선택하고 선택했습니다. 너무 가까웠지만 후드 아래에서
next-api-og-image
를 사용하는 chrome-aws-lambda
를 사용했고 Vercel에서 작동하도록 할 수 없었습니다. 이전 버전chrome-aws-lambda
을 설치하라는 제안도 시도했지만 배포되지 않았습니다. Generate Open Graph images for your static Next.js site은 즉석에서가 아니라 빌드 프로세스 중에 이미지를 생성했지만 Playwright을 사용하여 도입했는데 매우 유용했습니다. 이 두 기사는 아래 코드에 큰 영향을 미쳤습니다.필요한 극작가 패키지를 설치하여 시작하십시오.
yarn add playwright playwright-core playwright-aws-lambda
다음으로 게시물 구성 요소에서
meta
블록 내부에 next/head
태그를 추가합니다.<Head>
<meta property="og:image" content={`${process.env.NEXT_PUBLIC_BASE_URL}/api/og-image?headline=${post.headline || post.summary}&type=${post.type}`} />
...
</Head>
두 가지 참고 사항: 1) 편의를 위해 내 기본 URL을 환경 변수로 저장하므로
NEXT_PUBLIC_BASE_URL
를 교체해야 할 수 있습니다. 2) 쿼리 매개변수를 사용하여 게시물 제목과 유형을 전달합니다.content
URL은 pages/api/og-image.js
에서 생성할 경로를 가리킵니다. 이미지가 어떻게 보이길 원하는지에 따라 많은 HTML과 CSS를 잘라냈습니다.const playwright = require('playwright-aws-lambda');
export default async function handler (req, res) {
const html = `
<html>
<head>
<meta charset="UTF-8">
<style>
*, *:after, *:before {
box-spacing: border-box;
}
html {
line-height: 1.4;
}
body {
background: #f4f4f4;
margin: 0;
padding: 2rem;
}
...
</style>
</head>
<body>
<div class="og">
...
<div class="og__type">
<span>laurenashpole.com</span> — ${(req.query || {}).type || ''} post
</div>
<h1 class="og__headline">${(req.query || {}).headline || ''}</h1>
</div>
</body>
</html>
`;
if (process.env.NODE_ENV === 'development') {
res.setHeader('Content-Type', 'text/html');
return res.end(html);
}
const browser = await playwright.launchChromium({ headless: true });
const page = await browser.newPage();
await page.setViewportSize({ width: 1200, height: 630 });
await page.goto('about:blank');
await page.setContent(html, { waitUntil: 'networkidle' });
const img = await page.screenshot({ type: 'png' });
await browser.close();
res.setHeader('Cache-Control', 's-maxage=31536000, stale-while-revalidate');
res.setHeader('Content-Type', 'image/png');
res.end(img);
}
이제 로컬에서 개발하는 동안 해당 URL을 방문하면 HTML 페이지가 표시되어 디자인을 검사하고 조정할 수 있습니다. 프로덕션에서 Playwright는 헤드리스 브라우저를 시작하고 새 페이지를 열고 HTML을 삽입한 다음 PNG 스크린샷을 찍어 반환합니다.
이것이 제가 Open Graph 이미지를 설정하는 방법입니다. 다음에는 실제로 코드 블록에 대한 구문 강조로 시리즈를 마무리하겠습니다.
Reference
이 문제에 관하여(CMS로서의 Next.js와 Tumblr 4부: 오픈 그래프 이미지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/laurenashpole/nextjs-and-tumblr-as-a-cms-part-4-open-graph-images-3i4e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)