b3f44d235a
- 将《Git使用教学》中的掘金外链图片下载至 source/images/ 并替换为站内路径 - _config.yml 注入 no-referrer meta 作为兜底方案 - 新增 tools/download-juejin-images.js 批量下载/替换脚本
123 lines
3.2 KiB
PowerShell
123 lines
3.2 KiB
PowerShell
param(
|
|
# 要执行的命令:help / clean / build / server / preview / deploy
|
|
[Parameter(Position=0)]
|
|
[ValidateSet('help','clean','build','server','preview','deploy')]
|
|
[string]$Command = 'help'
|
|
)
|
|
|
|
# 只要出现错误就立即停止,避免后续命令继续执行
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
# 以脚本所在目录为基准,切回博客根目录
|
|
$root = Split-Path -Parent $PSScriptRoot
|
|
Set-Location $root
|
|
|
|
# 环境变量可覆盖默认值
|
|
$port = if ($env:PORT) { $env:PORT } else { '4000' }
|
|
$hostName = if ($env:HOST) { $env:HOST } else { '127.0.0.1' }
|
|
$branch = if ($env:BRANCH) { $env:BRANCH } else { 'main' }
|
|
|
|
function Show-Usage {
|
|
@"
|
|
博客脚本用法:
|
|
./tools/blog.ps1 clean # 清理缓存和 public 目录
|
|
./tools/blog.ps1 build # 生成静态文件
|
|
./tools/blog.ps1 server # 启动本地服务
|
|
./tools/blog.ps1 preview # 清理 + 生成 + 启动预览
|
|
./tools/blog.ps1 deploy # 清理 + 生成 + git 提交 + 推送
|
|
|
|
可选环境变量:
|
|
PORT=4000 预览端口
|
|
HOST=127.0.0.1 监听地址
|
|
BRANCH=main 推送分支
|
|
"@
|
|
}
|
|
|
|
function Invoke-Hexo {
|
|
# 把后续参数原样转发给 hexo
|
|
param([Parameter(ValueFromRemainingArguments = $true)][string[]]$HexoArgs)
|
|
|
|
& npx hexo @HexoArgs
|
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
}
|
|
|
|
function Add-BlogFiles {
|
|
# 只暂存博客相关文件,避免误把 node_modules、public 或其他杂项提交进去
|
|
$paths = @(
|
|
'_config.yml',
|
|
'_config.butterfly.yml',
|
|
'_config.landscape.yml',
|
|
'package.json',
|
|
'package-lock.json',
|
|
'scaffolds',
|
|
'source',
|
|
'themes',
|
|
'tools'
|
|
)
|
|
|
|
$existingPaths = @()
|
|
foreach ($path in $paths) {
|
|
if (Test-Path $path) {
|
|
$existingPaths += $path
|
|
}
|
|
}
|
|
|
|
if ($existingPaths.Count -eq 0) {
|
|
Write-Host '[deploy] 没有找到可暂存的博客文件'
|
|
exit 1
|
|
}
|
|
|
|
git add -- @existingPaths
|
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
}
|
|
|
|
switch ($Command) {
|
|
'clean' {
|
|
Write-Host '[clean] 清理生成缓存'
|
|
Invoke-Hexo clean
|
|
}
|
|
'build' {
|
|
Write-Host '[build] 生成静态文件'
|
|
Invoke-Hexo generate
|
|
}
|
|
'server' {
|
|
Write-Host "[server] 启动预览服务:http://${hostName}:${port}"
|
|
Invoke-Hexo server -i $hostName -p $port
|
|
}
|
|
'preview' {
|
|
Write-Host '[preview] 清理并生成静态文件'
|
|
Invoke-Hexo clean
|
|
Invoke-Hexo generate
|
|
|
|
Write-Host "[preview] 启动预览服务:http://${hostName}:${port}"
|
|
Invoke-Hexo server -i $hostName -p $port
|
|
}
|
|
'deploy' {
|
|
Write-Host '[deploy] 清理并生成静态文件'
|
|
Invoke-Hexo clean
|
|
Invoke-Hexo generate
|
|
|
|
Write-Host '[deploy] 只暂存博客相关改动'
|
|
Add-BlogFiles
|
|
|
|
# 没有变更就不提交也不推送
|
|
git diff --cached --quiet
|
|
if ($LASTEXITCODE -eq 0) {
|
|
Write-Host '[deploy] 没有可提交的改动,跳过 commit/push'
|
|
exit 0
|
|
}
|
|
|
|
$timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
|
|
Write-Host "[deploy] 提交改动:chore: deploy blog $timestamp"
|
|
git commit -m "chore: deploy blog $timestamp"
|
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
|
|
Write-Host "[deploy] 推送到 origin/$branch"
|
|
git push origin $branch
|
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
}
|
|
default {
|
|
Show-Usage
|
|
}
|
|
}
|