Files
geek b3f44d235a fix: 修复博客图片加载失败(掘金防盗链)
- 将《Git使用教学》中的掘金外链图片下载至 source/images/ 并替换为站内路径
- _config.yml 注入 no-referrer meta 作为兜底方案
- 新增 tools/download-juejin-images.js 批量下载/替换脚本
2026-07-08 21:52:22 +08:00

115 lines
2.5 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# 切换到博客根目录,确保从任何位置执行都能正常工作
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT_DIR"
# 允许用环境变量覆盖默认值
PORT="${PORT:-4000}"
HOST="${HOST:-127.0.0.1}"
BRANCH="${BRANCH:-main}"
usage() {
cat <<'EOF'
博客脚本用法:
./tools/blog.sh clean # 清理缓存和 public 目录
./tools/blog.sh build # 生成静态文件
./tools/blog.sh server # 启动本地服务
./tools/blog.sh preview # 清理 + 生成 + 启动预览
./tools/blog.sh deploy # 清理 + 生成 + git 提交 + 推送
可选环境变量:
PORT=4000 预览端口
HOST=127.0.0.1 监听地址
BRANCH=main 推送分支
EOF
}
hexo_run() {
# 把参数原样传给 hexo
npx hexo "$@"
}
add_blog_files() {
# 只暂存博客相关文件,避免误把 node_modules、public 或其他杂项提交进去
local paths=(
"_config.yml"
"_config.butterfly.yml"
"_config.landscape.yml"
"package.json"
"package-lock.json"
"scaffolds"
"source"
"themes"
"tools"
)
local existing=()
local path
for path in "${paths[@]}"; do
if [[ -e "$path" ]]; then
existing+=("$path")
fi
done
if [[ ${#existing[@]} -eq 0 ]]; then
echo '[deploy] 没有找到可暂存的博客文件' >&2
exit 1
fi
git add -- "${existing[@]}"
}
case "${1:-help}" in
clean)
echo '[clean] 清理生成缓存'
hexo_run clean
;;
build)
echo '[build] 生成静态文件'
hexo_run generate
;;
server)
echo "[server] 启动预览服务:http://${HOST}:${PORT}"
hexo_run server -i "$HOST" -p "$PORT"
;;
preview)
echo '[preview] 清理并生成静态文件'
hexo_run clean
hexo_run generate
echo "[preview] 启动预览服务:http://${HOST}:${PORT}"
hexo_run server -i "$HOST" -p "$PORT"
;;
deploy)
echo '[deploy] 清理并生成静态文件'
hexo_run clean
hexo_run generate
echo '[deploy] 只暂存博客相关改动'
add_blog_files
# 没有变更就不提交也不推送
if git diff --cached --quiet; then
echo '[deploy] 没有可提交的改动,跳过 commit/push'
exit 0
fi
COMMIT_MSG="chore: deploy blog $(date '+%F %T')"
echo "[deploy] 提交改动:${COMMIT_MSG}"
git commit -m "$COMMIT_MSG"
echo "[deploy] 推送到 origin/${BRANCH}"
git push origin "$BRANCH"
;;
help|-h|--help)
usage
;;
*)
echo "未知命令: $1" >&2
usage
exit 1
;;
esac