diff --git a/README.md b/README.md index e0480dc..270a0dc 100644 --- a/README.md +++ b/README.md @@ -161,10 +161,10 @@ In addition, double-click the title bar to switch to full-screen mode. For Mac u # Install pnpm install -g pake-cli -# Basic usage +# Basic usage (auto-fetch website icon) pake https://weekly.tw93.fun --name Weekly -# Common options: --name app name, --icon icon, --width/--height window size, --hide-title-bar macOS immersive +# Common options: --name app name, --icon custom icon, --width/--height window size, --hide-title-bar macOS immersive pake https://weekly.tw93.fun --name Weekly --icon https://cdn.tw93.fun/pake/weekly.icns --hide-title-bar ``` diff --git a/README_CN.md b/README_CN.md index 34b2ae0..3509806 100644 --- a/README_CN.md +++ b/README_CN.md @@ -162,10 +162,10 @@ # 安装 pnpm install -g pake-cli -# 基础使用 +# 基础使用(自动获取网站图标) pake https://weekly.tw93.fun --name Weekly -# 常用参数:--name 应用名称,--icon 图标,--width/--height 窗口尺寸,--hide-title-bar macOS沉浸式 +# 常用参数:--name 应用名称,--icon 自定义图标,--width/--height 窗口尺寸,--hide-title-bar macOS沉浸式 pake https://weekly.tw93.fun --name Weekly --icon https://cdn.tw93.fun/pake/weekly.icns --hide-title-bar ``` diff --git a/README_JP.md b/README_JP.md index ebe878a..a366a75 100644 --- a/README_JP.md +++ b/README_JP.md @@ -161,10 +161,10 @@ # インストール pnpm install -g pake-cli -# 基本使用 +# 基本使用(ウェブサイトのアイコンを自動取得) pake https://weekly.tw93.fun --name Weekly -# よく使うパラメータ:--name アプリ名、--icon アイコン、--width/--height ウィンドウサイズ、--hide-title-bar macOS没入型 +# よく使うパラメータ:--name アプリ名、--icon カスタムアイコン、--width/--height ウィンドウサイズ、--hide-title-bar macOS没入型 pake https://weekly.tw93.fun --name Weekly --icon https://cdn.tw93.fun/pake/weekly.icns --hide-title-bar ``` diff --git a/bin/options/icon.ts b/bin/options/icon.ts index 36a6d92..953d33e 100644 --- a/bin/options/icon.ts +++ b/bin/options/icon.ts @@ -20,14 +20,7 @@ type PlatformIconConfig = { }; const ICON_CONFIG = { minFileSize: 100, - supportedFormats: [ - 'png', - 'ico', - 'jpeg', - 'jpg', - 'webp', - 'icns', - ] as const, + supportedFormats: ['png', 'ico', 'jpeg', 'jpg', 'webp', 'icns'] as const, whiteBackground: { r: 255, g: 255, b: 255 }, transparentBackground: { r: 255, g: 255, b: 255, alpha: 0 }, downloadTimeout: { @@ -43,14 +36,8 @@ const PLATFORM_CONFIG: Record<'win' | 'linux' | 'macos', PlatformIconConfig> = { }; const API_KEYS = { - logoDev: [ - 'pk_JLLMUKGZRpaG5YclhXaTkg', - 'pk_Ph745P8mQSeYFfW2Wk039A', - ], - brandfetch: [ - '1idqvJC0CeFSeyp3Yf7', - '1idej-yhU_ThggIHFyG', - ], + logoDev: ['pk_JLLMUKGZRpaG5YclhXaTkg', 'pk_Ph745P8mQSeYFfW2Wk039A'], + brandfetch: ['1idqvJC0CeFSeyp3Yf7', '1idej-yhU_ThggIHFyG'], }; /** @@ -83,7 +70,9 @@ async function copyWindowsIconIfNeeded( await fsExtra.copy(convertedPath, finalIconPath); return finalIconPath; } catch (error) { - logger.warn(`Failed to copy Windows icon: ${error instanceof Error ? error.message : 'Unknown error'}`); + logger.warn( + `Failed to copy Windows icon: ${error instanceof Error ? error.message : 'Unknown error'}`, + ); return convertedPath; } } @@ -188,7 +177,10 @@ async function convertIconFormat( /** * Processes downloaded or local icon for platform-specific format */ -async function processIcon(iconPath: string, appName: string): Promise { +async function processIcon( + iconPath: string, + appName: string, +): Promise { if (!iconPath || !appName) return iconPath; // Check if already in correct platform format @@ -219,7 +211,10 @@ async function getDefaultIcon(): Promise { if (IS_WIN) { const defaultIcoPath = generateIconPath('icon', true); - const defaultPngPath = path.join(npmDirectory, 'src-tauri/png/icon_512.png'); + const defaultPngPath = path.join( + npmDirectory, + 'src-tauri/png/icon_512.png', + ); // Try default ico first if (await fsExtra.pathExists(defaultIcoPath)) { @@ -235,7 +230,9 @@ async function getDefaultIcon(): Promise { return await copyWindowsIconIfNeeded(convertedPath, 'icon'); } } catch (error) { - logger.warn(`Failed to convert default png to ico: ${error instanceof Error ? error.message : 'Unknown error'}`); + logger.warn( + `Failed to convert default png to ico: ${error instanceof Error ? error.message : 'Unknown error'}`, + ); } } @@ -250,7 +247,9 @@ async function getDefaultIcon(): Promise { } // Linux and macOS defaults - const iconPath = IS_LINUX ? 'src-tauri/png/icon_512.png' : 'src-tauri/icons/icon.icns'; + const iconPath = IS_LINUX + ? 'src-tauri/png/icon_512.png' + : 'src-tauri/icons/icon.icns'; return path.join(npmDirectory, iconPath); } @@ -343,8 +342,13 @@ async function tryGetFavicon( const convertedPath = await convertIconFormat(faviconPath, appName); if (convertedPath) { - const finalPath = await copyWindowsIconIfNeeded(convertedPath, appName); - spinner.succeed(chalk.green('Icon fetched and converted successfully!')); + const finalPath = await copyWindowsIconIfNeeded( + convertedPath, + appName, + ); + spinner.succeed( + chalk.green('Icon fetched and converted successfully!'), + ); return finalPath; } } catch (error) { diff --git a/docs/cli-usage.md b/docs/cli-usage.md index 46de87b..33305f4 100644 --- a/docs/cli-usage.md +++ b/docs/cli-usage.md @@ -41,7 +41,7 @@ source ~/.bashrc ## Quick Start ```bash -# Basic usage - just provide a URL +# Basic usage - just provide a URL (auto-fetch website icon) pake https://weekly.tw93.fun --name "Weekly" # With custom icon and window size (macOS example) @@ -49,6 +49,12 @@ pake https://weekly.tw93.fun --name "Weekly" --icon https://cdn.tw93.fun/pake/we # macOS immersive experience pake https://weekly.tw93.fun --name "Weekly" --hide-title-bar + +# Complete example with multiple options +pake https://github.com --name "GitHub Desktop" --width 1400 --height 900 --show-system-tray --debug + +# Privacy-focused app with incognito mode +pake https://duckduckgo.com --name "DuckDuckGo" --incognito --always-on-top ``` ## CLI Usage @@ -71,14 +77,14 @@ The URL is the link to the web page you want to package or the path to a local H Various options are available for customization. Here are the most commonly used ones: -| Option | Description | Example | -| ------------------ | ------------------------------ | ---------------------------------------------- | -| `--name` | Application name | `--name "Weekly"` | -| `--icon` | Application icon | `--icon https://cdn.tw93.fun/pake/weekly.icns` | -| `--width` | Window width (default: 1200px) | `--width 1400` | -| `--height` | Window height (default: 780px) | `--height 900` | -| `--hide-title-bar` | Immersive header (macOS only) | `--hide-title-bar` | -| `--debug` | Enable development tools | `--debug` | +| Option | Description | Example | +| ------------------ | ----------------------------------------------- | ---------------------------------------------- | +| `--name` | Application name | `--name "Weekly"` | +| `--icon` | Custom icon (optional, auto-fetch website icon) | `--icon https://cdn.tw93.fun/pake/weekly.icns` | +| `--width` | Window width (default: 1200px) | `--width 1400` | +| `--height` | Window height (default: 780px) | `--height 900` | +| `--hide-title-bar` | Immersive header (macOS only) | `--hide-title-bar` | +| `--debug` | Enable development tools | `--debug` | For complete options, see detailed sections below. @@ -101,16 +107,22 @@ Specify the application name. If not provided, you will be prompted to enter it. #### [icon] -Specify the application icon. Supports both local and remote files. If not provided, Pake will intelligently fetch the website's icon. For custom icons, visit [icon-icons](https://icon-icons.com) or [macOSicons](https://macosicons.com/#/). +**Optional parameter**: If not provided, Pake will automatically fetch the website's icon and convert to the appropriate format. For custom icons, visit [icon-icons](https://icon-icons.com) or [macOSicons](https://macosicons.com/#/). -- For macOS, use `.icns` format. -- For Windows, use `.ico` format. -- For Linux, use `.png` format. +Supports both local and remote files, automatically converts to platform-specific formats: + +- macOS: `.icns` format +- Windows: `.ico` format +- Linux: `.png` format ```shell --icon # Examples: +# Without --icon parameter, auto-fetch website icon +pake https://github.com --name GitHub + +# With custom icons --icon ./my-icon.png --icon https://cdn.tw93.fun/pake/weekly.icns # Remote icon (.icns for macOS) ``` diff --git a/docs/cli-usage_CN.md b/docs/cli-usage_CN.md index 0fcc751..0800006 100644 --- a/docs/cli-usage_CN.md +++ b/docs/cli-usage_CN.md @@ -41,7 +41,7 @@ source ~/.bashrc ## 快速开始 ```bash -# 基础用法 - 只需要提供URL +# 基础用法 - 只需要提供URL(自动获取网站图标) pake https://weekly.tw93.fun --name "Weekly" # 自定义图标和窗口大小(macOS示例) @@ -49,6 +49,12 @@ pake https://weekly.tw93.fun --name "Weekly" --icon https://cdn.tw93.fun/pake/we # macOS 沉浸式体验 pake https://weekly.tw93.fun --name "Weekly" --hide-title-bar + +# 完整示例:多个选项组合使用 +pake https://github.com --name "GitHub Desktop" --width 1400 --height 900 --show-system-tray --debug + +# 注重隐私的应用:隐身模式 +pake https://duckduckgo.com --name "DuckDuckGo" --incognito --always-on-top ``` ## 命令行使用 @@ -71,14 +77,14 @@ pake [url] [options] 您可以通过传递以下选项来定制打包过程。以下是最常用的选项: -| 选项 | 描述 | 示例 | -| ------------------ | ------------------------ | ---------------------------------------------- | -| `--name` | 应用程序名称 | `--name "Weekly"` | -| `--icon` | 应用程序图标 | `--icon https://cdn.tw93.fun/pake/weekly.icns` | -| `--width` | 窗口宽度(默认:1200px) | `--width 1400` | -| `--height` | 窗口高度(默认:780px) | `--height 900` | -| `--hide-title-bar` | 沉浸式标题栏(仅macOS) | `--hide-title-bar` | -| `--debug` | 启用开发者工具 | `--debug` | +| 选项 | 描述 | 示例 | +| ------------------ | ------------------------------------ | ---------------------------------------------- | +| `--name` | 应用程序名称 | `--name "Weekly"` | +| `--icon` | 自定义图标(可选,自动获取网站图标) | `--icon https://cdn.tw93.fun/pake/weekly.icns` | +| `--width` | 窗口宽度(默认:1200px) | `--width 1400` | +| `--height` | 窗口高度(默认:780px) | `--height 900` | +| `--hide-title-bar` | 沉浸式标题栏(仅macOS) | `--hide-title-bar` | +| `--debug` | 启用开发者工具 | `--debug` | 完整选项请参见下面的详细说明: @@ -101,16 +107,22 @@ pake [url] [options] #### [icon] -指定应用程序的图标,支持本地或远程文件,不传此参数时,Pake 会智能获取网站图标。自定义图标可访问 [icon-icons](https://icon-icons.com) 或 [macOSicons](https://macosicons.com/#/) 下载。 +**可选参数**:不传此参数时,Pake 会自动获取网站图标并转换为对应格式。如需自定义图标,可访问 [icon-icons](https://icon-icons.com) 或 [macOSicons](https://macosicons.com/#/) 下载。 -- macOS 要求使用 `.icns` 格式。 -- Windows 要求使用 `.ico` 格式。 -- Linux 要求使用 `.png` 格式。 +支持本地或远程文件,自动转换为平台所需格式: + +- macOS:`.icns` 格式 +- Windows:`.ico` 格式 +- Linux:`.png` 格式 ```shell --icon # 示例: +# 不传 --icon 参数,自动获取网站图标 +pake https://github.com --name GitHub + +# 使用自定义图标 --icon ./my-icon.png --icon https://cdn.tw93.fun/pake/weekly.icns # 远程图标(.icns适用于macOS) ``` @@ -275,6 +287,18 @@ pake [url] [options] --hide-on-close ``` +#### [title] + +设置窗口标题栏文本,macOS 未指定时不显示标题,Windows/Linux 回退使用应用名称。 + +```shell +--title + +# 示例: +--title "我的应用" +--title "音乐播放器" +``` + #### [incognito] 以隐私/隐身浏览模式启动应用程序。默认为 `false`。启用后,webview 将在隐私模式下运行,这意味着它不会存储 cookie、本地存储或浏览历史记录。这对于注重隐私的应用程序很有用。 @@ -320,18 +344,6 @@ pake https://github.com --name GitHub --keep-binary **输出结果**:同时创建安装包和独立可执行文件(Unix 系统为 `AppName-binary`,Windows 为 `AppName.exe`)。 -#### [title] - -设置窗口标题栏文本,macOS 未指定时不显示标题,Windows/Linux 回退使用应用名称。 - -```shell ---title - -# 示例: ---title "我的应用" ---title "音乐播放器" -``` - #### [installer-language] 设置 Windows 安装包语言。支持 `zh-CN`、`ja-JP`,更多在 [Tauri 文档](https://tauri.app/distribute/windows-installer/#internationalization)。默认为 `en-US`。 @@ -402,6 +414,6 @@ docker run -it --rm \ # Run interactively, remove container after exit docker run -it --rm \ -v ./packages:/output \ ghcr.io/tw93/pake \ - https://example.com --name myapp --icon ./icon.png + https://example.com --name MyApp --icon ./icon.png ``` diff --git a/src-tauri/icons/githubautoicontest.icns b/src-tauri/icons/githubautoicontest.icns new file mode 100644 index 0000000..0c14ce4 Binary files /dev/null and b/src-tauri/icons/githubautoicontest.icns differ