神觉晓

@shenjuexiao

神觉晓

Idea-Note 笔记应用

GitHub Liubsyy idea-note

📝 笔记总结

安装绿色版比较方便,同步功能实用性强,对于习惯左右分栏预览来说还是有点不自在,尤其是空行不是那么明显。可能是我比较喜欢在线版的 Markdown 编辑器。

📖 内容来源

Idea Note 是一款轻量简洁的笔记应用,包含 Markdown 编辑器、文件管理器、 AI 笔记助手,支持Git远程同步,兼容 Windows、MacOS 和 Linux 平台。

⚡ 功能特性

  • Markdown 编辑器:所见即所得实时预览,支持 CommonMark + GFM、KaTeX 公式、Mermaid流程图、HTML / SVG 渲染、源码模式、多标签页和格式工具栏。
  • 文件管理:除markdown外还可编辑其他文本文件,可作为轻量级项目文件管理器。
  • AI 笔记助手:用自然语言对当前笔记进行问答、总结、润色,并通过工具直接读取、搜索、新建、编辑或删除笔记。
  • Git 同步与历史:支持自动提交、远程推拉、本地版本记录、单文件 / 全局历史和 diff 对比。
  • 内置终端:集成终端,可在应用内直接执行命令。
  • 其他特性:支持PDF导出和打印、切换主题、自定义字体字号间距。

Hexo 四种部署方式

4 Ways to Deploy Hexo

🌐 快速安装

1
2
3
4
5
6
7
8
9
10
# 安装 Node.js 版本需不低于 10.13
# 建议使用 Node.js 12.0 及以上版本
# 安装 Git
# npm 安装 Hexo
npm install -g hexo-cli

# Hexo 初始化
hexo init <folder>
cd <folder>
npm install

1️⃣ 部署本仓库 GitHub Actions (官方推荐)

在 GitHub Pages 上部署 Hexo

  • .gitignore 文件中包含一行 public/
  • 自定义域名需要在 source/ 文件夹中新增 CNAME
  • 建立 .github/workflows/pages.yml
  • 本地检查 node --version,替换版本
  • 将 main 分支 push 到远程仓库
  • 远程仓库 Settings -> Pages -> Source -> GitHub Actions

官方版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
.github/workflows/pages.yml
name: Pages

on:
push:
branches:
- main # default branch

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
# If your repository depends on submodule, please see: https://github.com/actions/checkout
submodules: recursive
- name: Use Node.js 20
uses: actions/setup-node@v4
with:
# Examples: 20, 18.19, >=16.20.2, lts/Iron, lts/Hydrogen, *, latest, current, node
# Ref: https://github.com/actions/setup-node#supported-version-syntax
node-version: \"20\"
- name: Cache NPM dependencies
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
restore-keys: |
${{ runner.OS }}-npm-cache
- name: Install Dependencies
run: npm install
- name: Build
run: npm run build
- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./public
deploy:
needs: build
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

简化版

name: simple-hexo-deploy-actions

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# .github/workflows/simple-hexo-deploy-actions.yml
name: simple-hexo-deploy-actions

on:
push:
branches: [ main ]
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/setup-node@v4
with:
node-version: \"20\"
- uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
- run: npm install
- run: npm run build
- uses: actions/upload-pages-artifact@v3
with:
path: ./public

deploy:
needs: build
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- uses: actions/deploy-pages@v4
id: deployment

2️⃣ 一键部署

一键部署

  • 安装 hexo-deployer-git
1
npm install hexo-deployer-git --save
  • 编辑 _config.yml (示例值)
1
2
3
4
5
deploy:
type: git
repo: <repository url> # https://bitbucket.org/johnsmith/johnsmith.bitbucket.io
branch: [branch]
message: [message]

3️⃣ 部署本仓库 gh-pages

使用 Personal Access Token (PAT)

  • 步骤1:创建 Personal Access Token
    点击 GitHub 右上角头像 → Settings,左侧菜单选择 Developer settings → Personal access tokens → Tokens (classic),点击 Generate new token (classic)

设置:
Note: 填写名称(如 "gh-pages-deploy")
Expiration: 选择合适的时间
Scopes: 勾选 repo(完整权限)
生成并复制 token(只显示一次,务必保存)

  • 步骤2:在仓库中添加 Secret
    进入你的仓库 Settings → Secrets and variables → Actions,点击 New repository secret,
    Name: PERSONAL_TOKEN
    Secret: 粘贴你复制的 token

  • 步骤3:修改 workflow 文件

1
2
3
4
5
6
7
8
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
# 使用 PAT 而不是 GITHUB_TOKEN
personal_token: ${{ secrets.PERSONAL_TOKEN }}
# 或者你的构建输出目录
publish_dir: ./build
publish_branch: gh-pages

简化版

name: simple-hexo-deploy-pages

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# .github/workflows/simple-hexo-deploy-pages.yml
name: simple-hexo-deploy-pages

on:
push:
branches: [ main ]
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/setup-node@v4
with:
node-version: \"20\"
- uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
- run: npm install
- run: npm run build
- uses: actions/upload-artifact@v4
with:
name: public
path: ${{ github.workspace }}/public
retention-days: 1

deploy:
needs: build
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
name: public
path: ./public
- uses: peaceiris/actions-gh-pages@v4
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
external_repository: ${{ github.respository }}
publish_branch: gh-pages
publish_dir: ./public
keep_files: false
force_orphan: false
commit_message: '🚀 Deploy static pages to gh-pages'
allow_empty_commit: false
cname: ${{ github.respository_owner }}.github.io/${{ github.event.respository.name }}
user_name: \"github-actions[bot]\"
user_email: \"github-actions[bot]@users.noreply.github.com\"

4️⃣ 部署其他仓库 gh-pages

使用 Personal Access Token (PAT) 方法同上

简化版

name: simple-hexo-deploy-other

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# .github/workflows/simple-hexo-deploy-other.yml
name: simple-hexo-deploy-other

on:
push:
branches: [ main ]
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/setup-node@v4
with:
node-version: \"20\"
- uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
- run: npm install
- run: npm run build
- uses: actions/upload-artifact@v4
with:
name: public
path: ${{ github.workspace }}/public
retention-days: 1

deploy:
needs: build
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
name: public
path: ./public
- uses: peaceiris/actions-gh-pages@v4
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
external_repository: # 用户名/其他仓库
publish_branch: gh-pages
publish_dir: ./public
keep_files: false
force_orphan: false
commit_message: '🚀 Deploy static pages to gh-pages'
allow_empty_commit: false
cname: # 自定义
user_name: \"github-actions[bot]\"
user_email: \"github-actions[bot]@users.noreply.github.com\"

细粒度个人访问令牌

GitHub Fine-grained personal access tokens.png

📝 笔记总结

Personal access tokens (classic) 设置:
repo - Full control of private repositories
Fine-grained personal access tokens 类似设置。

📖 内容来源

🔍 简单说明

Fine-grained personal access tokens

Create a fine-grained, repository-scoped token suitable for personal API use and for using Git over HTTPS.

创建一个细粒度的、仓库范围的令牌,为个人通过 API 以及 HTTPS 使用 Git 所用。

Personal access tokens (classic)

Tokens you have generated that can be used to access the GitHub API.

你已生成的、可用于访问 GitHub API 的令牌。

🔄 复刻经典权限

repo: Full control of private repositories,确实是经典令牌(Classic PAT)中最“万能”也最危险的权限。细粒度令牌(Fine-grained PAT)中,不存在、也不允许存在一个直接等同于“Full control of private repositories”的权限选项。

要复制“Full control”的效果,核心是把“访问范围”和“数据权限”都开到最大:

仓库访问范围(Repository access)

必须选择 “All repositories”。

仓库数据权限(Repository permissions)

逐个手动把所有与仓库读写相关的权限都设为 “Read and write”。关键列表如下(缺一不可):

  • Contents(代码、提交、树)
  • Pull Requests
  • Issues
  • Actions(GitHub Actions)
  • Workflows(工作流文件)
  • Administration(仓库设置、分支保护规则)
  • Metadata(元数据,这个默认就有,通常不可取消)
  • Secrets(仓库和环境的密文)
  • Deployments(部署状态)
  • Environments(环境配置)

将上述所有权限都设为读写后,这个细粒度令牌就拥有了绝大多数私有仓库的“完整控制权”。

🚫 无法复刻的部分

即使你照上面全部设置了,它依然不是真正的“Full control”,主要有两个硬性限制:

  • 组织管理权限(无法绕过):如果你是组织成员而非所有者,即使令牌给了 Administration: Write,你在细粒度令牌下无法修改组织的分支保护规则或成员权限,除非你本人是组织所有者。而经典令牌的 repo 范围直接沿用你账户的现有权限,不受此限。
  • 外部仓库权限(无法覆盖):细粒度令牌的“All repositories”仅指你创建或直接所属组织下的仓库。它无法访问外部协作者邀请你加入的仓库,除非该仓库明确被选中。而经典 repo 令牌可以访问你所有能接触到的私有仓库。

⚠️ 需要完全相同的“Full control”?

只有唯一的替代方案:继续使用经典令牌(Personal access tokens (classic)),并在创建时勾选 repo 范围。但需要注意:

  • GitHub已逐步限制经典令牌的使用(自2024年起,部分操作已不支持新建经典令牌)。
  • 如果必须使用,请务必将其视为最高级别密码,绝不要写入代码或日志,并设置极短的过期时间(如30天)。

💡 总结建议

如果你是为了给CI/CD(持续集成/持续部署)系统授权,强烈不建议追求“Full control”。请只授予该CI任务必要的单个仓库和具体权限(如只需 Contents: read 来拉代码)。

如果确因历史代码或工具限制必须使用repo全权限,那么不要尝试在细粒度令牌中寻找平替——直接创建经典令牌,但务必在风险评估后启用严格的过期和审计策略。

📋 简单案例

我现在使用 Fine-grained tokens 代替 Tokens (classic),生成例如 Repo 权限全选用于从源码仓库使用 GitHub Actions 部署博客仓库的 gh-pages。

GitHub Fine-grained tokens Permissions

Pagic Windows 降级安装

Pagic dist on http 127

📝 笔记总结

克隆仓库,修改 i18n.tsx,安装成功,但是部署中还会出现 CDN 错误。

📖 内容来源

Pagic:Deno + React 驱动的静态网站生成器

🔧 安装 Deno v1.34.1

PowerShell (Windows) (失败)

原理是将脚本内容下载后,通过管道传递给 Invoke-Expression,并使用 -ArgumentList 来指定版本号:

1
irm https://deno.land/install.ps1 | iex -ArgumentList \"v1.34.1\"

或

1
irm https://deno.land/install.ps1 | iex -args \"v1.34.1\"

分两步执行(成功)

1
2
3
4
# 1. 下载脚本到本地临时文件夹
Invoke-RestMethod -Uri \"https://deno.land/install.ps1\" -OutFile \"$env:TEMP\\deno_install.ps1\"
# 2. 执行脚本并传入参数
& \"$env:TEMP\\deno_install.ps1\" \"v1.34.1\"

Deno Windows deno install 1.34.1

🧩 安装后验证

安装完成后,记得关闭并重新打开你的 PowerShell 终端,然后运行以下命令来确认版本:

1
deno --version

⬆️ 安装 Pagic

安装最新版本

1
deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic/mod.ts

安装指定版本

1
deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic@v1.6.3/mod.ts

指定读写目录的方式

1
deno install --unstable --allow-read=/home/xcatliu/site --allow-write=/home/xcatliu/site --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic/mod.ts

指定读写目录的方式

1
deno install --unstable --allow-read=/home/xcatliu/site --allow-write=/home/xcatliu/site --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic/mod.ts

🚫 CDN 错误

1
2
3
4
5
6
7
PS D:\\git> deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic/mod.ts
Warning Implicitly using latest version (v1.6.3) for https://deno.land/x/pagic/mod.ts
Sending fatal alert BadCertificatey@v0.25.7/prompt/_generic_suggestions.ts (10/57)
Sending fatal alert BadCertificate11.0/fs/mod.ts 0.40KiB/0.40KiB (15/57)
error: error sending request for url (https://cdn.pagic.org/i18next@19.8.1/esnext/i18next.js): error trying to connect: invalid peer certificate: NotValidForName
at https://deno.land/x/pagic@v1.6.3/src/plugins/i18n.tsx:4:21
PS D:\\git>

错误是由于 Deno 在下载依赖时遇到了 SSL 证书验证问题。具体是 cdn.pagic.org 这个域名的证书无效(NotValidForName 错误)。

Pagic error sending request for url

🎯 本地安装

克隆仓库

1
git clone git@github.com:xcatliu/pagic.git

修改 i18n.tsx

1
2
3
4
# pagic\\src\\plugins\\i18n.tsx
import i18next from '../../cdn.pagic.org/i18next@19.8.1/esnext/i18next.js';
import { Trans as TransComponent } from '../../cdn.pagic.org/react-i18next@11.7.3/Trans.js';

安装 Pagic

1
deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic mod.ts

Pagic Successfully installed pagic

##💡初始化项目

要使用 pagic 构建静态网站,则该项目至少需要包含一个 pagic.config.ts 配置文件和一个 md/tsx 页面文件:

site/
├── pagic.config.ts
└── README.md

当然,pagic.config.ts 一开始可以只导出一个空对象:

1
export default {};

README.md 可以是一个简单的 Markdown 文件:

1
# Hello world

你可以运行以下命令一次性创建出上面的 site 项目:

1
mkdir site && cd site && echo \"export default {};\" > pagic.config.ts && echo \"# Hello world\" > README.md

📚 运行 pagic build

接下来,我们就可以在项目中使用 pagic build 命令了。它的基本用法如下:

1
2
3
4
5
# 构建静态网站
pagic build [options]
# --watch 监听文件变动以重新构建
# --serve 启动本地服务,预览静态网站
# --port 指定本地服务的端口号

不妨试试在 site 目录下运行以下代码:

1
pagic build --watch --serve

然后用浏览器打开 http://127.0.0.1:8000/ ,看看是不是显示出 Hello world 了呢?

注意,构建结果在 dist 目录中(这里隐藏了一些次要的文件):

1
2
3
4
5
site/
|── dist # 构建结果目录
| └── index.html
├── pagic.config.ts
└── README.md

一般的 Markdown 文件会被构建为同名的 HTML 文件,但是 README.md 被构建为了 index.html,这是一种人性化的处理,方便同时在 GitHub 中和静态网站中展示首页的内容。

Pagic pagic build watch serve

后面不尝试了,因为还会出现 CDN 出错,修改本地文件或许可以构建成功,但是不太顺利。

Pagic Windows 安装

Deno Windows PowerShell irm

📝 笔记总结

未安装成功,Deno 版本 2.9.4,后续发现可能是因为 Deno 版本太高了,使用 Deno 1.34.1 再次尝试。

📖 内容来源

Pagic:Deno + React 驱动的静态网站生成器

🔧 安装 Deno

1
irm https://deno.land/install.ps1 | iex

⬆️ 安装 Pagic

安装最新版本(失败)

1
deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic/mod.ts

⚠️ 链接不存在:https://deno.land/x/pagic/mod.ts

安装指定版本(失败)

1
deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic@v1.6.3/mod.ts

⚠️ 链接存在:https://deno.land/x/pagic@v1.6.3/mod.ts

指定读写目录的方式(未尝试)

1
deno install --unstable --allow-read=/home/xcatliu/site --allow-write=/home/xcatliu/site --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic/mod.ts

❓安装错误提示一

1
2
3
4
5
PS D:\\Git> deno install --unstable --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic https://deno.land/x/pagic@v1.6.3/mod.ts
error: the following required arguments were not provided:
--global

Note: Permission flags can only be used in a global setting

Deno Windows deno install error

Deno 要求在使用权限标志时,必须指定 –global 选项。正确的命令在你的命令末尾加上 –global

  • 加上 --global,Deno 1.30+ 版本,权限标志(如 --allow-read)只能全局安装使用
  • --global
  • 去掉 --unstable,Deno 2.0+ 版本不需要

正确的命令:

1
deno install --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic --global https://deno.land/x/pagic@v1.6.3/mod.ts

🪲 安装错误提示二

1
2
3
4
5
6
7
PS D:\\Git> deno install --allow-read --allow-write --allow-net --allow-env --allow-run --name=pagic --global https://deno.land/x/pagic@v1.6.3/mod.ts
✅ Granted import access to \"cdn.pagic.org:443\".
error: Import 'https://cdn.pagic.org/i18next@19.8.1/esnext/i18next.js' failed.
0: error sending request for url (https://cdn.pagic.org/i18next@19.8.1/esnext/i18next.js): client error (Connect): invalid peer certificate: certificate not valid for name \"cdn.pagic.org\"; certificate is only valid for DnsName(\"*.cdn.myqcloud.com\"), DnsName(\"*.2144.cn\"), DnsName(\"*.2144.com\"), DnsName(\"*.4399.com\"), DnsName(\"*.5054399.com\"), DnsName(\"*.58cdn.com.cn\"), DnsName(\"*.bldimg.com\"), DnsName(\"*.cdn-go.cn\"), DnsName(\"*.cntv.qcloudcdn.com\"), DnsName(\"*.danmu.com\"), DnsName(\"*.dd.cdntips.net\"), DnsName(\"*.dd.qq.com\"), DnsName(\"*.dianping.com\"), DnsName(\"*.dl.txcdns.com\"), DnsName(\"*.dlied1.cdntips.net\"), DnsName(\"*.dpfile.com\"), DnsName(\"*.ffnews.cn\"), DnsName(\"*.file.myqcloud.com\"), DnsName(\"*.flash.2144.com\"), DnsName(\"*.flash.cn\"), DnsName(\"*.geetest.com\"), DnsName(\"*.gtimg.cn\"), DnsName(\"*.gtimg.com\"), DnsName(\"*.hls.cdn.myqcloud.com\"), DnsName(\"*.image.myqcloud.com\"), DnsName(\"*.img4399.com\"), DnsName(\"*.jsbchina.cn\"), DnsName(\"*.lof3.xyz\"), DnsName(\"*.meituan.net\"), DnsName(\"*.myapp.com\"), DnsName(\"*.mykeeta.net\"), DnsName(\"*.qcloudcdn.com\"), DnsName(\"*.qpic.cn\"), DnsName(\"*.sogoucdn.com\"), DnsName(\"*.suyinwealth.com\"), DnsName(\"*.ugdtimg.com\"), DnsName(\"*.uniqlo.cn\"), DnsName(\"*.vda.v.qcloudcdn.com\"), DnsName(\"*.video.myqcloud.com\"), DnsName(\"*.vip.cdngot.com\"), DnsName(\"*.vod-qcloud.com\"), DnsName(\"*.vod.cdn.myqcloud.com\"), DnsName(\"*.vod.myqcloud.com\"), DnsName(\"*.vod2.myqcloud.com\"), DnsName(\"*.wanyabox.com\"), DnsName(\"*.weishi.qq.com\"), DnsName(\"*.wx.qq.com\"), DnsName(\"*.zhongcheng818.com\"), DnsName(\"*.zservey.net\"), DnsName(\"cdn.myqcloud.com\"), DnsName(\"flash.cn\"), DnsName(\"nitrome.com.4399.com\"), DnsName(\"www.miniclip.com.4399pk.com\"), DnsName(\"www.tencentwm.com\"), DnsName(\"www.txfund.com\") or DnsName(\"xpdl999.aiwan4399.com\")
1: client error (Connect)
2: invalid peer certificate: certificate not valid for name \"cdn.pagic.org\"; certificate is only valid for DnsName(\"*.cdn.myqcloud.com\"), DnsName(\"*.2144.cn\"), DnsName(\"*.2144.com\"), DnsName(\"*.4399.com\"), DnsName(\"*.5054399.com\"), DnsName(\"*.58cdn.com.cn\"), DnsName(\"*.bldimg.com\"), DnsName(\"*.cdn-go.cn\"), DnsName(\"*.cntv.qcloudcdn.com\"), DnsName(\"*.danmu.com\"), DnsName(\"*.dd.cdntips.net\"), DnsName(\"*.dd.qq.com\"), DnsName(\"*.dianping.com\"), DnsName(\"*.dl.txcdns.com\"), DnsName(\"*.dlied1.cdntips.net\"), DnsName(\"*.dpfile.com\"), DnsName(\"*.ffnews.cn\"), DnsName(\"*.file.myqcloud.com\"), DnsName(\"*.flash.2144.com\"), DnsName(\"*.flash.cn\"), DnsName(\"*.geetest.com\"), DnsName(\"*.gtimg.cn\"), DnsName(\"*.gtimg.com\"), DnsName(\"*.hls.cdn.myqcloud.com\"), DnsName(\"*.image.myqcloud.com\"), DnsName(\"*.img4399.com\"), DnsName(\"*.jsbchina.cn\"), DnsName(\"*.lof3.xyz\"), DnsName(\"*.meituan.net\"), DnsName(\"*.myapp.com\"), DnsName(\"*.mykeeta.net\"), DnsName(\"*.qcloudcdn.com\"), DnsName(\"*.qpic.cn\"), DnsName(\"*.sogoucdn.com\"), DnsName(\"*.suyinwealth.com\"), DnsName(\"*.ugdtimg.com\"), DnsName(\"*.uniqlo.cn\"), DnsName(\"*.vda.v.qcloudcdn.com\"), DnsName(\"*.video.myqcloud.com\"), DnsName(\"*.vip.cdngot.com\"), DnsName(\"*.vod-qcloud.com\"), DnsName(\"*.vod.cdn.myqcloud.com\"), DnsName(\"*.vod.myqcloud.com\"), DnsName(\"*.vod2.myqcloud.com\"), DnsName(\"*.wanyabox.com\"), DnsName(\"*.weishi.qq.com\"), DnsName(\"*.wx.qq.com\"), DnsName(\"*.zhongcheng818.com\"), DnsName(\"*.zservey.net\"), DnsName(\"cdn.myqcloud.com\"), DnsName(\"flash.cn\"), DnsName(\"nitrome.com.4399.com\"), DnsName(\"www.miniclip.com.4399pk.com\"), DnsName(\"www.tencentwm.com\"), DnsName(\"www.txfund.com\") or DnsName(\"xpdl999.aiwan4399.com\")
at https://deno.land/x/pagic@v1.6.3/src/plugins/i18n.tsx:4:21

Deno Windows deno install error

cdn.pagic.org DNS 被污染,解析到腾讯云 CDN 节点,但该节点证书并不是 cdn.pagic.org 的,出现证书域名不匹配,Deno HTTPS 校验直接拒绝。

🌟 待续……

⚡ 解决不掉了。😅

🧩 验证安装

安装后,确保 ~/.deno/bin 在你的系统 PATH 中,然后测试:

pagic --version
``

Deno Windows 安装

Deno Windows PowerShell irm

📝 笔记总结

PowerShell 脚本安装最方便。

1
2
irm https://deno.land/install.ps1 | iex
deno --version

📖 内容来源

Deno 是一个由 Node.js 的原始作者 Ryan Dahl 创建的 JavaScript、TypeScript 和 WebAssembly 运行时。你可以把它看作是 Node.js 的“进化版”,旨在解决 Node.js 早期设计中的一些遗憾,为现代 Web 开发提供一个更安全、更高效的开发环境

在 Windows 上安装 Deno 非常简单,有多种方法可供选择。官方推荐使用 PowerShell 脚本,因为它能提供更快的启动速度。

🔧 使用 PowerShell 脚本安装(推荐)

这是最快捷的官方安装方式。以管理员身份打开 PowerShell 并运行以下命令:

1
irm https://deno.land/install.ps1 | iex

这行代码的意思是从网上下载脚本并立即运行。

1
irm https://某个网站/脚本.ps1 | iex

这非常危险,因为你不知道脚本里写了什么,它可能会删除你的文件、窃取你的信息。除非你 100% 信任来源,并且仔细看过脚本内容,否则绝对不要执行这类命令。

执行后,Deno 会默认安装到 %USERPROFILE%\\.deno\\bin\\deno.exe,安装程序通常会自动将此路径添加到系统 PATH 环境变量中。

安装完成后,打开一个新的终端窗口,运行以下命令验证是否安装成功:

1
deno --version

如果能看到版本信息,就说明安装成功了。

📦 其他安装方式

如果你更习惯使用包管理器,这些也是不错的选择:

包管理器 命令
Winget winget install DenoLand.Deno
Scoop scoop install deno
Chocolatey choco install deno
npm npm install -g deno(启动性能略逊于官方脚本)

🖱️ 手动安装与系统要求

你也可以选择从 GitHub 的发布页面下载对应架构的 .zip 压缩包,解压后将 deno.exe 放在一个你方便管理的目录,并手动将其添加到系统 PATH 环境变量中。

系统要求:请确保你的 Windows 系统是 Windows 10 版本 1709 或 Windows Server 2016 版本 1709 及更新的版本。

⬆️ 更新 Deno

当你需要更新到最新版本时,只需在终端中运行deno upgrade命令即可。

PicGo GitHub 图床搭建

PicGo 2.3.0 GitHub Config

📝 笔记总结

以下可以不用看,我已经卸载 PicGo。我现在使用的是直接保存图片,上传到 GitHub 仓库,然后通过链接地址引用。

例如:

https://cdn.jsdelivr.net/gh/用户名/仓库名@分支名/文件夹/图片名

或:

https://raw.githubusercontent.com/用户名/仓库名/分支名/图片名

之前的文章:GitHub raw vs cdn

当然也可以使用 PicGo 进行 GitHub 图床设置。

📖 内容来源

使用 PicGo + GitHub 图床,是一种很流行的免费方案,特别适合写博客、记笔记时管理图片。本质上是让 PicGo 这个工具,把你本地的图片自动上传到 GitHub 仓库,并生成一个在线的图片链接。

🔧 创建 GitHub 仓库与 Token

首先需要在 GitHub 上创建一个用来存放图片的“图床仓库”,并生成一个访问令牌 (Token),这是 PicGo 上传图片的“钥匙”。

1. 创建公开仓库

在 GitHub 点击右上角 + 号,选择 New repository。注意:仓库的可见性必须选 Public,否则图片无法被公开访问。

2. 生成 Token

点击头像 → Settings → 左下角 Developer settings → Personal access tokens → Tokens (classic) → Generate new token (classic)。
* Note (名称):随便填一个,比如 PicGo-image。
* Expiration (过期时间):建议选 No expiration(永不过期),不然过期后需要重新生成并更新配置。
* Select scopes (权限):务必勾选 repo 这个选项,这会赋予 PicGo 读写你仓库的权限。
* 点击生成后,立即复制并妥善保存这个 Token(它只显示一次)。

⚙️ 配置 PicGo

下载安装 PicGo 后,在“图床设置”里找到 GitHub 进行配置。

配置项 填写内容 备注
设定仓库名 你的GitHub用户名/仓库名 例如:zhangsan/my-image-bed
设定分支名 main 2020年后GitHub新仓库默认分支为main
设定Token 粘贴刚才保存的Token
指定存储路径 img/ (选填) 图片将上传到仓库下的img文件夹,不填则传至根目录
设定自定义域名 https://cdn.jsdelivr.net/gh/你的用户名/仓库名@main 这是最关键的一步,使用jsDelivr CDN加速访问,国内访问更快

小提示:如果上传成功后图片无法显示,大概率是“自定义域名”配置有误。可以尝试将域名改为 https://raw.githubusercontent.com/你的用户名/仓库名/main 测试。

✍️ 与 Typora 集成(可选)

如果你用 Typora 写 Markdown,可以配置它调用 PicGo 实现“粘贴即上传”:

  1. 打开 Typora,进入 文件 → 偏好设置 → 图像。
  2. 插入图片时:选择 上传图片。
  3. 上传服务:选择 PicGo (app),并指定你 PicGo 的安装路径。
  4. 点击“验证图片上传选项”,成功后就可以在 Typora 里愉快地粘贴图片了。

⚠️ 常见问题与排错

  1. Token 过期:这是最容易被忽略的问题。如果之前能用,突然有一天上传失败,可以先检查一下你的 GitHub Token 是否已过期。建议生成时直接选 No expiration。
  2. 端口占用:PicGo 默认监听端口是 36677,如果同时开启了多个 PicGo 进程或其他加速工具(如 Steam++),可能会冲突,导致上传失败。
  3. 网络与 Hosts:由于 GitHub 服务器在国外,网络波动可能影响访问。如果上传很慢或失败,可以尝试修改 Hosts 文件,将 raw.githubusercontent.com 等域名指向可用 IP。

Valaxy 部署 GitHub Pages

Valaxy Deploy to GitHub Pages

📖 内容来源

✨ VALAXY
下一代静态博客框架
简洁、强大、高性能。遇见你一直想要的现代博客框架。

⚙️ 自带的 gh-pages.yml

.github/workflows/gh-pages.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# gh-pages.yml

name: GitHub Pages

on:
push:
branches:
# The branch where the project source code resides
# 项目源代码所在的分支
- main
- master
- valaxy

jobs:
build:
runs-on: ${{ matrix.os }}

strategy:
matrix:
node-version: [lts/*]
os: [ubuntu-latest]
fail-fast: false

steps:
- uses: actions/checkout@v2

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/

- name: 📦 Install Dependencies
run: npm i

- name: 🌌 Build Valaxy Blog
run: npm run build

- name: 🪤 Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
force_orphan: true

在使用 pnpm create valaxy 创建模版项目时,已内置文件 .github/workflows/gh-pages.yml 以实现 GitHub Actions 的自动部署工作流。

选择 Github Repo,打开 Settings -> Action -> General -> Workflow permissions,选择 read and write permissions。
上传至 GitHub Repo,打开 Settings -> Pages,选择 gh-pages 分支。
gh-pages 已由 .github/workflows/gh-pages.yml 自动部署。

注意修改 gh-pages.yml 中的 on.push.branches 为你源代码所在的分支,默认为 main。

❌ Error: Action failed

Error: Action failed with "The process ‘/usr/bin/git’ failed with exit code 128"

Valaxy Error Action failed

不知道为什么在同一个仓库使用 github_token: ${{ secrets.GITHUB_TOKEN }} 还会权限不够。

✅ 解决方案

这个错误是因为 GitHub Actions 的默认 token 权限不足,无法推送到 gh-pages 分支。以下是几种解决方案:

1:使用个人访问令牌

  • 生成 Personal Access Token

    • 前往 GitHub Settings → Developer settings → Personal access tokens → Tokens (classic)
    • 生成新 token,勾选 repo 权限
    • 复制生成的 token
  • 在仓库中设置 Secret

    • 前往仓库 Settings → Secrets and variables → Actions
    • 添加新的 secret,命名为 PERSONAL_TOKEN,值粘贴你的 token
  • 修改 workflow 文件

1
2
3
4
5
6
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
publish_dir: ./dist
# 其他配置...

2:使用 GitHub 自带的 GITHUB_TOKEN

修改 workflow 文件,添加写入权限:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
name: Deploy

permissions:
contents: write

jobs:
deploy:
runs-on: ubuntu-latest
steps:
# ... 其他步骤

- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist

⚠️ 补充:关于 Node 警告的解决方案

在 workflow 中添加环境变量:

1
2
env:
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true

或者在部署步骤中指定:

1
2
3
4
5
6
7
8
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
# 在 env 中设置
env:
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true

如果以上方案都不行,请检查:

  1. 仓库是否属于组织?可能需要调整权限设置
  2. 是否启用了分支保护规则?需要临时禁用或配置允许强制推送

📝 修改后的 gh-pages.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# valaxy 自带 gh-pages.yml
# valaxy.site/zh/guide/deploy

name: GitHub Pages

on:
push:
branches:
# The branch where the project source code resides
# 项目源代码所在的分支
- main
- master
- valaxy

# 20260804
# 增加权限
permissions:
contents: write
pages: write
id-token: write

jobs:
build:
runs-on: ${{ matrix.os }}

strategy:
matrix:
node-version: [lts/*]
os: [ubuntu-latest]
fail-fast: false

steps:
- uses: actions/checkout@v2

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
registry-url: https://registry.npmjs.org/

- name: 📦 Install Dependencies
run: npm i

- name: 🌌 Build Valaxy Blog
run: npm run build

- name: 🪤 Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
force_orphan: true

Valaxy build lts ubuntu-lastest

hexo-theme-next 添加 Giscus

hexo-theme-next add Giscus

内容来源

在 NexT 主题中为 Hexo 博客添加 Giscus 评论系统,主要有这几个步骤:准备好 GitHub 仓库、安装 NexT 专用的 Giscus 插件,然后在主题配置文件中填入从 Giscus 官网获取的关键信息。

📝 第一步:准备工作

在开始配置前,需要先完成三项必要的 GitHub 设置,这些是所有后续操作的基础:

  1. 创建一个公开的 GitHub 仓库:Giscus 要求评论数据存放在公开仓库中。你可以用现有的博客仓库,或者为评论单独新建一个仓库。

  2. 启用仓库的 Discussions 功能:进入仓库的 Settings -> General,在 Features 部分找到并勾选 Discussions。

  3. 安装 Giscus App:访问 GitHub Apps - giscus,点击安装,并选择你刚刚准备好(已公开且开启 Discussions)的仓库。

Giscus GitHub Apps giscus

⚙️ 第二步:安装与配置

1. 安装 NexT 专用插件

由于 NexT 主题本身不直接支持 Giscus,需要安装一个社区插件来集成。在博客根目录下执行以下命令:

1
npm install hexo-next-giscus --save

这个插件会负责在页面中注入 Giscus 所需的代码,并让配置能和 NexT 主题很好地结合起来。

2. 获取配置参数

安装完插件后,访问 Giscus 官网,它会引导你完成配置并生成一段 <script> 代码。

主要需要填写的几个关键信息是:

  • 仓库:你的GitHub用户名/评论仓库名
  • 页面 ↔️ discussion 映射关系:对于 Hexo 博客,通常推荐选择 pathname,这样每篇文章的评论会和其 URL 路径绑定。
  • Discussion 分类:选择一个已有的分类,如 General 或 Announcements。建议选择 Announcements,这样新的 discussion 只能由维护者或 Giscus 创建,可以避免混乱。

Giscus giscus.app/zh-CN

配置好后,在页面最下方复制生成的代码,我们只需要从中提取几个以 data- 开头的参数值。

3. 将参数填入 NexT 配置文件

打开主题配置文件 themes/next/_config.yml(或者根目录的 _config.next.yml),在文件末尾添加或修改以下 giscus 配置块。

将上一步从 Giscus 官网复制下来的参数(如 data-repo, data-repo-id 等)对应的值填写进去,注意不要保留 data- 前缀和引号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 在 themes/next/_config.yml 文件末尾添加
giscus:
enable: true
# 用户名/仓库名,对应 data-repo
repo: 用户名/仓库名
# 仓库 ID,对应 data-repo-id
repo_id: 仓库 ID
# 选择的分类,对应 data-category
category: Announcements
# 分类ID,对应 data-category-id
category_id: 你的分类 ID
# 推荐用页面路径匹配,对应 data-mapping
mapping: pathname
# 开启表情回应
reactions_enabled: 1
emit_metadata: 0
# 评论框位置
input_position: bottom
# 建议使用自动适配主题
theme: preferred_color_scheme
# 语言设置
lang: zh-CN
# 懒加载,提升性能
loading: lazy

🚀 第三步:部署与测试

最后,重新生成并部署你的博客,就可以看到效果了:

1
hexo clean && hexo generate && hexo deploy

或者直接使用:

1
hexo server

部署成功后,打开任意一篇文章滑到底部,就能看到 Giscus 评论区了。如果页面没有显示,可以检查一下博客是否已经成功部署到线上。

Giscus shenjuexiao.com

Typecho-CF 安装部署

Typecho-CF Installation & Deployment

📄 内容来源

基于 Typecho 完整重写的现代博客系统,运行在 Astro + Cloudflare Workers + D1 之上。保留 Typecho 数据库表结构,支持从 PHP 版 Typecho 直接迁移数据。

⚙️ 前置要求

  • Node.js 18+
  • pnpm (npm install -g pnpm)
  • Wrangler CLI (npm install -g wrangler)
  • Cloudflare 帐号

💻 本地开发

1
2
3
4
5
6
7
8
9
# 克隆并安装依赖
git clone https://github.com/eslizn/typecho-cf.git
cd typecho-cf
pnpm install

# 启动开发服务器(D1 + R2 由 wrangler 自动模拟)
pnpm run dev
# 访问 http://localhost:4321
# 首次访问自动跳转安装向导

Typecho-CF pnpm run dev

❌ Error: Failed to load url path

Typecho-CF_Failed_to_Load_URL_Path

搞了半天弄不好,暂时放弃了。

记录一下,往后再折腾。

0%