reduce production package size by set node-linker=hoisted

This commit is contained in:
geekgeekrun
2024-11-30 15:31:23 +08:00
parent 11471e3ee5
commit da72bec6a7
19 changed files with 22 additions and 6327 deletions

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
node-linker=hoisted

File diff suppressed because it is too large Load Diff

View File

@@ -56,30 +56,14 @@ let puppeteer
let StealthPlugin
export async function initPuppeteer () {
// production
if (
isRunFromUi && !isUiDev
) {
const electron = await import('electron')
const runtimeDependencies = await import(
'file://' +
path.resolve(
electron.app.getAppPath(),
'..',
'external-node-runtime-dependencies/index.mjs'
)
)
puppeteer = runtimeDependencies.puppeteerExtra.default
StealthPlugin = runtimeDependencies.PuppeteerExtraPluginStealth.default
} else {
const importResult = await Promise.all(
[
import('puppeteer-extra'),
import('puppeteer-extra-plugin-stealth')
]
)
puppeteer = importResult[0].default
StealthPlugin = importResult[1].default
}
const importResult = await Promise.all(
[
import('puppeteer-extra'),
import('puppeteer-extra-plugin-stealth')
]
)
puppeteer = importResult[0].default
StealthPlugin = importResult[1].default
puppeteer.use(StealthPlugin())
return {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -21,14 +21,11 @@ import { VMarkAsNotSuitLog } from "./entity/VMarkAsNotSuitLog"
import { ChatMessageRecord } from './entity/ChatMessageRecord'
import sqlite3 from 'sqlite3';
import * as cliHighlight from 'cli-highlight';
import { saveChatStartupRecord, saveJobInfoFromRecommendPage, saveMarkAsNotSuitRecord } from "./handlers";
import { UpdateChatStartupLogTable1729182577167 } from "./migrations/1729182577167-UpdateChatStartupLogTable";
import minimist from 'minimist'
import { UpdateBossInfoTable1732032381304 } from "./migrations/1732032381304-UpdateBossInfoTable";
Boolean(cliHighlight);
export function initDb(dbFilePath) {
const { DataSource } = requireTypeorm()
const appDataSource = new DataSource({

View File

@@ -1,9 +1,8 @@
import * as path from 'node:path';
import type TypeormType from 'typeorm'
const isRunFromUi = Boolean(process.env.MAIN_BOSSGEEKGO_UI_RUN_MODE)
const isUiDev = process.env.NODE_ENV === 'development'
export function requireTypeorm (): typeof TypeormType {
export function requireTypeorm () {
const importResult = require('typeorm')
return importResult
}

View File

@@ -1,3 +1,3 @@
electron_mirror=https://npmmirror.com/mirrors/electron/
electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/
shamefully-hoist=true
node-linker=hoisted

View File

@@ -17,8 +17,6 @@ files:
- '!node_modules/typeorm/browser/*'
asarUnpack:
- 'resources/**'
extraResources:
- external-node-runtime-dependencies/**
win:
executableName: geekgeekrun
nsis:

View File

@@ -11,7 +11,7 @@ export default defineConfig({
main: {
build: {
rollupOptions: {
external: ['puppeteer', 'puppeteer-extra', '@puppeteer/browsers', 'find-chrome-bin']
external: []
}
},
plugins: [

View File

@@ -1,5 +0,0 @@
Object.assign(module.exports, {
puppeteerExtra: require('puppeteer-extra'),
PuppeteerExtraPluginStealth: require('puppeteer-extra-plugin-stealth'),
puppeteerManager: require('@puppeteer/browsers')
})

View File

@@ -1,4 +0,0 @@
export * as puppeteerExtra from 'puppeteer-extra'
export * as PuppeteerExtraPluginStealth from 'puppeteer-extra-plugin-stealth'
export * as puppeteerManager from '@puppeteer/browsers'
export * as findChromeBin from 'find-chrome-bin'

File diff suppressed because it is too large Load Diff

View File

@@ -1,18 +0,0 @@
{
"name": "geekgeekrun-external-node-runtime-dependencies",
"version": "1.0.0",
"description": "",
"main": "index.cjs",
"module": "index.mjs",
"scripts": {},
"author": "",
"license": "ISC",
"dependencies": {
"@puppeteer/browsers": "^2.0.0",
"find-chrome-bin": "^2.0.1",
"puppeteer": "20.1.0",
"puppeteer-extra": "3.3.6",
"puppeteer-extra-plugin-stealth": "2.11.2"
},
"packageManager": "npm"
}

View File

@@ -25,7 +25,6 @@
"build:mac": "npm run build && electron-builder --mac",
"build:linux": "npm run build && electron-builder --linux",
"build:make-dist-for-current-platform": "npm run build && node ./scripts/make-dist-for-current-platform.mjs",
"install": "cd ./external-node-runtime-dependencies && cross-env PUPPETEER_SKIP_DOWNLOAD=1 npm install --omit=dev",
"release": "node ./scripts/release-new-version.mjs"
},
"dependencies": {
@@ -61,7 +60,7 @@
"@vue/eslint-config-typescript": "^12.0.0",
"animate.css": "^4.1.1",
"cross-env": "^7.0.3",
"electron": "^28.2.0",
"electron": "28.2.0",
"electron-builder": "^24.9.1",
"electron-vite": "^2.0.0",
"element-plus": "^2.5.5",
@@ -83,4 +82,4 @@
"vue-router": "^4.2.5",
"vue-tsc": "^1.8.27"
}
}
}

View File

@@ -15,28 +15,7 @@ import gtag from '../../../../utils/gtag'
const getPuppeteerManagerModule = async () => {
let puppeteerManager
if (process.env.NODE_ENV === 'development') {
puppeteerManager = await import('@puppeteer/browsers')
} else if (isMainThread) {
const electron = await import('electron')
puppeteerManager = (
await import(
'file://' +
path.resolve(
electron.app.getAppPath(),
'..',
'external-node-runtime-dependencies/index.mjs'
)
)
).puppeteerManager
} else {
puppeteerManager = (
await import(
'file://' +
path.join(__dirname, '../../..', '/external-node-runtime-dependencies/index.mjs')
)
).puppeteerManager
}
puppeteerManager = await import('@puppeteer/browsers')
return puppeteerManager
}
@@ -177,28 +156,7 @@ export async function findAndLocateUserInstalledChromiumExecutableSync(): Promis
// For other, use findChrome
let findChrome: typeof import('find-chrome-bin').findChrome
if (process.env.NODE_ENV === 'development') {
findChrome = (await import('find-chrome-bin')).findChrome
} else if (isMainThread) {
const electron = await import('electron')
findChrome = (
await import(
'file://' +
path.resolve(
electron.app.getAppPath(),
'..',
'external-node-runtime-dependencies/index.mjs'
)
)
).findChromeBin.findChrome
} else {
findChrome = (
await import(
'file://' +
path.join(__dirname, '../../..', '/external-node-runtime-dependencies/index.mjs')
)
).findChromeBin.findChrome
}
findChrome = (await import('find-chrome-bin')).findChrome
const targetBrowser = await findChrome({
min: exceptChromiumMainVersion
})

File diff suppressed because it is too large Load Diff

8
pnpm-lock.yaml generated
View File

@@ -191,7 +191,7 @@ importers:
specifier: ^7.0.3
version: 7.0.3
electron:
specifier: ^28.2.0
specifier: 28.2.0
version: 28.2.0
electron-builder:
specifier: ^24.9.1
@@ -1662,6 +1662,7 @@ packages:
resolution: {integrity: sha512-oZFKlC8l5YtzGQNT4zC2PiSSKzQVZ8bAwwd+EYdPLtyk0nSEq6O16SkK+rkkT2eflDAbormJgEF3QnH3oDrTSw==}
dependencies:
undici-types: 5.26.5
dev: true
/@types/plist@3.0.5:
resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==}
@@ -2571,6 +2572,7 @@ packages:
/boolean@3.2.0:
resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==}
deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
requiresBuild: true
optional: true
@@ -3275,7 +3277,7 @@ packages:
requiresBuild: true
dependencies:
'@electron/get': 2.0.3
'@types/node': 18.19.9
'@types/node': 18.19.15
extract-zip: 2.0.1
transitivePeerDependencies:
- supports-color
@@ -4912,6 +4914,7 @@ packages:
/npmlog@5.0.1:
resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
deprecated: This package is no longer supported.
dependencies:
are-we-there-yet: 2.0.0
console-control-strings: 1.1.0
@@ -4922,6 +4925,7 @@ packages:
/npmlog@6.0.2:
resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
deprecated: This package is no longer supported.
requiresBuild: true
dependencies:
are-we-there-yet: 3.0.1