This commit is contained in:
ChuXun
2025-10-19 20:55:27 +08:00
parent e879ccefb3
commit 53f9554f38
99 changed files with 22308 additions and 2 deletions

124
justfile Normal file
View File

@@ -0,0 +1,124 @@
# 构建脚本crx
# 设置默认shell为bash
set shell := ["bash", "-c"]
# 默认任务:显示帮助
default:
@just --list
# 安装依赖
install:
npm install
npm install -g crx3
# 清理构建目录
clean:
rm -rf build dist web-ext-artifacts
rm -f *.crx *.zip private-key.pem
# 验证manifest文件
validate:
@echo "验证 manifest.json..."
@node -e "const manifest = require('./manifest.json'); console.log('Extension name:', manifest.name); console.log('Version:', manifest.version); if (!manifest.manifest_version || !manifest.name || !manifest.version) { throw new Error('Invalid manifest.json'); }"
# 准备构建目录
prepare: validate
@echo "准备构建目录..."
mkdir -p build
cp -r ./{catch-script,css,img,js,lib,_locales} build/
cp -r ./*.{js,html} build/
@echo "✅ 文件复制完成"
# 检查图标文件
check-icons:
@echo "检查图标文件..."
@if [ ! -d "img" ]; then echo "❌ img/ 目录不存在"; exit 1; fi
@if [ ! -f "img/icon.png" ]; then echo "❌ 缺少图标: img/icon.png"; exit 1; fi
@if [ ! -f "img/icon128.png" ]; then echo "❌ 缺少图标: img/icon128.png"; exit 1; fi
@echo "✅ 所有图标文件存在"
# 生成私钥
generate-key:
@echo "生成私钥..."
@if [ ! -f "private-key.pem" ]; then \
openssl genrsa -out private-key.pem 2048; \
echo "✅ 私钥已生成"; \
else \
echo "✅ 私钥已存在"; \
fi
# 构建ZIP文件
build-zip: prepare check-icons
@echo "构建 ZIP 文件..."
@cd build && \
VERSION=$(node -p "require('./manifest.json').version") && \
zip -r "../cat-catch${VERSION}.zip" . && \
echo "✅ ZIP 文件已生成: cat-catch${VERSION}.zip"
# 构建CRX文件
build-crx: prepare check-icons generate-key
@echo "构建 CRX 文件..."
@VERSION=$(node -p "require('./manifest.json').version") && \
crx3 -p private-key.pem -o "cat-catch${VERSION}.crx" build/ && \
echo "✅ CRX 文件已生成: cat-catch${VERSION}.crx"
# 快速构建仅ZIP
quick: build-zip
@echo "🚀 快速构建完成!"
# 完整构建CRX + ZIP
build: build-crx build-zip
@echo "🎉 构建完成!"
@ls -la *.crx *.zip 2>/dev/null || true
# 开发模式 - 自动重载
dev-watch: prepare
@echo "🔄 开发模式 - 自动构建"
@echo "================================"
@echo "监听文件变化并自动重新构建到 build/ 目录"
@echo "请在Chrome中加载 build/ 目录,然后刷新扩展"
@echo ""
@if command -v inotifywait >/dev/null 2>&1; then \
while true; do \
inotifywait -r -e modify,create,delete src/ && \
echo "🔄 检测到文件变化,重新构建..." && \
just prepare; \
done \
else \
echo "❌ 需要安装 inotify-tools: sudo apt install inotify-tools"; \
fi
# 检查扩展
lint:
@echo "检查扩展..."
@echo "验证 manifest.json 格式..."
@node -e "const manifest = require('./manifest.json'); console.log('✅ Manifest 格式正确'); console.log('扩展名:', manifest.name); console.log('版本:', manifest.version);"
@echo "检查必需文件..."
@if [ -f "popup.html" ]; then echo "✅ popup.html 存在"; else echo "❌ popup.html 缺失"; fi
@if [ -f "options.html" ]; then echo "✅ options.html 存在"; else echo "❌ options.html 缺失"; fi
@if [ -f "js/background.js" ]; then echo "✅ background.js 存在"; else echo "❌ background.js 缺失"; fi
@if [ -f "js/content-script.js" ]; then echo "✅ content.js 存在"; else echo "❌ content.js 缺失"; fi
@if [ -f "js/popup.js" ]; then echo "✅ popup.js 存在"; else echo "❌ popup.js 缺失"; fi
@if [ -f "js/options.js" ]; then echo "✅ options.js 存在"; else echo "❌ options.js 缺失"; fi
@echo "✅ Chrome扩展检查完成"
# 显示版本信息
version:
@node -p "'当前版本: ' + require('./manifest.json').version"
# 显示项目状态
status:
@echo "📊 项目状态:"
@node -p "'版本: ' + require('./manifest.json').version"
@echo "图标状态:"
@if [ -f "img/icon.png" ]; then echo " ✅ img/icon.png"; else echo " ❌ img/icon.png"; fi
@if [ -f "img/icon128.png" ]; then echo " ✅ img/icon128.png"; else echo " ❌ img/icon128.png"; fi
@echo "构建文件:"
@ls -la *.crx *.zip 2>/dev/null || echo " 无构建文件"
# 完整的发布流程
release: clean install validate build
@echo "🎉 发布包已准备完成!"
@echo "文件列表:"
@ls -la *.crx *.zip