mirror of
https://github.com/geekgeekrun/geekgeekrun.git
synced 2026-09-04 23:17:39 +08:00
import different puppeteer for prod and dev environments. prod use home folder one, dev use local node_modules one. add logic for download puppeteer.
This commit is contained in:
@@ -13,13 +13,13 @@ import { readConfigFile, ensureConfigFileExist } from './runtime-file-utils.mjs'
|
||||
ensureConfigFileExist()
|
||||
|
||||
const isRunFromUi = Boolean(process.env.MAIN_BOSSGEEKGO_UI_RUN_MODE)
|
||||
const isUiDev = process.env.NODE_ENV === 'development'
|
||||
|
||||
let puppeteer, StealthPlugin
|
||||
export async function initPuppeteer () {
|
||||
// production
|
||||
if (
|
||||
isRunFromUi
|
||||
// &&
|
||||
// process.mainModule.filename.indexOf('app.asar') !== -1
|
||||
isRunFromUi && !isUiDev
|
||||
) {
|
||||
const runtimeDependencies = await import(
|
||||
path.join(
|
||||
|
||||
@@ -6,7 +6,7 @@ export default defineConfig({
|
||||
main: {
|
||||
build: {
|
||||
rollupOptions: {
|
||||
external: ['puppeteer', 'puppeteer-extra', 'puppeteer-extra-plugin-stealth']
|
||||
external: ['puppeteer', 'puppeteer-extra', 'puppeteer-extra-plugin-stealth', '@puppeteer/browsers']
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
|
||||
+25
-6
@@ -2,6 +2,7 @@ import * as path from 'node:path'
|
||||
import * as os from 'node:os'
|
||||
import * as fs from 'node:fs'
|
||||
import type { InstalledBrowser } from '@puppeteer/browsers'
|
||||
import { isDev } from '../../runtimeDesidedEnv'
|
||||
|
||||
const expectBuildId = process.env.EXPECT_CHROME_FOR_PUPPETEER_BUILD_ID || '121.0.6167.85'
|
||||
const cacheDir = path.join(
|
||||
@@ -11,22 +12,40 @@ const cacheDir = path.join(
|
||||
'static'
|
||||
)
|
||||
|
||||
const checkAndDownloadPuppeteer = async (options: {
|
||||
downloadProgressCallback?: (downloadedBytes: number, totalBytes: number) => void
|
||||
}) => {
|
||||
const puppeteerManager = await import('@puppeteer/browsers')
|
||||
const executablePath = puppeteerManager.computeExecutablePath({
|
||||
const getPuppeteerManagerModule = async () => {
|
||||
if (!isDev) {
|
||||
const runtimeDependencies = await import(
|
||||
path.join(os.homedir(), '.bossgeekgo', 'external-node-runtime-dependencies/index.mjs')
|
||||
)
|
||||
return runtimeDependencies.puppeteerManager
|
||||
} else {
|
||||
const importResult = await import('@puppeteer/browsers')
|
||||
return importResult
|
||||
}
|
||||
}
|
||||
|
||||
export const getExpectPuppeteerExecutablePath = async () => {
|
||||
const puppeteerManager = await getPuppeteerManagerModule()
|
||||
|
||||
return puppeteerManager.computeExecutablePath({
|
||||
browser: puppeteerManager.Browser.CHROME,
|
||||
cacheDir,
|
||||
buildId: expectBuildId
|
||||
})
|
||||
}
|
||||
|
||||
const checkAndDownloadPuppeteer = async (options: {
|
||||
downloadProgressCallback?: (downloadedBytes: number, totalBytes: number) => void
|
||||
}) => {
|
||||
const puppeteerManager = await getPuppeteerManagerModule()
|
||||
const executablePath = await getExpectPuppeteerExecutablePath()
|
||||
let installedBrowser: InstalledBrowser
|
||||
if (!fs.existsSync(executablePath)) {
|
||||
// maybe the exist installation is broken.
|
||||
await puppeteerManager.uninstall({
|
||||
cacheDir,
|
||||
buildId: expectBuildId,
|
||||
browser: puppeteerManager.Browser.CHROME,
|
||||
browser: puppeteerManager.Browser.CHROME
|
||||
})
|
||||
installedBrowser = await puppeteerManager.install({
|
||||
browser: puppeteerManager.Browser.CHROME,
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
export const isDev = process.env.NODE_ENV === 'development'
|
||||
@@ -9,6 +9,8 @@ import {
|
||||
writeConfigFile
|
||||
} from '@bossgeekgo/geek-auto-start-chat-with-boss/runtime-file-utils.mjs'
|
||||
import { ChildProcess } from 'child_process'
|
||||
import { isDev } from '../runtimeDesidedEnv'
|
||||
import { getExpectPuppeteerExecutablePath } from '../flow/CHECK_AND_DOWNLOAD_DEPENDENCIES/check-and-download-puppeteer'
|
||||
let mainWindow: BrowserWindow
|
||||
|
||||
export function createMainWindow(): void {
|
||||
@@ -20,8 +22,8 @@ export function createMainWindow(): void {
|
||||
autoHideMenuBar: true,
|
||||
...(process.platform === 'linux'
|
||||
? {
|
||||
/* icon */
|
||||
}
|
||||
/* icon */
|
||||
}
|
||||
: {}),
|
||||
webPreferences: {
|
||||
preload: path.join(__dirname, '../preload/index.js'),
|
||||
@@ -85,13 +87,18 @@ export function createMainWindow(): void {
|
||||
if (subProcessOfPuppeteer) {
|
||||
return
|
||||
}
|
||||
console.log(process)
|
||||
|
||||
const subProcessEnv = {
|
||||
...process.env,
|
||||
MAIN_BOSSGEEKGO_UI_RUN_MODE: 'geekAutoStartWithBoss'
|
||||
}
|
||||
if (!isDev) {
|
||||
Object.assign(subProcessEnv, {
|
||||
PUPPETEER_EXECUTABLE_PATH: await getExpectPuppeteerExecutablePath()
|
||||
})
|
||||
}
|
||||
subProcessOfPuppeteer = childProcess.spawn(process.argv[0], process.argv.slice(1), {
|
||||
env: {
|
||||
...process.env,
|
||||
MAIN_BOSSGEEKGO_UI_RUN_MODE: 'geekAutoStartWithBoss'
|
||||
// PUPPETEER_EXECUTABLE_PATH: '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge'
|
||||
},
|
||||
env: subProcessEnv,
|
||||
stdio: [null, null, null, 'pipe']
|
||||
})
|
||||
subProcessOfPuppeteer.once('exit', () => {
|
||||
@@ -103,11 +110,15 @@ export function createMainWindow(): void {
|
||||
return new Promise((resolve) => {
|
||||
subProcessOfPuppeteer!.stdio[3]!.on('data', (raw) => {
|
||||
const data = JSON.parse(raw.toString())
|
||||
if (data.type === 'PUPPETEER_MAY_NOT_INSTALLED') {
|
||||
resolve(data)
|
||||
}
|
||||
if (data.type === 'GEEK_AUTO_START_CHAT_WITH_BOSS_STARTED') {
|
||||
resolve(data)
|
||||
switch (data.type) {
|
||||
case 'GEEK_AUTO_START_CHAT_WITH_BOSS_STARTED':
|
||||
case 'PUPPETEER_MAY_NOT_INSTALLED': {
|
||||
resolve(data)
|
||||
break
|
||||
}
|
||||
default: {
|
||||
return
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user