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