10 分钟用一张 Logo 出安装包:Qwen Code Tauri 桌面白标构建实操 10 分钟用一张 Logo 出安装包Qwen Code Tauri 桌面白标构建实操【免费下载链接】qwen-codeAn open-source AI coding agent that lives in your terminal.项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-codeQwen Code 是跑在终端里的开源 AI 编码智能体它的桌面形态如今是一套 Tauri 壳。给它一个 brandId 加一张 logo内置的 brand-create 脚本会替你改配置、重生成整套图标、换掉启动页皮肤再跟着tauri build出一套自己名下的 DMG/EXE/AppImage/deb 安装包。品牌化挂载点就三处src-tauri/tauri.conf.json、src-tauri/icons/和bootstrap/启动 UI完整流程定义见 SKILL.md。快速上手用 brandId 和一张 logo 一键生成安装包这一节把最短路径完整走一遍clone → 写 brand.json → 一条命令 → 出包。先在隔离的构建克隆里干活每个品牌一个全新克隆工作仓库保持干净BUILD_ROOT$PWD/brand-builds/acme-ai-$(date %s) mkdir -p $BUILD_ROOT git clone --branch main --single-branch \ https://gitcode.com/GitHub_Trending/qw/qwen-code \ $BUILD_ROOT/qwen-code cd $BUILD_ROOT/qwen-code git checkout -B brand-acme-ai origin/mainclone 或 checkout 失败就停下如实报告别装作 brand 分支已存在继续往下跑。然后写一份最小 brand.json路径用绝对路径其余字段都能自动派生别急着填{ brandId: acme-ai, logo: /absolute/path/to/logo.png }brandId 要匹配^[a-z][a-z0-9-]*$小写字母开头只含小写字母、数字、短横线logo 必须是真实存在的本地文件推荐 1024×1024 的 PNG。两项不合规就回头改输入而不是去手改配置。装完根目录和 desktop-shell 两层依赖build:runtime要调用根部的 cross-env 等 devDependencies用纯 Node 跑零依赖的 brand-create.mjsNode ≥ 18再出包。若该脚本文件缺失直接报告缺失路径和预期命令别试图手工补丁代替npm install (cd packages/desktop-shell npm install --workspacesfalse) node packages/desktop-shell/.agents/skills/desktop-brand-builder/scripts/brand-create.mjs \ --shell-root $PWD/packages/desktop-shell --config /absolute/path/to/brand.json cd packages/desktop-shell npm run build:runtime --workspacesfalse npx tauri build跑完会输出一份 JSON 报告品牌名、appId、产物前缀、更新端点、被补丁的文件清单。只要内置脚本可用就别手改 tauri.conf.json、图标或 bootstrap 字符串——脚本是补丁配置与生成资源的唯一权威来源。包落在src-tauri/target/release/bundle/按平台分子目录dmg/macOS、nsis/Windows、appimage/与deb/Linux。读懂 brandId 自动派生不写的字段它替你补这节说清哪些字段能自动派生、按什么规则派生好判断可选项里哪些值得手写。派生字段推导规则示例appId反转 website 的 host 标签并追加.desktop先剥www.host 至少两段acme.ai→ai.acme.desktopappId 回退值website 缺失或 host 不合法时app.acme-ai.desktopappNamebrandId 按短横线分段各段首字母大写后空格连接acme-ai→Acme AIartifactPrefix同样首字母大写但用短横线连接作安装包文件名前缀acme-ai→Acme-AIupdaterEndpoints默认空数组即禁用应用内更新[]反直觉的一点脚本内置一份常见缩写词表ai、api、cli、ide、sdk、ui、url这些词会整体大写。所以brandId: acme-cli派生出的是Acme CLI而不是Acme Cli。确实想覆盖时在 brand.json 里写对应项即可可选项什么时候写作用appName不满意派生的显示名覆盖应用显示名appId想指定 bundle identifier覆盖派生的 appIdartifactPrefix想控制安装包文件名前缀覆盖前缀website有官网、想按域名派生 appId参与派生updaterEndpoints / updaterPubkey品牌方自带更新源见后面的密钥配对一节target只出特定平台mac/win/linux/all还有一条硬约束品牌构建与官方更新源彻底隔离前者永不轮询官方源后者也永不给品牌方推更新。所以端点默认空清空端点时脚本会顺手把bundle.createUpdaterArtifacts置为 false并把官方公钥清成空字符串而不是删掉——updater 插件的 schema 把该字段声明为pubkey: String且无默认值直接删字段会在应用启动时反序列化失败空字符串则无害。看透 brand-create 脚本原理三步补丁做完品牌化脚本按顺序执行三步补丁每步都带防御性校验任何一步出错都不会留下半补丁状态的文件。补丁一tauri.conf.json改 tauri.conf.json 里的四个字段productName→ appName、identifier→ appId、bundle.shortDescription、plugins.updater.endpoints。这里有个坑品牌方提供了更新配置、但目标配置里却没有plugins.updater段fork 或手工改过的壳容易出现脚本会在写入任何文件之前直接报错——fail closed。否则就是悄悄丢弃校验过的更新配置交付一个永远无法更新的品牌构建。单次使用守卫同理productName只要不再是默认值Qwen Code Desktop脚本就拒绝运行。bootstrap 补丁依赖原始字面量公钥/端点的变更也无法回滚若品牌名恰好就叫Qwen Code Desktop加载阶段就会被直接拒掉。补丁二重生成整套图标用 Tauri CLI 从 logo 生成全套图标。安全细节脚本优先require.resolve直接解析 CLI 入口用spawnSync把 logo 路径当普通 argv 元素传过去——不经过任何命令解释器构造过的文件名路径里带$(cmd)或反引号因此没法触发 shell 注入。CLI 跑不起来时有两级回退PNG logo 只复制进src-tauri/icons/icon.png并告警其余尺寸仍是旧 logo非 PNG 则什么都不替换提示转成 PNG 再试。补丁三换掉 bootstrap 启动页把 logo 复制为bootstrap/brand-logoext再把 bootstrap/index.html 和bootstrap.js里的Qwen Code字面量替换成品牌名qwen-code-logo.svg引用换成品牌 logo。字符串处理区分两种语境JS 单引号字符串先经JSON.stringify转义反斜杠、换行等控制字符再处理单引号——只转单引号不够以反斜杠结尾的名字如Bobs App\会逃逸掉结束引号HTML 按→→→→的顺序做实体转义先转是为了防止后续引入的实体被二次转义。替换全部用函数式 replacer品牌名里的$模式如$不会被展开。跨平台 tauri build 的正确姿势重跑 build:runtime 最容易翻车的一步是交叉编译根子出在build:runtime上。prepare-runtime.js 按QWEN_DESKTOP_TARGET环境变量默认宿主平台下载对应平台的 Node 运行时打进包里该变量会被归一化成五种受支持目标darwin-arm64/x64、linux-arm64/x64、win32-x64传不支持的值直接抛错。所以规则是目标平台和宿主不同时每次tauri build --target之前必须带着环境变量重跑build:runtime。否则包里塞进去的是错误架构的 Node 二进制应用一启动就报 exec format errorQWEN_DESKTOP_TARGETaarch64-apple-darwin npm run build:runtime --workspacesfalse npx tauri build --target aarch64-apple-darwintarget 为all时按目标逐个来且只跑当前机器或 CI 支持的目标。文件真实存在于src-tauri/target/triple/release/bundle/时才谈得上产出了跨平台产物。完成 updater 签名密钥配对生成你自己的密钥对品牌构建默认不签名、也不设更新——这是设计使然。上游发布流水线的签名密钥Apple、Windows与更新私钥只属于官方发布。品牌方需要签名发布或应用内更新就自备独立凭据和独立更新源绝不复用上游的。一条命令生成密钥对npx tauri-apps/cli signer generate -w ~/.tauri/my-brand.key.key是私钥写进构建 CI 作为TAURI_SIGNING_PRIVATE_KEY.pub里的 base64 公钥填进 brand.json 的updaterPubkey。两者必须配对更新器用这把公钥校验每个更新的签名拿官方公钥配自定义源、或者干脆缺公钥每次更新检查都会校验失败应用永远更新不了。脚本因此在加载阶段就强校验updaterEndpoints非空而公钥缺失时直接报错。避坑Tauri 白标构建交付前的两条铁律⚠️ 交付前两条铁律比构建过程本身更容易被违反失败时不删构建目录。它是给事后排查用的不是用来重试品牌步骤的——保留目录返回最后几行有用的错误和完整日志路径即可。绝不在同一克隆里重跑 brand-create。脚本是单次使用的品牌配置写错了丢弃这个克隆从全新克隆重新开始。打包后验证确认产物出现在对应平台子目录对每个文件算一遍 SHA-256macOS 用shasum -a 256macOS 的 DMG 再跑一次hdiutil verify。最后向用户报告产物路径、哈希、应用名、appId 与构建目录。一份 brand.json 加一个零依赖 Node 脚本就是白标化的全部入口。单次使用守卫、updater 密钥配对校验、双语境字符串转义让品牌化既安全又可重复——下次要换肤重新克隆、再跑一遍即可。【免费下载链接】qwen-codeAn open-source AI coding agent that lives in your terminal.项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-code创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考