From 0d941bd73f1391bdc6af58e933f54c50dddcab50 Mon Sep 17 00:00:00 2001 From: Tw93 Date: Fri, 6 Jan 2023 18:57:54 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20mac=E5=91=BD=E4=BB=A4=E8=A1=8C?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=89=93=E9=80=9A=E7=94=A8=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/pake_build.yaml | 18 ----- bin/builders/LinuxBuilder.ts | 16 ++-- bin/builders/MacBuilder.ts | 20 ++--- bin/builders/WinBulider.ts | 10 +-- bin/builders/common.ts | 4 +- bin/cli.ts | 7 +- bin/options/icon.ts | 37 ---------- dist/cli.js | 119 +++++++++++++----------------- package.json | 2 +- script/build.sh | 3 - src-tauri/tauri.conf.json | 31 +------- src-tauri/tauri.macos.conf.json | 26 +------ 12 files changed, 78 insertions(+), 215 deletions(-) diff --git a/.github/workflows/pake_build.yaml b/.github/workflows/pake_build.yaml index aac097d..fab49ea 100644 --- a/.github/workflows/pake_build.yaml +++ b/.github/workflows/pake_build.yaml @@ -66,24 +66,6 @@ jobs: run: | npm run build:all-windows - # - name: Create Release and Upload Release Asset - # uses: softprops/action-gh-release@v1 - # if: startsWith(github.ref, 'refs/tags/') - # with: - # tag_name: ${{ github.ref }} - # name: Release ${{ github.ref }} - # body: TODO New Release. - # draft: false - # prerelease: false - # files: | - # output/*/*.* - - # - uses: ncipollo/release-action@v1 - # if: startsWith(github.ref, 'refs/tags/v') - # with: - # allowUpdates: true - # artifacts: "output/*/*.*" - # token: ${{ secrets.GITHUB_TOKEN }} - name: Upload files env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/bin/builders/LinuxBuilder.ts b/bin/builders/LinuxBuilder.ts index cec50b1..df1ee6e 100644 --- a/bin/builders/LinuxBuilder.ts +++ b/bin/builders/LinuxBuilder.ts @@ -46,31 +46,31 @@ export default class LinuxBuilder implements IBuilder { const { name } = options; await mergeTauriConfig(url, options, tauriConf); - const _ = await shellExec(`cd ${npmDirectory} && npm install && npm run build`); - let arch = ""; + await shellExec(`cd ${npmDirectory} && npm install && npm run build`); + + let arch: string; if (process.arch === "x64") { arch = "amd64"; } else { arch = process.arch; } const debName = `${name}_${tauriConf.package.version}_${arch}.deb`; - const appPath = this.getBuildedAppPath(npmDirectory, "deb", debName); + const appPath = this.getBuildAppPath(npmDirectory, "deb", debName); const distPath = path.resolve(`${name}.deb`); await fs.copyFile(appPath, distPath); await fs.unlink(appPath); - const appImageName = `${name}_${tauriConf.package.version}_${arch}.AppImage`; - const appImagePath = this.getBuildedAppPath(npmDirectory, "appimage", appImageName); + const appImagePath = this.getBuildAppPath(npmDirectory, "appimage", appImageName); const distAppPath = path.resolve(`${name}.AppImage`); await fs.copyFile(appImagePath, distAppPath); await fs.unlink(appImagePath); logger.success('Build success!'); logger.success('You can find the deb app installer in', distPath); - logger.success('You can find the Appimage app installer in', distAppPath); + logger.success('You can find the AppImage app installer in', distAppPath); } - getBuildedAppPath(npmDirectory: string,packageType: string, packageName: string) { + getBuildAppPath(npmDirectory: string, packageType: string, packageName: string) { return path.join( npmDirectory, 'src-tauri/target/release/bundle/', @@ -78,4 +78,4 @@ export default class LinuxBuilder implements IBuilder { packageName ); } -} \ No newline at end of file +} diff --git a/bin/builders/MacBuilder.ts b/bin/builders/MacBuilder.ts index 8a5fdcb..4fedbc7 100644 --- a/bin/builders/MacBuilder.ts +++ b/bin/builders/MacBuilder.ts @@ -29,7 +29,7 @@ export default class MacBuilder implements IBuilder { // TODO 国内有可能会超时 await installRust(); } else { - log.error('Error: Pake need Rust to package your webapp!!!'); + log.error('Error: Pake need Rust to package your webapp!'); process.exit(2); } } @@ -40,15 +40,11 @@ export default class MacBuilder implements IBuilder { await mergeTauriConfig(url, options, tauriConf); - const _ = await shellExec(`cd ${npmDirectory} && npm install && npm run build`); - let arch = "x64"; - if (process.arch === "arm64") { - arch = "aarch64"; - } else { - arch = process.arch; - } - const dmgName = `${name}_${tauriConf.package.version}_${arch}.dmg`; - const appPath = this.getBuildedAppPath(npmDirectory, dmgName); + //这里直接使用 universal-apple-darwin 的打包,而非当前系统的包 + await shellExec(`cd ${npmDirectory} && npm install && npm run build:mac`); + + const dmgName = `${name}_${tauriConf.package.version}_universal.dmg`; + const appPath = this.getBuildAppPath(npmDirectory, dmgName); const distPath = path.resolve(`${name}.dmg`); await fs.copyFile(appPath, distPath); await fs.unlink(appPath); @@ -57,10 +53,10 @@ export default class MacBuilder implements IBuilder { logger.success('You can find the app installer in', distPath); } - getBuildedAppPath(npmDirectory: string, dmgName: string) { + getBuildAppPath(npmDirectory: string, dmgName: string) { return path.join( npmDirectory, - 'src-tauri/target/release/bundle/dmg', + 'src-tauri/target/universal-apple-darwin/release/bundle/dmg', dmgName ); } diff --git a/bin/builders/WinBulider.ts b/bin/builders/WinBulider.ts index 2ca2958..dfd5026 100644 --- a/bin/builders/WinBulider.ts +++ b/bin/builders/WinBulider.ts @@ -5,11 +5,9 @@ import { checkRustInstalled, installRust } from '@/helpers/rust.js'; import { PakeAppOptions } from '@/types.js'; import { IBuilder } from './base.js'; import { shellExec } from '@/utils/shell.js'; -// @ts-expect-error 加上resolveJsonModule rollup会打包报错 -// import tauriConf from '../../src-tauri/tauri.windows.conf.json'; +// @ts-expect-error import tauriConf from './tauriConf.js'; -import { fileURLToPath } from 'url'; import logger from '@/options/logger.js'; import { mergeTauriConfig } from './common.js'; import { npmDirectory } from '@/utils/dir.js'; @@ -47,11 +45,11 @@ export default class WinBuilder implements IBuilder { await mergeTauriConfig(url, options, tauriConf); - const _ = await shellExec(`cd ${npmDirectory} && npm install && npm run build`); + await shellExec(`cd ${npmDirectory} && npm install && npm run build`); const language = tauriConf.tauri.bundle.windows.wix.language[0]; const arch = process.arch; const msiName = `${name}_${tauriConf.package.version}_${arch}_${language}.msi`; - const appPath = this.getBuildedAppPath(npmDirectory, msiName); + const appPath = this.getBuildAppPath(npmDirectory, msiName); const distPath = path.resolve(`${name}.msi`); await fs.copyFile(appPath, distPath); await fs.unlink(appPath); @@ -59,7 +57,7 @@ export default class WinBuilder implements IBuilder { logger.success('You can find the app installer in', distPath); } - getBuildedAppPath(npmDirectory: string, dmgName: string) { + getBuildAppPath(npmDirectory: string, dmgName: string) { return path.join( npmDirectory, 'src-tauri/target/release/bundle/msi', diff --git a/bin/builders/common.ts b/bin/builders/common.ts index 06b2d19..3c0dc37 100644 --- a/bin/builders/common.ts +++ b/bin/builders/common.ts @@ -51,7 +51,7 @@ export async function mergeTauriConfig( const reg = new RegExp(/([0-9]*[a-zA-Z]+[0-9]*)+/); if (!reg.test(name) || reg.exec(name)[0].length != name.length) { logger.error("package name is illegal, it must be letters, numbers, and it must contain the letters") - logger.error("E.g 123pan,123Pan Pan123,weread, WeRead, WERead"); + logger.error("E.g 123pan,123Pan,Pan123,weread,WeRead,WERead"); process.exit(); } } @@ -113,7 +113,7 @@ export async function mergeTauriConfig( break; } } - + let bundleConf = {tauri: {bundle: tauriConf.tauri.bundle}}; await fs.writeFile( configPath, diff --git a/bin/cli.ts b/bin/cli.ts index 14a6d0e..d1a4778 100644 --- a/bin/cli.ts +++ b/bin/cli.ts @@ -1,6 +1,5 @@ import { program } from 'commander'; import log from 'loglevel'; -import chalk from 'chalk'; import { DEFAULT_PAKE_OPTIONS } from './defaults.js'; import { PakeCliOptions } from './types.js'; import { validateNumberInput, validateUrlInput } from './utils/validate.js'; @@ -9,7 +8,6 @@ import BuilderFactory from './builders/BuilderFactory.js'; import { checkUpdateTips } from './helpers/updater.js'; // @ts-expect-error import packageJson from '../package.json'; -import logger from './options/logger.js'; program.version(packageJson.version).description('A cli application can package a web page to desktop application.'); @@ -25,7 +23,8 @@ program .option('--transparent', 'transparent title bar', DEFAULT_PAKE_OPTIONS.transparent) .option('--debug', 'debug', DEFAULT_PAKE_OPTIONS.transparent) .action(async (url: string, options: PakeCliOptions) => { - checkUpdateTips(); + + await checkUpdateTips(); if (!url) { // 直接 pake 不需要出现url提示 @@ -42,7 +41,7 @@ program const appOptions = await handleInputOptions(options, url); - builder.build(url, appOptions); + await builder.build(url, appOptions); }); program.parse(); diff --git a/bin/options/icon.ts b/bin/options/icon.ts index 8aff0d6..9fddd2c 100644 --- a/bin/options/icon.ts +++ b/bin/options/icon.ts @@ -33,43 +33,6 @@ export async function getDefaultIcon() { return path.join(npmDirectory, iconPath); } -// export async function getIconFromPageUrl(url: string) { -// const icon = await pageIcon(url); -// console.log(icon); -// if (icon.ext === '.ico') { -// const a = await ICO.parse(icon.data); -// icon.data = Buffer.from(a[0].buffer); -// } - -// const iconDir = (await dir()).path; -// const iconPath = path.join(iconDir, `/icon.icns`); - -// const out = png2icons.createICNS(icon.data, png2icons.BILINEAR, 0); - -// await fs.writeFile(iconPath, out); -// return iconPath; -// } - -// export async function getIconFromMacosIcons(name: string) { -// const data = { -// query: name, -// filters: 'approved:true', -// hitsPerPage: 10, -// page: 1, -// }; -// const res = await axios.post('https://p1txh7zfb3-2.algolianet.com/1/indexes/macOSicons/query?x-algolia-agent=Algolia%20for%20JavaScript%20(4.13.1)%3B%20Browser', data, { -// headers: { -// 'x-algolia-api-key': '0ba04276e457028f3e11e38696eab32c', -// 'x-algolia-application-id': 'P1TXH7ZFB3', -// }, -// }); -// if (!res.data.hits.length) { -// return ''; -// } else { -// return downloadIcon(res.data.hits[0].icnsUrl); -// } -// } - export async function downloadIcon(iconUrl: string) { let iconResponse; try { diff --git a/dist/cli.js b/dist/cli.js index 468a13b..a838a66 100644 --- a/dist/cli.js +++ b/dist/cli.js @@ -1646,7 +1646,7 @@ function mergeTauriConfig(url, options, tauriConf) { const reg = new RegExp(/([0-9]*[a-zA-Z]+[0-9]*)+/); if (!reg.test(name) || reg.exec(name)[0].length != name.length) { logger.error("package name is illegal, it must be letters, numbers, and it must contain the letters"); - logger.error("E.g 123pan,123Pan Pan123,weread, WeRead, WERead"); + logger.error("E.g 123pan,123Pan,Pan123,weread,WeRead,WERead"); process.exit(); } } @@ -1752,38 +1752,6 @@ function getDefaultIcon() { return path.join(npmDirectory, iconPath); }); } -// export async function getIconFromPageUrl(url: string) { -// const icon = await pageIcon(url); -// console.log(icon); -// if (icon.ext === '.ico') { -// const a = await ICO.parse(icon.data); -// icon.data = Buffer.from(a[0].buffer); -// } -// const iconDir = (await dir()).path; -// const iconPath = path.join(iconDir, `/icon.icns`); -// const out = png2icons.createICNS(icon.data, png2icons.BILINEAR, 0); -// await fs.writeFile(iconPath, out); -// return iconPath; -// } -// export async function getIconFromMacosIcons(name: string) { -// const data = { -// query: name, -// filters: 'approved:true', -// hitsPerPage: 10, -// page: 1, -// }; -// const res = await axios.post('https://p1txh7zfb3-2.algolianet.com/1/indexes/macOSicons/query?x-algolia-agent=Algolia%20for%20JavaScript%20(4.13.1)%3B%20Browser', data, { -// headers: { -// 'x-algolia-api-key': '0ba04276e457028f3e11e38696eab32c', -// 'x-algolia-application-id': 'P1TXH7ZFB3', -// }, -// }); -// if (!res.data.hits.length) { -// return ''; -// } else { -// return downloadIcon(res.data.hits[0].icnsUrl); -// } -// } function downloadIcon(iconUrl) { return __awaiter(this, void 0, void 0, function* () { let iconResponse; @@ -1861,8 +1829,8 @@ function checkRustInstalled() { var tauri$3 = { windows: [ { - url: "https://weread.qq.com/", - transparent: true, + url: "https://baidu.com", + transparent: false, fullscreen: false, width: 1200, height: 780, @@ -1874,21 +1842,40 @@ var tauri$3 = { }, updater: { active: false + }, + bundle: { + icon: [ + "/Users/tw93/www/pake/src-tauri/icons/icon.icns" + ], + identifier: "pake-bb6e08", + active: true, + category: "DeveloperTool", + copyright: "", + externalBin: [ + ], + longDescription: "", + macOS: { + entitlements: null, + exceptionDomain: "", + frameworks: [ + ], + providerShortName: null, + signingIdentity: null + }, + resources: [ + ], + shortDescription: "", + targets: [ + "dmg" + ] } }; -var build = { - devPath: "../dist", - distDir: "../dist", - beforeBuildCommand: "", - beforeDevCommand: "" -}; var CommonConf = { "package": { - productName: "WeRead", + productName: "baidu", version: "1.0.0" }, - tauri: tauri$3, - build: build + tauri: tauri$3 }; var tauri$2 = { @@ -1931,9 +1918,9 @@ var WinConf = { var tauri$1 = { bundle: { icon: [ - "icons/weread.icns" + "/Users/tw93/www/pake/src-tauri/icons/icon.icns" ], - identifier: "com.tw93.weread", + identifier: "pake-bb6e08", active: true, category: "DeveloperTool", copyright: "", @@ -2038,7 +2025,7 @@ class MacBuilder { yield installRust(); } else { - log.error('Error: Pake need Rust to package your webapp!!!'); + log.error('Error: Pake need Rust to package your webapp!'); process.exit(2); } }); @@ -2048,16 +2035,10 @@ class MacBuilder { log.debug('PakeAppOptions', options); const { name } = options; yield mergeTauriConfig(url, options, tauriConf); - yield shellExec(`cd ${npmDirectory} && npm install && npm run build`); - let arch = "x64"; - if (process.arch === "arm64") { - arch = "aarch64"; - } - else { - arch = process.arch; - } - const dmgName = `${name}_${tauriConf.package.version}_${arch}.dmg`; - const appPath = this.getBuildedAppPath(npmDirectory, dmgName); + //这里直接使用 universal-apple-darwin 的打包,而非当前系统的包 + yield shellExec(`cd ${npmDirectory} && npm install && npm run build:mac`); + const dmgName = `${name}_${tauriConf.package.version}_universal.dmg`; + const appPath = this.getBuildAppPath(npmDirectory, dmgName); const distPath = path.resolve(`${name}.dmg`); yield fs.copyFile(appPath, distPath); yield fs.unlink(appPath); @@ -2065,8 +2046,8 @@ class MacBuilder { logger.success('You can find the app installer in', distPath); }); } - getBuildedAppPath(npmDirectory, dmgName) { - return path.join(npmDirectory, 'src-tauri/target/release/bundle/dmg', dmgName); + getBuildAppPath(npmDirectory, dmgName) { + return path.join(npmDirectory, 'src-tauri/target/universal-apple-darwin/release/bundle/dmg', dmgName); } } @@ -2102,7 +2083,7 @@ class WinBuilder { const language = tauriConf.tauri.bundle.windows.wix.language[0]; const arch = process.arch; const msiName = `${name}_${tauriConf.package.version}_${arch}_${language}.msi`; - const appPath = this.getBuildedAppPath(npmDirectory, msiName); + const appPath = this.getBuildAppPath(npmDirectory, msiName); const distPath = path.resolve(`${name}.msi`); yield fs.copyFile(appPath, distPath); yield fs.unlink(appPath); @@ -2110,7 +2091,7 @@ class WinBuilder { logger.success('You can find the app installer in', distPath); }); } - getBuildedAppPath(npmDirectory, dmgName) { + getBuildAppPath(npmDirectory, dmgName) { return path.join(npmDirectory, 'src-tauri/target/release/bundle/msi', dmgName); } } @@ -2144,7 +2125,7 @@ class LinuxBuilder { const { name } = options; yield mergeTauriConfig(url, options, tauriConf); yield shellExec(`cd ${npmDirectory} && npm install && npm run build`); - let arch = ""; + let arch; if (process.arch === "x64") { arch = "amd64"; } @@ -2152,21 +2133,21 @@ class LinuxBuilder { arch = process.arch; } const debName = `${name}_${tauriConf.package.version}_${arch}.deb`; - const appPath = this.getBuildedAppPath(npmDirectory, "deb", debName); + const appPath = this.getBuildAppPath(npmDirectory, "deb", debName); const distPath = path.resolve(`${name}.deb`); yield fs.copyFile(appPath, distPath); yield fs.unlink(appPath); const appImageName = `${name}_${tauriConf.package.version}_${arch}.AppImage`; - const appImagePath = this.getBuildedAppPath(npmDirectory, "appimage", appImageName); + const appImagePath = this.getBuildAppPath(npmDirectory, "appimage", appImageName); const distAppPath = path.resolve(`${name}.AppImage`); yield fs.copyFile(appImagePath, distAppPath); yield fs.unlink(appImagePath); logger.success('Build success!'); logger.success('You can find the deb app installer in', distPath); - logger.success('You can find the Appimage app installer in', distAppPath); + logger.success('You can find the AppImage app installer in', distAppPath); }); } - getBuildedAppPath(npmDirectory, packageType, packageName) { + getBuildAppPath(npmDirectory, packageType, packageName) { return path.join(npmDirectory, 'src-tauri/target/release/bundle/', packageType, packageName); } } @@ -2187,7 +2168,7 @@ class BuilderFactory { } var name = "pake-cli"; -var version = "1.0.1"; +var version = "1.2.0"; var description = "🤱🏻 很简单的用 Rust 打包网页生成很小的桌面 App 🤱🏻 A simple way to make any web page a desktop application using Rust."; var engines = { node: "^14.13 || >=16.0.0" @@ -2303,7 +2284,7 @@ program .option('--transparent', 'transparent title bar', DEFAULT_PAKE_OPTIONS.transparent) .option('--debug', 'debug', DEFAULT_PAKE_OPTIONS.transparent) .action((url, options) => __awaiter(void 0, void 0, void 0, function* () { - checkUpdateTips(); + yield checkUpdateTips(); if (!url) { // 直接 pake 不需要出现url提示 program.help(); @@ -2315,6 +2296,6 @@ program const builder = BuilderFactory.create(); yield builder.prepare(); const appOptions = yield handleOptions(options, url); - builder.build(url, appOptions); + yield builder.build(url, appOptions); })); program.parse(); diff --git a/package.json b/package.json index fde17bc..68d9594 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pake-cli", - "version": "1.1.0", + "version": "1.2.0", "description": "🤱🏻 很简单的用 Rust 打包网页生成很小的桌面 App 🤱🏻 A simple way to make any web page a desktop application using Rust.", "engines": { "node": "^14.13 || >=16.0.0" diff --git a/script/build.sh b/script/build.sh index 7d370bc..cabd0cf 100755 --- a/script/build.sh +++ b/script/build.sh @@ -45,7 +45,6 @@ if [[ "$OSTYPE" =~ ^linux ]]; then # for linux, package name may be com.xxx.xxx echo "rename package name" export desktop_file="src-tauri/assets/${package_prefix}.weread.desktop" - # sed -i "s/\"productName\": \"weread\"/\"productName\": \"${package_prefix}-weread\"/g" src-tauri/tauri.conf.json $sd "\"productName\": \"WeRead\"" "\"productName\": \"${package_prefix}-weread\"" src-tauri/tauri.conf.json fi @@ -109,7 +108,6 @@ do if [[ "$OSTYPE" =~ ^darwin ]]; then npm run tauri build -- --target universal-apple-darwin - # mv src-tauri/target/release/bundle/dmg/*.dmg output/macos/${package_title}_x64.dmg mv src-tauri/target/universal-apple-darwin/release/bundle/dmg/*.dmg output/macos/${package_title}.dmg fi @@ -119,4 +117,3 @@ done echo "build all package success!" echo "you run 'rm src-tauri/assets/*.desktop && git checkout src-tauri' to recovery code" -# rm src-tauri/assets/*.desktop && git checkout src-tauri diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index bd260ec..746b2a1 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,30 +1 @@ -{ - "package": { - "productName": "WeRead", - "version": "1.0.0" - }, - "tauri": { - "windows": [ - { - "url": "https://weread.qq.com/", - "transparent": true, - "fullscreen": false, - "width": 1200, - "height": 780, - "resizable": true - } - ], - "security": { - "csp": null - }, - "updater": { - "active": false - } - }, - "build": { - "devPath": "../dist", - "distDir": "../dist", - "beforeBuildCommand": "", - "beforeDevCommand": "" - } -} +{"package":{"productName":"baidu","version":"1.0.0"},"tauri":{"windows":[{"url":"https://baidu.com","transparent":false,"fullscreen":false,"width":1200,"height":780,"resizable":true}],"security":{"csp":null},"updater":{"active":false},"bundle":{"icon":["/Users/tw93/www/pake/src-tauri/icons/icon.icns"],"identifier":"pake-bb6e08","active":true,"category":"DeveloperTool","copyright":"","externalBin":[],"longDescription":"","macOS":{"entitlements":null,"exceptionDomain":"","frameworks":[],"providerShortName":null,"signingIdentity":null},"resources":[],"shortDescription":"","targets":["dmg"]}}} \ No newline at end of file diff --git a/src-tauri/tauri.macos.conf.json b/src-tauri/tauri.macos.conf.json index 5b09612..4374ab1 100644 --- a/src-tauri/tauri.macos.conf.json +++ b/src-tauri/tauri.macos.conf.json @@ -1,25 +1 @@ -{ - "tauri": { - "bundle": { - "icon": [ - "icons/weread.icns" - ], - "identifier": "com.tw93.weread", - "active": true, - "category": "DeveloperTool", - "copyright": "", - "externalBin": [], - "longDescription": "", - "macOS": { - "entitlements": null, - "exceptionDomain": "", - "frameworks": [], - "providerShortName": null, - "signingIdentity": null - }, - "resources": [], - "shortDescription": "", - "targets": ["dmg"] - } - } -} +{"tauri":{"bundle":{"icon":["/Users/tw93/www/pake/src-tauri/icons/icon.icns"],"identifier":"pake-bb6e08","active":true,"category":"DeveloperTool","copyright":"","externalBin":[],"longDescription":"","macOS":{"entitlements":null,"exceptionDomain":"","frameworks":[],"providerShortName":null,"signingIdentity":null},"resources":[],"shortDescription":"","targets":["dmg"]}}} \ No newline at end of file