<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vercel on Tuan's Blog</title><link>https://blog.cloudorz.com/tags/vercel/</link><description>Recent content in Vercel on Tuan's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>mt</copyright><lastBuildDate>Sun, 01 Nov 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://blog.cloudorz.com/tags/vercel/index.xml" rel="self" type="application/rss+xml"/><item><title>Hugo 插件 - Waline</title><link>https://blog.cloudorz.com/p/hugo-plugin-waline/</link><pubDate>Fri, 19 Apr 2024 13:14:24 +0800</pubDate><guid>https://blog.cloudorz.com/p/hugo-plugin-waline/</guid><description>&lt;img src="https://blog.cloudorz.com/p/hugo-plugin-waline/cover.svg" alt="Featured image of post Hugo 插件 - Waline" /&gt;&lt;h2 id="前言"&gt;前言&#10;&lt;/h2&gt;&lt;p&gt;近期学校一堆破事。醉了，趁着闲暇之余，寻思着我的博客还没有评论功能，于是便找了一个评论插件 Waline。这个插件是一个轻量级的评论系统，支持多种第三方登录，支持自定义表情包，支持自定义评论框样式。本文将介绍如何在 Hugo 博客中使用 Waline 评论插件。&lt;/p&gt;&#10;&lt;h2 id="waline-是什么"&gt;Waline 是什么&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://waline.js.org/" target="_blank" rel="noopener"&#10; &gt;Waline&lt;/a&gt; 是一款开源的、带后端的评论系统。和 utterances、giscus 这类基于 GitHub Issues / Discussions 的方案不同，Waline 的评论存在你自己的数据库里，访客&lt;strong&gt;不需要 GitHub 账号&lt;/strong&gt;也能评论。&lt;/p&gt;&#10;&lt;p&gt;主要特性：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;匿名评论，也支持注册账号和多种第三方登录；&lt;/li&gt;&#10;&lt;li&gt;表情包、Markdown、图片上传、代码高亮；&lt;/li&gt;&#10;&lt;li&gt;自带评论管理后台，可以审核、修改、删除评论；&lt;/li&gt;&#10;&lt;li&gt;支持浏览量统计、评论通知（邮件、Telegram 等）；&lt;/li&gt;&#10;&lt;li&gt;服务端可以部署在 Vercel、Netlify、自己的服务器等多种平台，数据库支持 PostgreSQL、MySQL、MongoDB、SQLite 等。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;它由两部分组成：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Waline 的组成" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cloudorz.com/p/hugo-plugin-waline/architecture.svg"&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;客户端&lt;/strong&gt;：一段 JS，嵌入到博客页面里，负责显示评论框和评论列表。Stack 主题已经内置了，我们只需要填配置；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;服务端&lt;/strong&gt;：一个 Node.js 应用，负责接收评论、读写数据库、提供管理后台。这部分需要我们自己部署。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="部署服务端"&gt;部署服务端&#10;&lt;/h2&gt;&lt;p&gt;下面按 &lt;a class="link" href="https://waline.js.org/guide/get-started/" target="_blank" rel="noopener"&#10; &gt;Waline 官方文档&lt;/a&gt; 推荐的 &lt;strong&gt;Vercel + Neon（PostgreSQL）&lt;/strong&gt; 方案部署，全程在网页上点点点，不需要服务器，免费额度对个人博客足够了。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;早期的教程大多是 Vercel + LeanCloud。目前官方文档已经移除了 LeanCloud 方案，新部署请直接用下面的数据库方案。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="1-在-vercel-上创建项目"&gt;1. 在 Vercel 上创建项目&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;打开官方文档 &lt;a class="link" href="https://waline.js.org/guide/get-started/" target="_blank" rel="noopener"&#10; &gt;快速上手&lt;/a&gt; 页面，点击 &lt;strong&gt;Deploy&lt;/strong&gt; 按钮跳转到 Vercel；没有登录的话，用 GitHub 账号登录即可。&lt;/li&gt;&#10;&lt;li&gt;输入一个你喜欢的项目名称，点击 &lt;strong&gt;Create&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;Vercel 会基于 Waline 模板在你的 GitHub 下新建一个同名仓库，并开始部署。一两分钟后部署完成，点击 &lt;strong&gt;Go to Dashboard&lt;/strong&gt; 进入控制台。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;这时候访问服务端可能会报 &lt;code&gt;500 This Serverless Function has crashed&lt;/code&gt;，这是因为还没连数据库，完成下一步就好了。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="2-创建数据库并初始化表结构"&gt;2. 创建数据库并初始化表结构&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;在项目控制台点击 &lt;strong&gt;Storage&lt;/strong&gt; → &lt;strong&gt;Create Database&lt;/strong&gt;，在 &lt;em&gt;Marketplace Database Providers&lt;/em&gt; 中选择 &lt;strong&gt;Neon&lt;/strong&gt;，点击 &lt;strong&gt;Continue&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;按提示创建 Neon 账号（&lt;strong&gt;Accept and Create&lt;/strong&gt;），套餐、地区保持默认即可，再给数据库起个名字点击 &lt;strong&gt;Create&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;在数据库页面点击 &lt;strong&gt;Connect&lt;/strong&gt; → &lt;strong&gt;Connect Project&lt;/strong&gt;，把数据库连接到刚才的 Waline 项目。Vercel 会自动把连接信息以环境变量的形式注入项目。&lt;/li&gt;&#10;&lt;li&gt;点击 &lt;strong&gt;Open in Neon&lt;/strong&gt; 跳转到 Neon 控制台，打开左侧的 &lt;strong&gt;SQL Editor&lt;/strong&gt;，把官方仓库里 &lt;a class="link" href="https://github.com/walinejs/waline/blob/main/assets/waline.pgsql" target="_blank" rel="noopener"&#10; &gt;waline.pgsql&lt;/a&gt; 的内容粘贴进去，点击 &lt;strong&gt;Run&lt;/strong&gt; 建表。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="3-重新部署"&gt;3. 重新部署&#10;&lt;/h3&gt;&lt;p&gt;回到 Vercel，进入 &lt;strong&gt;Deployments&lt;/strong&gt;，选择最新的一次部署，点击右侧的 &lt;strong&gt;Redeploy&lt;/strong&gt;。环境变量只在重新部署后才会生效。&lt;/p&gt;&#10;&lt;p&gt;等 &lt;code&gt;STATUS&lt;/code&gt; 变成 &lt;code&gt;Ready&lt;/code&gt; 后点击 &lt;strong&gt;Visit&lt;/strong&gt;，打开的地址（形如 &lt;code&gt;https://xxx.vercel.app&lt;/code&gt;）就是你的&lt;strong&gt;服务端地址 serverURL&lt;/strong&gt;，后面要用。&lt;/p&gt;&#10;&lt;h3 id="4可选绑定自己的域名"&gt;4.（可选）绑定自己的域名&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;*.vercel.app&lt;/code&gt; 在国内访问不太稳定，建议绑定自己的域名：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;在 Vercel 项目中进入 &lt;strong&gt;Domains&lt;/strong&gt;，添加域名，例如 &lt;code&gt;waline.example.com&lt;/code&gt;；&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;到域名服务商处添加一条 &lt;code&gt;CNAME&lt;/code&gt; 记录：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Type&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Name&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Value&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CNAME&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;waline&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;cname.vercel-dns.com&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;等待解析生效后，&lt;code&gt;https://waline.example.com&lt;/code&gt; 就是新的 serverURL。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="5-注册管理员"&gt;5. 注册管理员&#10;&lt;/h3&gt;&lt;p&gt;部署完成后，&lt;strong&gt;尽快&lt;/strong&gt;访问 &lt;code&gt;&amp;lt;serverURL&amp;gt;/ui/register&lt;/code&gt; 注册账号，&lt;strong&gt;第一个注册的用户会成为管理员&lt;/strong&gt;。之后在 &lt;code&gt;&amp;lt;serverURL&amp;gt;/ui&lt;/code&gt; 就能管理评论了。&lt;/p&gt;&#10;&lt;h3 id="常用环境变量"&gt;常用环境变量&#10;&lt;/h3&gt;&lt;p&gt;在 Vercel 项目的 &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;Environment Variables&lt;/strong&gt; 中可以进一步配置服务端，改完记得 Redeploy：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;变量&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;作用&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;SITE_NAME&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;博客名称，用于评论通知&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;SITE_URL&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;博客地址，用于评论通知中的链接&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;SECURE_DOMAINS&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;安全域名，只允许这些域名调用服务端，多个用逗号分隔&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;邮件通知、Telegram 通知等更多变量见 &lt;a class="link" href="https://waline.js.org/reference/server/env.html" target="_blank" rel="noopener"&#10; &gt;服务端环境变量&lt;/a&gt;。&lt;/p&gt;&#10;&lt;h2 id="在-stack-主题中启用-waline"&gt;在 Stack 主题中启用 Waline&#10;&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/CaiJimmy/hugo-theme-stack" target="_blank" rel="noopener"&#10; &gt;hugo-theme-stack&lt;/a&gt; 已经内置了 Waline 客户端（&lt;code&gt;layouts/_partials/comments/provider/waline.html&lt;/code&gt;），会自动引入 Waline 的 JS 和 CSS，我们只需要改配置。&lt;/p&gt;&#10;&lt;p&gt;在 &lt;code&gt;config/_default/params.toml&lt;/code&gt;（或者 &lt;code&gt;hugo.toml&lt;/code&gt; 的 &lt;code&gt;[params]&lt;/code&gt; 下）中：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;span class="lnt"&gt;12&#10;&lt;/span&gt;&lt;span class="lnt"&gt;13&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;enabled&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;waline&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waline&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;serverURL&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://waline.example.com&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;lang&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;zh-CN&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;emoji&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;https://unpkg.com/@waline/emojis@1.0.1/weibo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;requiredMeta&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;admin&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;博主&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;placeholder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;说点什么吧～&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;字段说明：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;字段&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;说明&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;serverURL&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;必填，上一步得到的服务端地址&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;lang&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;界面语言，例如 &lt;code&gt;zh-CN&lt;/code&gt;、&lt;code&gt;en&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;emoji&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;表情包预设地址，可以写多个&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;requiredMeta&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;评论时必填的信息，可选 &lt;code&gt;name&lt;/code&gt;、&lt;code&gt;email&lt;/code&gt;、&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;pageview&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;是否统计浏览量&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;locale&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;自定义界面文案，例如管理员标签 &lt;code&gt;admin&lt;/code&gt;、输入框占位文字 &lt;code&gt;placeholder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;主题是怎么把这些配置传给 Waline 的呢？看一下源码就清楚了：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="配置如何传给 Waline" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cloudorz.com/p/hugo-plugin-waline/config-mapping.svg"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;[comments.waline]&lt;/code&gt; 下的每一项都会原样传给 &lt;code&gt;Waline.init()&lt;/code&gt;。因为 Hugo 读取配置时会把键名转成小写，主题专门把 &lt;code&gt;serverurl&lt;/code&gt;、&lt;code&gt;requiredmeta&lt;/code&gt;、&lt;code&gt;wordlimit&lt;/code&gt;、&lt;code&gt;pagesize&lt;/code&gt;、&lt;code&gt;imageuploader&lt;/code&gt;、&lt;code&gt;texrenderer&lt;/code&gt;、&lt;code&gt;turnstilekey&lt;/code&gt; 这些键改回 Waline 需要的驼峰写法。所以其他 &lt;a class="link" href="https://waline.js.org/reference/client/props.html" target="_blank" rel="noopener"&#10; &gt;客户端选项&lt;/a&gt; 也可以直接写在这里，例如：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waline&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# ...&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;wordLimit&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;pageSize&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;主题已经设置了 &lt;code&gt;dark = 'html[data-scheme=&amp;quot;dark&amp;quot;]'&lt;/code&gt;，让评论框跟随博客的明暗模式切换，一般&lt;strong&gt;不要&lt;/strong&gt;在配置里再写 &lt;code&gt;dark&lt;/code&gt;，否则会覆盖主题的设置。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;保存后执行 &lt;code&gt;hugo server&lt;/code&gt;，打开任意一篇文章，滚到底部就能看到评论框了。&lt;/p&gt;&#10;&lt;h3 id="单篇文章关闭评论"&gt;单篇文章关闭评论&#10;&lt;/h3&gt;&lt;p&gt;不想让某篇文章开放评论，在它的 front matter 里写：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="常见问题"&gt;常见问题&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;评论框不显示&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;确认 &lt;code&gt;[comments]&lt;/code&gt; 中 &lt;code&gt;enabled = true&lt;/code&gt;，&lt;code&gt;provider = &amp;quot;waline&amp;quot;&lt;/code&gt;；&lt;/li&gt;&#10;&lt;li&gt;确认文章 front matter 里没有 &lt;code&gt;comments: false&lt;/code&gt;；&lt;/li&gt;&#10;&lt;li&gt;打开浏览器控制台，看是否有请求 serverURL 失败的报错。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;提示跨域或请求被拒绝&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;如果配置了 &lt;code&gt;SECURE_DOMAINS&lt;/code&gt;，检查它是否包含了你的博客域名；&lt;/li&gt;&#10;&lt;li&gt;确认 &lt;code&gt;serverURL&lt;/code&gt; 填的是服务端根地址，能在浏览器中直接打开。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;改了环境变量不生效&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Vercel 的环境变量需要 &lt;strong&gt;Redeploy&lt;/strong&gt; 才会生效。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://waline.js.org/guide/get-started/" target="_blank" rel="noopener"&#10; &gt;Waline 官方文档：快速上手&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://waline.js.org/guide/deploy/vercel.html" target="_blank" rel="noopener"&#10; &gt;Waline 官方文档：Vercel 部署&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://waline.js.org/reference/client/props.html" target="_blank" rel="noopener"&#10; &gt;Waline 官方文档：客户端属性&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://stack.cai.im/zh" target="_blank" rel="noopener"&#10; &gt;hugo-theme-stack 文档&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item></channel></rss>