在本文中,我们概述了 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中文网其他相关文章!