添加新文件 - 各种 DevTools 资源类型

此页面列出了各种 DevTools 资源类型以及如何创建和加载它们。

JavaScript 模块

构建配置

JavaScript 模块由我们的构建系统使用 moz.build 文件安装。如果添加新的 JavaScript 模块,则需要更新(或添加)其中一个文件,以使构建系统了解新模块。请参阅以下示例。

moz.build 文件必须与要安装的文件位于同一目录中。不要在父目录的 moz.build 中列出子目录中的文件。

按照这些步骤可以确保 require()resource:// 路径直接映射到源代码树中的位置,而不是完全任意。

示例

  • 文件:/devtools/server/actors/layout.js

  • /devtools/server/actors/moz.build

DevToolsModules(
  'layout.js'
)

require()

大多数 DevTools JS 代码采用 CommonJS 模块的形式,并使用 require() 加载。

require() 一个文件,模块 ID 正是其源代码树路径。

示例

  • 文件:/devtools/server/actors/layout.js

  • 用法(在大多数情况下优先使用延迟加载)

    • loader.lazyRequireGetter(this, "layout", "devtools/server/actors/layout")

    • require("devtools/server/actors/layout")

ChromeUtils.import()

一些较旧的 DevTools JS 模块使用 Gecko JavaScript 代码模块格式,文件扩展名为 .jsm。我们正在尝试放弃这种格式,因此您不太可能添加新的格式,但您可能需要在代码中导入现有的格式。

这些模块使用 ChromeUtils.import() 加载。要 import() 一个文件,您需要提供一个 resource:// URL,该 URL 正是源代码树路径。

详细说明

  • /devtools/client/<X>: resource://devtools/client/<X>

  • /devtools/server/<X>: resource://devtools/server/<X>

  • /devtools/shared/<X>: resource://devtools/shared/<X>

示例

  • 文件:/devtools/shared/loader/Loader.sys.mjs

  • 用法

    • const { loader } = ChromeUtils.importESModule("resource://devtools/shared/loader/Loader.sys.mjs")

示例

  • 文件:/toolkit/mozapps/extensions/AddonManager.jsm

  • 用法(在大多数情况下优先使用延迟加载)

    • const lazy = {}; ChromeUtils.defineModuleGetter(lazy, "AddonManager", "resource://gre/modules/AddonManager.jsm")

    • const { AddonManager } = ChromeUtils.import("resource://gre/modules/AddonManager.jsm")

Chrome 内容

DevTools 前端/UI 的大部分内容目前使用 chrome:// URL 加载,这些 URL 允许这些文件拥有对平台内部的权限访问。

这通常用于在 UI 中加载 XUL、HTML 和 JS 文件。

注意:“Chrome”在这里指的是“浏览器 Chrome”,也就是 UI,与“Chrome”作为浏览器的名称无关。我们希望在 DevTools 上放弃这种做法,并更像普通的网站,但目前大多数工具仍在使用 chrome:// URL。

打包

如果添加了一个应通过 chrome:// URL 加载的新文件,则需要更新 /devtools/client/jar.mn 中的清单文件,以便正确打包。

请确保添加所有新文件,使其完整的源代码树路径成为 URL 的一部分。为此,jar.mn 条目应如下所示

content/<X> (<X>)

其中 <X> 是删除 /devtools/client/ 前缀后文件的路径。

示例

  • 文件:/devtools/client/webaudioeditor/models.js

  • 条目:content/webaudioeditor/models.js (webaudioeditor/models.js)

用法

Chrome 内容 URL 与其源代码树路径几乎相同,但有一点不同:段 client 被替换为 content。这是 chrome:// 协议处理程序的要求。

示例

  • 文件:/devtools/client/webaudioeditor/models.js 用法:chrome://devtools/content/webaudioeditor/models.js

对于单个工具中的文件,请考虑使用相对 URL。它们更短!

Chrome 主题

与上面的 Chrome 内容部分类似,我们还在 DevTools UI 中使用 Chrome 主题(或 skin URL)。这些通常用于加载 CSS 和图像。

打包

如果添加了一个应通过 chrome:// 加载的新文件(例如工具 UI 的新 CSS 文件),则需要更新 /devtools/client/jar.mn 中的清单文件,以便正确打包。

请确保添加所有新文件,使其完整的源代码树路径成为 URL 的一部分。为此,jar.mn 条目应如下所示

skin/<X> (themes/<X>)

其中 <X> 是删除 /devtools/client/themes/ 前缀后文件的路径。

示例

  • 文件:/devtools/client/themes/images/add.svg

  • 条目:skin/images/add.svg (themes/images/add.svg)

用法

Chrome 主题 URL 与其源代码树路径几乎相同,但有一点不同:段 client/themes 被替换为 skin。这是 chrome:// 协议处理程序的要求。

示例

  • 文件:/devtools/client/themes/images/add.svg

  • 用法:chrome://devtools/skin/images/add.svg

本地化 (l10n)

与上面其他 Chrome 部分类似,我们还在 DevTools UI 中使用 locale URL 加载本地化字符串。此部分适用于 *.dtd(用于作为 XUL/XHTML 文件中的实体)和 *.properties(用于通过运行时 API)文件。

我们目前有两组本地化文件

  • devtools/client/locales:DevTools 客户端(前端 UI)中使用的字符串

  • devtools/shared/locales:仅在 DevTools 服务器中使用或与客户端和服务器共享的字符串

打包

如果添加新的 l10n 文件(例如新的 *.dtd*.properties 文件),则无需执行其他打包步骤,假设新文件放置在上面提到的两个目录之一中。每个目录都包含一个 jar.mn,默认情况下,该文件使用通配符打包目录中的所有文件。

用法

Locale URL 根据它们是在 client 还是 shared 中有所不同。虽然我们希望它们与源代码树路径匹配,但 chrome:// 协议的要求使得这难以实现。

示例

  • 文件:/devtools/client/locales/en-US/debugger.dtd

  • 用法:chrome://devtools/locale/debugger.dtd

示例

  • 文件:/devtools/shared/locales/en-US/screenshot.properties

  • 用法:chrome://devtools-shared/locale/screenshot.properties

指南

本地化文件应遵循一套旨在简化人员翻译这些文件中标签的指南,以多种语言翻译。

阅读开发人员最佳实践.

特别是,为新密钥编写自解释的注释、删除未使用的密钥、在更改字符串含义时更改密钥名称等非常重要。因此,如果您必须在补丁中修改本地化文件,请务必通读这些指南。