构建系统负责将 Markdown Here 代码库编译成针对特定浏览器的扩展包。它通过平台特定的处理转换源文件,应用条件编译,并为 Chrome、Firefox 和 Thunderbird 打包扩展。有关平台特定扩展结构的信息,请参见Chrome 扩展结构和Firefox/Thunderbird 扩展结构。
构建系统由 Node.js 驱动,需要 `utils` 目录中定义的几个 NPM 包:
| 依赖项 | 目的 |
|---|---|
archiver | 为扩展创建 ZIP 存档 |
file | 处理文件系统操作和路径操作 |
MetaScript | 为平台特定代码提供条件编译 |
glob | 文件路径模式匹配 |
构建过程在一个 Node.js 脚本中实现,位于utils/build.js。该脚本分析源文件,根据平台特定规则处理它们,并将它们打包成适当的扩展格式。
来源:utils/build.js130-162 utils/build.js84-127
构建系统使用构建脚本中定义的正则表达式模式来确定每个平台扩展包中包含哪些文件。
如果文件与skipFileRegexes中的任何模式匹配,则会被明确排除,该模式用于过滤测试文件和操作系统特定的临时文件。
fnameMatch 函数通过根据这些模式数组进行测试,检查文件是否应包含在特定平台的构建中。
来源:utils/build.js23-25 utils/build.js31-37 utils/build.js38-57
一旦系统确定文件应包含在平台构建中,它将进行平台特定处理。
JavaScript 文件使用 MetaScript 进行特殊处理,从而可以根据目标平台有条件地包含代码。
在源文件中,平台特定代码包含在特殊的 MetaScript 注释中。
来源:utils/build.js66-69 src/common/options-iframe.js7-21
Chrome 扩展需要对 `manifest.json` 文件进行特殊处理,以删除 Firefox 特有的部分。
构建系统在 `dist` 目录中生成三个输出文件。
这些常量定义了输出文件路径。
来源:utils/build.js15-21 .gitignore8-9
要构建扩展,请执行以下操作:
utils目录npm install 安装依赖项node build.js运行构建脚本脚本完成后将输出确认消息。
Done! Built extensions written to [dist directory path]
来源:utils/build.js159 utils/package.json1-13
构建完成后,可以通过以下方式测试扩展:
chrome.zip作为解压的扩展程序。firefox.zip作为临时附加组件。thunderbird.xpi文件。在test目录中提供了一个基本的测试环境,提供了一个带有 contenteditable iframe 的简单 HTML 页面,用于测试扩展功能。