diff --git a/jd_indeps.sh b/jd_indeps.sh index 1da1f9a..3afb119 100644 --- a/jd_indeps.sh +++ b/jd_indeps.sh @@ -1,64 +1,116 @@ #!/usr/bin/env bash -#依赖安装 -#0 8 5 5 * jd_indeps.sh -#new Env('依赖安装'); -#updatedate:20240903 -# +# 依赖安装脚本 +# 0 8 5 5 * jd_indeps.sh +# new Env('依赖安装'); +# updatedate:20240903 -DIR="$( pwd )" -dir_root=/ql -dir_repo=$dir_root/repo -dir_deps=$dir_root/deps +set -euo pipefail # 启用严格错误检查 -if [[ $AUTOCFG == 'true' ]];then - if [[ -z "$(echo "$DIR"|grep 'main')" ]];then - dir_code=$dir_log/6dylan6_jdpro_jd_sharecode - repo='6dylan6_jdpro' - else - dir_code=$dir_log/6dylan6_jdpro_main_jd_sharecode - repo='6dylan6_jdpro_main' - fi - [[ -d $dir_root/data ]] && dir_data=$dir_root/data - [[ -d $dir_data/repo ]] && dir_repo=$dir_data/repo - [[ -d $dir_data/deps ]] && dir_deps=$dir_data/deps - cp $dir_repo/${repo}/sendNotify.js $dir_deps/ > /dev/null 2>&1 - echo -e "\n已配置sendNotify.js文件到deps目录下,再次执行订阅生效\n" +# 动态获取青龙根目录 +if [ -d "/ql/data" ]; then + dir_root="/ql/data" else - echo -e "\n如需自动配置sendNotify.js文件到desp目录下,请配置变量AUTOCFG='true'\n" + dir_root="/ql" fi -npm_ver=`pnpm -v|awk -F. '{print $1}'` -if [[ $npm_ver -ge 7 ]];then +dir_repo="$dir_root/repo" +dir_deps="$dir_root/deps" +dir_log="$dir_root/log" + +# 自动配置 sendNotify.js +if [[ "${AUTOCFG:-}" == 'true' ]]; then + if [[ -z "$(pwd | grep 'main')" ]]; then + dir_code="$dir_log/shufflewzc_faker3_jd_sharecode" + repo='shufflewzc_faker3' + else + dir_code="$dir_log/shufflewzc_faker3_main_jd_sharecode" + repo='shufflewzc_faker3_main' + fi + + [[ -d "$dir_root/data" ]] && dir_data="$dir_root/data" + [[ -d "$dir_data/repo" ]] && dir_repo="$dir_data/repo" + [[ -d "$dir_data/deps" ]] && dir_deps="$dir_data/deps" + + if [ -f "$dir_repo/${repo}/sendNotify.js" ]; then + cp "$dir_repo/${repo}/sendNotify.js" "$dir_deps/" + echo -e "\n已配置 sendNotify.js 到 deps 目录\n" + else + echo -e "\n错误:未找到 sendNotify.js 文件!\n" + exit 1 + fi +else + echo -e "\n提示:如需自动配置 sendNotify.js,请设置变量 AUTOCFG='true'\n" +fi + +# 检查权限 +if [ "$EUID" -ne 0 ]; then + SUDO="sudo" +else + SUDO="" +fi + +# 配置 pnpm 镜像 +pnpm config set registry https://registry.npmmirror.com + +# 处理 pnpm v7+ 环境变量 +npm_ver=$(pnpm -v | awk -F. '{print $1}') +if [[ $npm_ver -ge 7 ]]; then export PNPM_HOME="/root/.local/share/pnpm" export PATH="$PNPM_HOME:$PATH" fi -echo -e "安装本库所需依赖,不一定一次全部安装成功,完成请检查\n" -echo -e "开始安装............\n" +echo -e "\n开始检查依赖列表并安装依赖...\n" -#apk add g++ make pixman-dev pango-dev cairo-dev pkgconf --no-cache -#apk add g++ make --no-cache -pnpm config set registry https://registry.npmmirror.com -pnpm install -g -pnpm i -g tough-cookie -pnpm i -g ds@2.0.2 -pnpm i -g png-js@1.0.0 -pnpm i -g date-fns@3.6.0 -pnpm i -g axios@1.7.4 -pnpm i -g crypto-js@4.2.0 -# pnpm install -g ts-md5@1.3.1 -# pnpm install -g tslib@2.6.3 -# pnpm install -g @types/node@22.4.0 -pnpm i -g request@2.88.2 -pnpm i -g jsdom@24.1.1 -pnpm i -g moment@2.30.1 -pnpm i -g cheerio@1.0.0 -pnpm i -g tunnel -# pnpm install -g tough-cookie@4.1.4 -pnpm i -g https-proxy-agent@7.0.5 -pip3 install -i https://pypi.doubanio.com/simple/ jieba -pip3 install -i https://pypi.doubanio.com/simple/ requests -rm -rf /usr/local/pnpm-global/5/node_modules/.pnpm/canvas* -rm -rf /root/.local/share/pnpm/global/5/.pnpm/canvas* -pnpm i -g sharp@0.32.0 -echo -e "\n所需依赖安装完成,请检查有没有报错,可尝试再次运行" +# 目标依赖列表 +declare -A target_deps=( + ["tough-cookie"]="4.1.4" + ["ds"]="2.0.2" + ["png-js"]="1.0.0" + ["date-fns"]="3.6.0" + ["axios"]="1.7.4" + ["crypto-js"]="4.2.0" + ["request"]="2.88.2" + ["jsdom"]="24.1.1" + ["moment"]="2.30.1" + ["cheerio"]="1.0.0" + ["tunnel"]="latest" + ["https-proxy-agent"]="7.0.5" + ["sharp"]="0.32.0" + ["qs"]="6.11.0" +) + +# 获取已安装的全局依赖 +installed_deps=$(pnpm list -g --depth=0 --parseable 2>/dev/null | awk -F@ '{print $1, $2}') + +# 安装或更新依赖 +for dep in "${!target_deps[@]}"; do + target_version="${target_deps[$dep]}" + installed_version=$(echo "$installed_deps" | awk -v dep="$dep" '$1 == dep {print $2}') + + if [[ -z "$installed_version" ]]; then + echo "正在安装 $dep@$target_version ..." + pnpm i -g "$dep@$target_version" || { echo "安装 $dep@$target_version 失败!"; exit 1; } + elif [[ "$installed_version" != "$target_version" ]]; then + echo "正在更新 $dep ($installed_version -> $target_version) ..." + pnpm i -g "$dep@$target_version" || { echo "更新 $dep@$target_version 失败!"; exit 1; } + else + echo "$dep@$installed_version 已是最新版本,跳过安装。" + fi +done + +# 安装 Python 依赖 +pip3 install -i https://pypi.doubanio.com/simple/ --upgrade jieba requests + +# 清理 canvas 冲突文件 +canvas_paths=( + "/usr/local/pnpm-global/5/node_modules/.pnpm/canvas*" + "/root/.local/share/pnpm/global/5/.pnpm/canvas*" +) + +for path in "${canvas_paths[@]}"; do + if [ -d "$path" ]; then + rm -rf "$path" + fi +done + +echo -e "\n依赖检查与安装完成!请检查是否有报错。\n" \ No newline at end of file