在本文中,我們概述了 trpc 原始碼中的analyzeSizeChange 腳本。
該檔案有以下功能:
1. funcanalyzeSizeChange
2. 函數分析
3. 輸入 GitHubLogType
4. 輸入 GitHubLogOptions
5. func logNewModule
6. func logDifference
7. func logGithubMessage
8. 功能區別
9. funcresolveJsonPaths
10. func stripAnsiEscapes
11. func formatGithubOptions
12. func 格式Github訊息
這裡最重要的函數是analyzeSizeChange,因為它有一個名為onAnalysis的函數。
export default function analyzeSizeChange(packageDir: string) { let analyzePluginIterations = 0; return analyze({ summaryOnly: process.env.CI ? undefined : true, skipFormatted: process.env.CI ? true : undefined, onAnalysis: (analysis) => { … // calls logDifference if (prevModule) { logDifference( `Module '${module.id}'`, prevModule.size, module.size, ); } else { logNewModule(module.id, module.size); } … }) }
logDifference 和 logNewModule 位於同一個檔案中並且位於相同位置。這是為了可讀性和可重用性目的。
function logNewModule(name: string, size: number) { if (size < ABSOLUTE_BYTE_CHANGE_THRESHOLD) { return; } const type = 'notice'; const options = { title: `New Module (${size} bytes in ${name})`, }; const message = `${name} size: ${size} bytes`; logGithubMessage(type, message, options); }
logNewModule 在此之後呼叫名為 logGithubMessage 的函數,該函數位於同一檔案底部的某個位置
功能。
function logDifference(name: string, before: number, after: number) { const change = difference(before, after); if ( change.absolute < ABSOLUTE_BYTE_CHANGE_THRESHOLD && change.percent < PERCENT_CHANGE_THRESHOLD ) { return; } const type = 'error'; const options = { title: `Important Size Change (${change.absolute} bytes in ${name})`, }; const message = `${name} size change: ${ change.absolute } bytes (${change.percent.toFixed(2)}%)`; logGithubMessage(type, message, options); }
logDifference呼叫了logGithubMessage和difference函數,此時我們可以看到函數層次結構為
由上至下,核心功能排名較高,單一職責功能排名較低。
function logGithubMessage( type: GitHubLogType, message: string, options: GitHubLogOptions = {}, ) { console.log( stripAnsiEscapes( `::${type} ${formatGithubOptions(options)}::${formatGithubMessage( message, ) }`, ), ); }
logGithubMessage 使用三個函式 — stripAnsiEscapes、formatGithubOptions 和 formatGithubMessage。
在 Thinkthroo,我們研究大型開源專案並提供架構指南。我們開發了使用 tailwind 建立的 resubale 元件,您可以在您的專案中使用它們。我們提供 Next.js、React 和 Node 開發服務。
與我們預約會面討論您的專案。
1. https://github.com/trpc/trpc/blob/next/scripts/analyzeSizeChange.ts
以上是tRPC原始碼中的analyzeSizeChange腳本的詳細內容。更多資訊請關注PHP中文網其他相關文章!