🎈 Features
🔔 准备
你需要准备:
本地调试环境[Optional]:
# install dependencies
$ yarn install
# for develop
$ yarn dev
# for build
$ yarn build && yarn start
📕 复制 Notion 模板
博客模板:https://ranguiquan.notion.site/a8e6585eebf843aebc1c5dd529d8d716?v=93f8b7f9b24e4b7da71bddf714f57802
评论模板:https://ranguiquan.notion.site/b18bbc681b864d01939b0093a7b474c6?v=de30b8df1ca24478b494e5d9f8485016
点击右上角的 Duplicate 按钮,复制到你的 workspace 里面。
🔐 生成 Notion token
点击 New integration, 名字可以随便取。选项不用动,点击提交。把生成的 Token 字符串保存好,等一下要用。
回到 Notion,进入之前复制的两个 database,点击右上角的 share 按钮,邀请刚刚创建的 Integration。
🍴 fork 仓库并自定义配置
点击右上角的 Fork 按钮复制一个仓库到你的账户下。修改 site.config.js
配置文件:
{}
包裹的内容定义网站首页,只能配置 type: ‘database’
type: ‘page’
,如果配置为 database,首页呈现卡片视图,如果配置为 database,首页呈现为一篇文章。{}
中的内容定义导航栏链接。可以选择 type: ‘database’
type: ‘page’
type: ‘link’
。如果配置 database,点击连接后跳转到对应数据库的卡片视图,配置 page 跳转到文章,配置 link 跳转到对应链接。💡 获取 Notion id
Notion 中的每一个database、page都有唯一的 id,可以从 url 链接中得到。打开 Notion database 和 page,url 构成通常是这样的,复制 databaseID 或 pageID 到配置文件中。
# database url
https://www.notion.so/[username]/[databaseID]?v=[viewID]
# page url
https://www.notion.so/[username]/Notion-[pageID]
▲ 在 Vercel 上部署
点击这个链接
会出现 vercel 的部署界面,在 import git repository 对应的项目上点击 import,会出现一个配置框,不要点 deploy,还有环境变量要填。
NOTION_TOKEN
:开始生成的 Notion token。
GITHUB_ID
GITHUB_SECRET
NEXTAUTH_URL
:网站域名,包含协议。如果域名是 example.com
就填 https://example.com
。没有域名咋办呢?下面会说。
现在我们还没有 GITHUB_ID
和GITHUB_SECRET
。回到 GitHub,右上角下拉菜单选择 settings,左下角点击 Developer settings,左上角选择 OAuth Apps,新建一个 OAuth App,名字可以随意,HomePage URL 和 Authorization callback URL 都要填网站的完整包含协议的域名(和NEXTAUTH_URL
是一样的值)。把生成的 Client ID 和 Client secrets 分别填入GITHUB_ID
和GITHUB_SECRET
环境变量里面。
现在点击部署!等到圈圈转完(一般1分钟不到),不出问题就可以访问自己的网站了。
🔰 通过 database property 自定义
另外,每一篇文章都可以选择 cover 和 icon,如果不选择的话就不会展示,但在卡片视图下文章会展示默认 cover,在项目目录 /public/default_cover.webp
下。更换 ico 的话也是通过替换文件的方式(没做这方面的功能)。
💻 域名的问题
如果手上没有域名,环境变量一定是填不了的。好在 vercel 会为每一个项目分配一个专属的域名,先别管环境变量,部署,获得域名,填进环境变量,在 Deployments 里面重新部署即可。
如果自己有域名,可以把 nameserver 改成 vercel 家的,这样可以直接把域名分配给项目,非常的快捷方便。
ns1.vercel-dns.com
ns2.vercel-dns.com
🧶 限制
支持的 Notion block 种类还比较有限,只包含几种基础的结构,具体可以查看:
已经支持的结构也不完整,例如:video 仅支持 Youtube,embed 仅支持 bilibili,图片仅支持外部链接,不支持 Notion 内置图片( Notion 内置图片功能很 tricky),不支持表格等等。如何自建图床可以看我这篇: