125 lines
4.5 KiB
Makefile
125 lines
4.5 KiB
Makefile
# 构建脚本(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
|