You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04下Chromium编译失败求助

Chromium构建TypeScript编译错误排查方案

问题场景

按照Chromium官方文档构建流程操作:用fetch --no-history拉取代码,执行文档脚本安装依赖,运行gn gen out/Default生成构建配置后,执行autoninja -C out/Default chrome时出现TypeScript编译错误,已检查依赖安装和gclient sync,仍无法推进构建。

错误信息

$ gn gen out/Default
$ autoninja -C out/Default chrome
ninja: 进入目录 `out/Default'
[218/26862] ACTION //chrome/browser/resources/side_panel/reading_list:build_ts(//build/toolchain/linux:clang_x64)
FAILED: gen/chrome/browser/resources/side_panel/reading_list/tsconfig_build_ts.json gen/chrome/browser/resources/side_panel/reading_list/build_ts.manifest gen/chrome/browser/resources/side_panel/reading_list/tsc/app.js gen/chrome/browser/resources/side_panel/reading_list/tsc/app.d.ts gen/chrome/browser/resources/side_panel/reading_list/tsc/reading_list_item.js gen/chrome/browser/resources/side_panel/reading_list/tsc/reading_list_item.d.ts gen/chrome/browser/resources/side_panel/reading_list/tsc/reading_list_api_proxy.js gen/chrome/browser/resources/side_panel/reading_list/tsc/reading_list_api_proxy.d.ts gen/chrome/browser/resources/side_panel/reading_list/tsc/app.html.js gen/chrome/browser/resources/side_panel/reading_list/tsc/app.html.d.ts gen/chrome/browser/resources/side_panel/reading_list/tsc/reading_list_item.html.js gen/chrome/browser/resources/side_panel/reading_list/tsc/reading_list_item.html.d.ts gen/chrome/browser/resources/side_panel/reading_list/tsc/icons.html.js gen/chrome/browser/resources/side_panel/reading_list/tsc/icons.html.d.ts gen/chrome/browser/resources/side_panel/reading_list/tsc/reading_list.mojom-webui.js gen/chrome/browser/resources/side_panel/reading_list/tsc/reading_list.mojom-webui.d.ts 
python3 ../../tools/typescript/ts_library.py --root_dir gen/chrome/browser/resources/side_panel/reading_list/preprocessed --gen_dir gen/chrome/browser/resources/side_panel/reading_list --out_dir gen/chrome/browser/resources/side_panel/reading_list/tsc --output_suffix build_ts --in_files app.ts reading_list_item.ts reading_list_api_proxy.ts app.html.ts reading_list_item.html.ts icons.html.ts reading_list.mojom-webui.js --definitions ../../../../../../../../tools/typescript/definitions/metrics_private.d.ts --deps ../../../../../third_party/polymer/v3_0/tsconfig_library.json ../../../../../ui/webui/resources/tsconfig_library.json ../../../../../ui/webui/resources/mojo/tsconfig_library.json --tsconfig_base ../../../../../../../../chrome/browser/resources/side_panel/reading_list/tsconfig_base.json --composite --path_mappings chrome://resources/cr_components/managed_footnote/managed_footnote.js|../../../../../ui/webui/resources/preprocessed/cr_components/managed_footnote/managed_footnote.d.ts chrome://resources/cr_components/managed_dialog/managed_dialog.js|../../../../../ui/webui/resources/preprocessed/cr_components/managed_dialog/managed_dialog.d.ts chrome://resources/*|../../../../../ui/webui/resources/preprocessed/* //resources/*|../../../../../ui/webui/resources/preprocessed/* chrome://resources/polymer/v3_0/*|../../../../../../../../third_party/polymer/v3_0/components-chromium/* //resources/polymer/v3_0/*|../../../../../../../../third_party/polymer/v3_0/components-chromium/* chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js|../../../../../../../../third_party/polymer/v3_0/components-chromium/polymer/polymer.d.ts //resources/polymer/v3_0/polymer/polymer_bundled.min.js|../../../../../../../../third_party/polymer/v3_0/components-chromium/polymer/polymer.d.ts /tools/typescript/definitions/*|../../../../../../../../tools/typescript/definitions/*
Traceback (most recent call last):
  File "../../tools/typescript/ts_library.py", line 220, in <module>
    main(sys.argv[1:])
  File "../../tools/typescript/ts_library.py", line 183, in main
    node.RunNode([
  File "/home/boram/work/chromium/src/out/Default/../../third_party/node/node.py", line 34, in RunNode
    raise RuntimeError('命令 \'%s\' 执行失败\n%s' % (' '.join(cmd), err))
RuntimeError: 命令 '/home/boram/work/chromium/src/out/Default/../../third_party/node/linux/node-linux-x64/bin/node /home/boram/work/chromium/src/out/Default/../../third_party/node/node_modules/typescript/bin/tsc --project gen/chrome/browser/resources/side_panel/reading_list/tsconfig_build_ts.json' 执行失败
gen/chrome/browser/resources/side_panel/reading_list/preprocessed/app.ts:16:57 - 错误 TS2792: 找不到模块 'chrome://resources/cr_components/help_bubble/help_bubble_mixin.js'。是否要将 'moduleResolution' 选项设置为 'node',或者在 'paths' 选项中添加别名?

16 import {HelpBubbleMixin, HelpBubbleMixinInterface} from 'chrome://resources/cr_components/help_bubble/help_bubble_mixin.js';
                                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

gen/chrome/browser/resources/side_panel/reading_list/preprocessed/app.ts:108:12 - 错误 TS4113: 此成员不能使用 'override' 修饰符,因为它未在基类 'any' 中声明。

108   override connectedCallback() {

gen/chrome/browser/resources/side_panel/reading_list/preprocessed/app.ts:126:14 - 错误 TS4111: 属性 'root' 来自索引签名,因此必须使用 ['root'] 访问。

126         this.root!, MARKED_AS_READ_UI_EVENT, this.onMarkedAsRead.bind(this));
                 ~~~~

gen/chrome/browser/resources/side_panel/reading_list/preprocessed/app.ts:129:12 - 错误 TS4113: 此成员不能使用 'override' 修饰符,因为它未在基类 'any' 中声明。

129   override disconnectedCallback() {
               ~~~~~~~~~~~~~~~~~~~~

gen/chrome/browser/resources/side_panel/reading_list/preprocessed/app.ts:138:10 - 错误 TS4111: 属性 'unregisterHelpBubble' 来自索引签名,因此必须使用 ['unregisterHelpBubble'] 访问。

138     this.unregisterHelpBubble(READING_LIST_UNREAD_ELEMENT_ID);
             ~~~~~~~~~~~~~~~~~~~~

gen/chrome/browser/resources/side_panel/reading_list/preprocessed/app.ts:140:47 - 错误 TS4111: 属性 'root' 来自索引签名,因此必须使用 ['root'] 访问。

140     this.readingListEventTracker_.remove(this.root!, MARKED_AS_READ_UI_EVENT);
                                                  ~~~~

gen/chrome/browser/resources/side_panel/reading_list/preprocessed/app.ts:143:12 - 错误 TS4113: 此成员不能使用 'override' 修饰符,因为它未在基类 'any' 中声明。

143   override ready() {
               ~~~~~

gen/chrome/browser/resources/side_panel/reading_list/preprocessed/app.ts:146:10 - 错误 TS4111: 属性 'registerHelpBubble' 来自索引签名,因此必须使用 ['registerHelpBubble'] 访问。

146     this.registerHelpBubble(
             ~~~~~~~~~~~~~~~~~~

gen/chrome/browser/resources/side_panel/reading_list/preprocessed/app.ts:152:20 - 错误 TS4111: 属性 'root' 来自索引签名,因此必须使用 ['root'] 访问。

152               this.root!.querySelector('.unread-item') as HTMLElement | null;
                       ~~~~

gen/chrome/browser/resources/side_panel/reading_list/preprocessed/app.ts:154:18 - 错误 TS4111: 属性 'registerHelpBubble' 来自索引签名,因此必须使用 ['registerHelpBubble'] 访问。

154             this.registerHelpBubble(
                     ~~~~~~~~~~~~~~~~~~

gen/chrome/browser/resources/side_panel/reading_list/preprocessed/app.ts:265:10 - 错误 TS4111: 属性 'notifyHelpBubbleAnchorCustomEvent' 来自索引签名,因此必须使用 ['notifyHelpBubbleAnchorCustomEvent'] 访问。

265     this.notifyHelpBubbleAnchorCustomEvent(
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

gen/chrome/browser/resources/side_panel/reading_list/preprocessed/app.ts:308:49 - 错误 TS2345: 类型 'typeof ReadingListAppElement' 的参数不能赋给类型 'CustomElementConstructor' 的参数。
  类型 'ReadingListAppElement' 缺少类型 'HTMLElement' 中的以下属性: accessKey, accessKeyLabel, autocapitalize, dir,以及另外277个属性。

308 customElements.define(ReadingListAppElement.is, ReadingListAppElement);
                                                    ~~~~~~~~~~~~~~~~~~~~~

../../third_party/node/node_modules/typescript/lib/lib.dom.d.ts:4530:101 - 错误 TS2344: 类型 'HTMLElementTagNameMap[K]' 不满足约束 'Element'。
  类型 'HTMLTemplateElement | HTMLElement | HTMLSlotElement | DomModule | HTMLStyleElement | PaperRippleElement | ... 74 more ... | HTMLUListElement' 不能赋给类型 'Element'。
    类型 'ReadingListAppElement' 缺少类型 'Element' 中的以下属性: attributes, classList, className, clientHeight,以及另外160个属性。

4530     getElementsByTagName<K extends keyof HTMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementTagNameMap[K]>;
                                                                                                         ~~~~~~~~~~~~~~~~~~~~~~~~

../../third_party/node/node_modules/typescript/lib/lib.dom.d.ts:4818:101 - 错误 TS2344: 类型 'HTMLElementTagNameMap[K]' 不满足约束 'Element'。
  类型 'HTMLTemplateElement | HTMLElement | HTMLSlotElement | DomModule | HTMLStyleElement | PaperRippleElement | ... 74 more ... | HTMLUListElement' 不能赋给类型 'Element'。

4818     getElementsByTagName<K extends keyof HTMLElementTagNameMap>(qualifiedName: K): HTMLCollectionOf<HTMLElementTagNameMap[K]>;
                                                                                                         ~~~~~~~~~~~~~~~~~~~~~~~~

../../third_party/node/node_modules/typescript/lib/lib.dom.d.ts:10170:87 - 错误 TS2344: 类型 'HTMLElementTagNameMap[K]' 不满足约束 'Node'。
  类型 'HTMLTemplateElement | HTMLElement | HTMLSlotElement | DomModule | HTMLStyleElement | PaperRippleElement | ... 74 more ... | HTMLUListElement' 不能赋给类型 'Node'。
    类型 'ReadingListAppElement' 缺少类型 'Node' 中的以下属性: baseURI, childNodes, firstChild, isConnected,以及另外46个属性。

10170     querySelectorAll<K extends keyof HTMLElementTagNameMap>(selectors: K): NodeListOf<HTMLElementTagNameMap[K]>;
                                                                                            ~~~~~~~~~~~~~~~~~~~~~~~~


在2个文件中发现15个错误。

错误数  文件
    12  gen/chrome/browser/resources/side_panel/reading_list/preprocessed/app.ts:16
     3  ../../third_party/node/node_modules/typescript/lib/lib.dom.d.ts:4530

错误分析

所有错误的根源是找不到help_bubble_mixin.js模块,导致TypeScript无法正确识别组件的基类类型,进而引发后续的override修饰符、属性访问方式、自定义元素类型匹配等一系列派生错误。

解决步骤

1. 重新同步完整代码与依赖

执行以下命令确保所有子模块和预生成资源文件同步到位:

gclient sync --with_branch_heads --with_tags

2. 清理并重建构建配置

# 清理旧构建目录
gn clean out/Default
# 重新生成构建配置
gn gen out/Default

3. 生成缺失的预处理资源文件

如果ui/webui/resources/preprocessed/cr_components/help_bubble/目录不存在,执行Grit工具生成预处理资源:

tools/grit/grit.py build

4. 验证依赖版本匹配

Chromium构建依赖代码库内置的Node.js和TypeScript版本,禁止使用系统版本,执行以下命令确认版本合规:

# 检查Node.js版本
./third_party/node/linux/node-linux-x64/bin/node --version
# 检查TypeScript版本
./third_party/node/node_modules/typescript/bin/tsc --version

5. 增量修复构建

删除出错模块的预生成文件,让构建系统重新生成:

rm -rf out/Default/gen/chrome/browser/resources/side_panel/reading_list/
# 重新执行构建
autoninja -C out/Default chrome

内容的提问来源于stack exchange,提问作者cocobang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:40:18