mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-17 13:55:50 +00:00
perf: Vite 构建启用 code splitting,Bun RSS 从 966MB 降至 35MB
Bun/JSC 全量解析单文件大 JS 的 bytecode 和 JIT,17MB 产物导致 RSS 暴涨至 ~1GB(Node/V8 懒解析仅需 ~220MB)。启用代码分割后 Bun 按需加载 chunk,--version RSS 35MB,完整加载 ~500MB。 改动: - vite.config.ts: 移除 codeSplitting:false,添加 chunkFileNames - post-build.ts: 遍历 dist/ + dist/chunks/ 所有文件做 Bun patch - 新建 distRoot.ts 共享工具函数,统一路径定位逻辑 - ripgrep.ts/computerUse/setup.ts/claudeInChrome/setup.ts/updateCCB.ts: 用 distRoot 替换内联 import.meta.url 路径推算
This commit is contained in:
@@ -9,9 +9,9 @@ import chalk from 'chalk'
|
||||
import { execSync } from 'node:child_process'
|
||||
import { existsSync, readFileSync } from 'node:fs'
|
||||
import { homedir } from 'node:os'
|
||||
import { join, dirname } from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import { join } from 'node:path'
|
||||
import { logForDebugging } from '../utils/debug.js'
|
||||
import { distRoot } from '../utils/distRoot.js'
|
||||
import { execFileNoThrowWithCwd } from '../utils/execFileNoThrow.js'
|
||||
import { gracefulShutdown } from '../utils/gracefulShutdown.js'
|
||||
import { writeToStdout } from '../utils/process.js'
|
||||
@@ -19,12 +19,9 @@ import { writeToStdout } from '../utils/process.js'
|
||||
const PACKAGE_NAME = 'claude-code-best'
|
||||
|
||||
function getCurrentVersion(): string {
|
||||
// Read version from the nearest package.json (walks up from this file)
|
||||
// Read version from the nearest package.json (walks up from dist root)
|
||||
try {
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url))
|
||||
// In dev: src/cli/updateCCB.ts → ../../package.json
|
||||
// In build: dist/chunks/xxx.js → ../../package.json (may not exist)
|
||||
const pkgPath = join(__dirname, '..', '..', 'package.json')
|
||||
const pkgPath = join(distRoot, '..', 'package.json')
|
||||
if (existsSync(pkgPath)) {
|
||||
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'))
|
||||
if (pkg.version) return pkg.version
|
||||
|
||||
@@ -2,7 +2,6 @@ import { BROWSER_TOOLS } from '@ant/claude-for-chrome-mcp'
|
||||
import { chmod, mkdir, readFile, writeFile } from 'fs/promises'
|
||||
import { homedir } from 'os'
|
||||
import { join } from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
import {
|
||||
getIsInteractive,
|
||||
getIsNonInteractiveSession,
|
||||
@@ -11,6 +10,7 @@ import {
|
||||
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../../services/analytics/growthbook.js'
|
||||
import type { ScopedMcpServerConfig } from '../../services/mcp/types.js'
|
||||
import { isInBundledMode } from '../bundledMode.js'
|
||||
import { distRoot } from '../distRoot.js'
|
||||
import { getGlobalConfig, saveGlobalConfig } from '../config.js'
|
||||
import { logForDebugging } from '../debug.js'
|
||||
import {
|
||||
@@ -135,9 +135,7 @@ export function setupClaudeInChrome(): {
|
||||
systemPrompt: getChromeSystemPrompt(),
|
||||
}
|
||||
} else {
|
||||
const __filename = fileURLToPath(import.meta.url)
|
||||
const __dirname = join(__filename, '..')
|
||||
const cliPath = join(__dirname, 'cli.js')
|
||||
const cliPath = join(distRoot, 'cli.js')
|
||||
|
||||
void createWrapperScript(
|
||||
`"${process.execPath}" "${cliPath}" --chrome-native-host`,
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { buildComputerUseTools } from '@ant/computer-use-mcp'
|
||||
import { join } from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
import { buildMcpToolName } from '../../services/mcp/mcpStringUtils.js'
|
||||
import type { ScopedMcpServerConfig } from '../../services/mcp/types.js'
|
||||
|
||||
import { isInBundledMode } from '../bundledMode.js'
|
||||
import { distRoot } from '../distRoot.js'
|
||||
import { CLI_CU_CAPABILITIES, COMPUTER_USE_MCP_SERVER_NAME } from './common.js'
|
||||
import { getChicagoCoordinateMode } from './gates.js'
|
||||
|
||||
@@ -34,10 +34,7 @@ export function setupComputerUseMCP(): {
|
||||
// type 'stdio' to hit the right branch. Mirrors Chrome's setup.
|
||||
const args = isInBundledMode()
|
||||
? ['--computer-use-mcp']
|
||||
: [
|
||||
join(fileURLToPath(import.meta.url), '..', 'cli.js'),
|
||||
'--computer-use-mcp',
|
||||
]
|
||||
: [join(distRoot, 'cli.js'), '--computer-use-mcp']
|
||||
|
||||
return {
|
||||
mcpConfig: {
|
||||
|
||||
29
src/utils/distRoot.ts
Normal file
29
src/utils/distRoot.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { fileURLToPath } from 'url'
|
||||
import * as path from 'path'
|
||||
|
||||
/**
|
||||
* Resolve the dist root directory from the current module's location.
|
||||
*
|
||||
* Works across all build layouts:
|
||||
* - Single-file: dist/cli.js → dist/
|
||||
* - Code-split: dist/chunks/chunk-xxx.js → dist/
|
||||
* - Dev mode: src/utils/distRoot.ts → <project_root>/
|
||||
*/
|
||||
const __filename = fileURLToPath(import.meta.url)
|
||||
const __dirname = path.dirname(__filename)
|
||||
|
||||
const distRoot = (() => {
|
||||
const parts = __dirname.split(path.sep)
|
||||
const distIdx = parts.lastIndexOf('dist')
|
||||
if (distIdx !== -1) {
|
||||
return parts.slice(0, distIdx + 1).join(path.sep)
|
||||
}
|
||||
// Dev mode: from src/utils/ → project root
|
||||
const srcIdx = parts.lastIndexOf('src')
|
||||
if (srcIdx !== -1) {
|
||||
return parts.slice(0, srcIdx).join(path.sep)
|
||||
}
|
||||
return __dirname
|
||||
})()
|
||||
|
||||
export { distRoot }
|
||||
@@ -4,9 +4,9 @@ import memoize from 'lodash-es/memoize.js'
|
||||
import { homedir } from 'os'
|
||||
import * as path from 'path'
|
||||
import { logEvent } from 'src/services/analytics/index.js'
|
||||
import { fileURLToPath } from 'url'
|
||||
import { isInBundledMode } from './bundledMode.js'
|
||||
import { logForDebugging } from './debug.js'
|
||||
import { distRoot } from './distRoot.js'
|
||||
import { isEnvDefinedFalsy } from './envUtils.js'
|
||||
import { execFileNoThrow } from './execFileNoThrow.js'
|
||||
import { findExecutable } from './findExecutable.js'
|
||||
@@ -14,25 +14,9 @@ import { logError } from './log.js'
|
||||
import { getPlatform } from './platform.js'
|
||||
import { countCharInString } from './stringUtils.js'
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url)
|
||||
// we use node:path.join instead of node:url.resolve because the former doesn't encode spaces
|
||||
// In dev mode: __filename = <root>/src/utils/ripgrep.ts → __dirname = <root>/src/utils/
|
||||
// In built mode (bun): __filename = <root>/dist/chunk-xxx.js → need <root>/dist/
|
||||
// In built mode (vite): __filename = <root>/dist/chunks/chunk-xxx.js → need <root>/dist/
|
||||
// Both built modes: the dist root is at <root>/dist/ where dist/vendor/ripgrep/ lives.
|
||||
const __dirname = (() => {
|
||||
const dir = path.dirname(__filename)
|
||||
// Test mode: from src/utils/ → project root
|
||||
if (process.env.NODE_ENV === 'test') return path.resolve(dir, '../../../')
|
||||
// Check if we're inside a dist directory at any depth
|
||||
// (dist/ or dist/chunks/) — vendor lives at <dist-root>/vendor/ripgrep/
|
||||
const parts = dir.split(path.sep)
|
||||
const distIdx = parts.lastIndexOf('dist')
|
||||
if (distIdx !== -1) {
|
||||
return parts.slice(0, distIdx + 1).join(path.sep)
|
||||
}
|
||||
// Dev mode: from src/utils/ → src/utils/
|
||||
return dir
|
||||
if (process.env.NODE_ENV === 'test') return path.resolve(distRoot)
|
||||
return distRoot
|
||||
})()
|
||||
|
||||
type RipgrepConfig = {
|
||||
|
||||
Reference in New Issue
Block a user