-
Notifications
You must be signed in to change notification settings - Fork 74
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add stats.modules config to generate modules with deps and dependents #1202
Conversation
Walkthrough这些变更主要集中于配置和统计模块的改进。引入了新的 Changes
Note Free review on us!CodeRabbit is offering free reviews until Mon May 27 2024 to showcase some of the refinements we've made. TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (invoked as PR comments)
Additionally, you can add CodeRabbit Configration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Review Details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (9)
- crates/mako/src/config/config.rs (4 hunks)
- crates/mako/src/features/rsc.rs (4 hunks)
- crates/mako/src/generate/mod.rs (4 hunks)
- crates/mako/src/stats.rs (14 hunks)
- docs/config.md (1 hunks)
- e2e/fixtures/rsc.client.dynamic_client/mako.config.json (1 hunks)
- e2e/fixtures/rsc.server/mako.config.json (1 hunks)
- examples/rsc/build.js (2 hunks)
- packages/bundler-mako/index.js (1 hunks)
Additional Context Used
LanguageTool (12)
docs/config.md (12)
Near line 17: The word ‘mako’ is not correct in this context. Consider using the plural form, adding a determiner like ‘the’ or ‘a’, or adding a preposition like ‘at’ or ‘in’.
Context: ...s" } } ``` Notice: When you're using mako with Umi, prefer to config the bundler ...
Near line 91: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ... used in server-side rendering scenarios, because when server-side rendering, you don't n...
Near line 138: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...ing a pure server-side rendering project, because assets files are not needed at this tim...
Near line 268: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ... configuration can only be used with umd, because injecting CSS is not a recommended way ...
Near line 326: Loose punctuation mark.
Context: ... Output related configuration. -path
, output directory -mode
, output mode,...
Near line 341: Loose punctuation mark.
Context: ...on items are supported. -skipModules
, optimize the size by skipping modules w...
Near line 351: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...o setdynamicImportToRequire
totrue
, because the runtime does not yet support node-s...
Near line 394: Loose punctuation mark.
Context: ...r to enable px2rem conversion. -root
, root font size, default is100
- `pro...
Near line 442: Loose punctuation mark.
Context: ... }resolve
configuration. -
alias, alias configuration -
extensions`, fil...
Near line 474: Loose punctuation mark.
Context: ...iguration items: -clientComponentTpl
, client component template, use `{{path}...
Near line 475: Loose punctuation mark.
Context: ...resent the id of the module. -emitCSS
, whether to output CSS components. ### ...
Near line 486: Loose punctuation mark.
Context: ... Child configuration items: -modules
, whether to generate module information,...
Additional comments not posted (29)
e2e/fixtures/rsc.client.dynamic_client/mako.config.json (1)
10-12
: 配置更新正确,将stats
从布尔值更改为对象,并添加了modules
属性,以支持更细粒度的统计配置。e2e/fixtures/rsc.server/mako.config.json (1)
7-9
: 配置更新正确,将stats
从布尔值更改为对象,并添加了modules
属性,以支持更细粒度的统计配置。examples/rsc/build.js (2)
32-34
: 配置更新正确,将stats
从布尔值更改为对象,并添加了modules
属性,以支持更细粒度的统计配置。
73-75
: 配置更新正确,将stats
从布尔值更改为对象,并添加了modules
属性,以支持更细粒度的统计配置。crates/mako/src/features/rsc.rs (3)
21-24
: 更新了RscCssModules
结构,添加了module_id
和modules
字段,以支持模块的更好处理和配置。
62-66
: 更新了generate_client
函数,以使用新的模块 ID 字段。这与 PR 目标一致,旨在增强模块处理和配置。
94-97
: 更新了emit_css
函数,以使用新的module_id
和modules
字段。这与 PR 目标一致,旨在增強模块处理和配置。docs/config.md (1)
472-487
: 文档更新正确,反映了新的stats
配置结构。这与 PR 目标一致,旨在提供更细粒度的统计配置。packages/bundler-mako/index.js (1)
25-27
: 配置更新正确,将stats
从布尔值更改为对象,并添加了modules
属性,以支持更细粒度的统计配置。crates/mako/src/stats.rs (14)
7-7
: 增加了对Arc
和Mutex
的使用,以支持线程安全的数据访问。这是处理并发数据访问的常见做法。
17-17
: 引入了新的模块和上下文依赖,这有助于管理和使用不同的功能模块。
44-49
: 定义了新的ModuleInfo
结构,用于存储模块的 ID、依赖项和依赖者。这是对模块信息管理的一个重要扩展。
56-56
: 在StatsInfo
结构中添加了modules
字段,用于存储模块信息。使用Mutex
保证线程安全。
65-65
: 初始化modules
为一个新的空HashMap
,这是对StatsInfo
结构的逻辑扩展。
96-120
: 实现了parse_modules
方法,用于解析模块依赖和依赖者信息。这个方法通过读取模块图来构建每个模块的ModuleInfo
,并将其存储在modules
中。这是模块信息处理的核心功能。
122-124
: 实现了get_modules
方法,返回一个包含所有模块信息的HashMap
。这提供了一个访问所有模块数据的接口。
173-175
: 定义了StatsJsonModuleItem
结构,用于序列化模块信息。这有助于将模块数据转换为 JSON 格式,以便于传输和存储。
177-178
: 定义了StatsJsonChunkModuleItem
结构,用于处理和存储块模块的信息。这是对模块信息管理的进一步扩展。
202-202
: 在StatsJsonChunkItem
结构中添加了modules
字段,用于存储关联的模块信息。这有助于在处理块数据时保持模块的关联性。
220-221
: 在StatsJsonMap
结构中添加了chunk_modules
和modules
字段,用于存储块模块和模块信息。这是对统计信息结构的重要扩展。
238-239
: 初始化modules
和chunk_modules
为新的空集合,这是对StatsJsonMap
结构的逻辑扩展。
306-306
: 在create_stats_info
函数中,如果配置中启用了统计信息,将调用write_stats
函数。这确保了只有在需要时才生成和写入统计信息。
431-433
: 在create_stats_info
函数中,从modules_vec
中收集所有模块信息,并将其存储在chunk_modules
中。这是对模块信息处理的最终步骤。crates/mako/src/generate/mod.rs (4)
73-81
: 在生成过程中,如果配置启用了模块统计,将调用parse_modules
方法。这是对模块解析逻辑的直接集成,确保在生成之前正确处理模块依赖信息。
177-177
: 在生成统计信息之前,检查配置是否启用了统计。这是一个好的实践,确保只在需要时执行相关操作。
261-269
: 在热更新生成过程中,同样检查了统计配置,并在启用的情况下解析模块。这保持了与常规生成过程的一致性,并确保了热更新时模块依赖的正确处理。
306-306
: 在热更新过程中,如果配置启用了统计,将生成并写入统计信息。这与常规生成流程保持一致,确保了统计信息的正确生成和更新。crates/mako/src/config/config.rs (2)
190-193
: 新增StatsConfig
结构体,用于更细粒度地控制统计配置,特别是模块统计的启用与禁用。这一变更与 PR 目标一致,即允许对统计进行更详细的配置。
439-439
: 修改Config
结构体中的stats
字段,从布尔值改为Option<StatsConfig>
类型。这一改动是为了支持新引入的StatsConfig
结构体,允许通过设置为None
来显式禁用统计,或在为Some
时进行更细粒度的配置。这一变更是支持 PR 描述的新功能所必需的。
1、for #1175 , we need to know the relationship between modules
2、since module concat will modify the module graph, so we need to parse the modules before optimization
Summary by CodeRabbit
新功能
文档
clientComponentTpl
、emitCSS
和modules
的描述。修复
stats
配置,从布尔值更改为包含modules
属性的对象。重构
Option<StatsConfig>
代替布尔值。样式
build.js
文件中的注释,禁用了moduleIdStrategy: 'hashed'
配置。