How to become a MediaWiki hacker/zh

这篇文章用以帮助开发者学习开发MediaWik 内核和MediaWiki扩展的基础技能. 请注意，多数情况下，你并不想去随便删改MediaWiki的内核，除非你真的知道你在干什么！

入门Wikimedia开发的主要方式就是给那些有新手指导的Wikimedia项目做贡献. 另一种毋须指导的替代方案则是去debug.

如果你是一个有经验的开发者，已经熟悉了使用MediaWiki，请访问.

对于其他的方式涉足维基媒体社区，参见.

概覽
MediaWiki是维基百科，與其姐妹项目，还有世界各地数以千计的维基网站使用的软件.

雖然MediaWiki是由PHP语言编写，有些支持性工具由其他语言编写，他们包括批处理文件、shell脚本、makefiles和Python. 它使用jQuery作为客户端的JavaScript库.

MediaWiki首先是为LAMP平台编写 ，并且在多数操作系统中是可用的. MediaWiki首要使用MySQL与MariaDB数据库服务器.

MediaWiki在开源环境下开发. 代码的调整大多在网上完成，并受到维基媒体基金会的支持，不过志愿者为之付出甚多.


 * 开发讨论可以在各种邮件列表和IRC 频道中进行. 主要开发者名单在此：wikitech-l.  主要的开发者IRC频道为和.
 * 源代码保存在上並由Git版本控制系统管理的.
 * 代码审查在中进行，可以在此处查看. 按照教程来安装Git与Gerrit以提交补丁.
 * 漏洞报告提交与項目協調在上，可以在此处查看.

本页可以帮助您成为MediaWiki的贡献者. 此非入門教學，而是引導您至不同任何您覺得必要學習的內容.

配置您的开发环境
大多数项目使用Git和Gerrit. 按照Gerrit指南来创建您的开发者帐号. 然後你可以去下載我們的代碼，做出改變，測試他們，然後提交補丁. 有两种方法配置您的开发环境：使用预配置的虚拟机安装（Docker或Vagrant），或手动配置.

Docker开发环境

 * MediaWiki Docker：利用Docker运行MediaWiki（支持Linux、Windows和macOS主机）. This is the recommended method.

You can also try the experimental mwcli tool which provides basic orchestration functionality for MediaWiki docker containers.

虛擬機器與Vargant

 * 安裝Vagrant——這些步驟會安裝MediaWiki伺服器於所有符合需求的Linux虛擬機器（可用於Linux、Windows，或Mac hosts）

Vagrant is a powerful tool, but it is more complex and less robust than Docker, and significantly more resource-intensive. It is mainly aimed at developers who need to set up complex, flexible environments, e.g. for testing the interaction of multiple extensions.

手动安装

 * 安裝需求 — 檢查硬體需求後，請安裝LAMP、MAMP或WAMP伺服器（Linux、Mac或Windows、plus Apache、MySQL/MariaDB與PHP）.
 * — 於Git下載最新版的原始碼.
 * — 繼續安裝與初始化設定.
 * 架設不同的偵錯模式於您的環境，以提早顯示警告與錯誤.

您不必下載維基百科數據庫資料即可開發MediaWiki功能. 實際上，大部分情況下使用一個幾乎為空的數據庫，裡面只有一些特定的測試頁，會更簡單. 然而，如果由於某種原因你仍想複製維基百科，你可以下載資料.

PHP
MediaWiki由PHP编写,所以你需要了解并熟悉PHP才可以熟练使用MediaWiki的核心代码.


 * 學習PHP
 * PHP指导 — 在许多不同语言中都可用. 如果你不会用PHP且也不会用其他对象导向语言，PHP会这些语言中你容易学的.
 * PHP Programming at Wikibooks.
 * PHP at Wikiversity.


 * PHP资源:
 * PHP手册 — 在许多不同语言里可用.
 * MediaWiki社区内部的PHP编程条例.


 * 需要知道的东西:
 * MediaWiki中的脚本 提供了一个基本的包含MediaWiki对象与分级的PHP编译器.
 * 此外，MediaWiki中的脚本 是基于PsySH的 的替代，参见

数据库
许多特性需要对数据库做出一定程度的修改，所以你常常需要熟悉MySQL/MariaDB.


 * 学习MySQL或MariaDB
 * MySQL指导 — 来自MySQL参考手册.
 * MySQL at Wikibooks.


 * MySQL/MariaDB资源
 * MySQL参考手册 — 在许多不同语言里可用.
 * MariaDB知识库
 * MediaWiki社区内部的数据库编码条例.


 * 要知道的东西:
 * 用MySQL/MariaDB測試你的代碼.
 * MediaWiki目前使用MySQL和MariaDB作为主数据库后端. 它同样支持其他DBMS,例如PostgreSQL和SQLite.  但是，几乎所有开发人员都使用MySQL/MariaDB而不测试其他数据库，因此会定期中断.  因此，建议您在测试补丁时使用MySQL/MariaDB，除非您专门尝试改进对其他数据库的支持.  在后一种情况下，请确保您小心不要破坏MySQL/MariaDB（或编写非常低效的查询），因为MySQL/MariaDB是其他人使用的.

JavaScript和CSS
JavaScript和CSS在前端代码中无处不在. 您不必熟悉使用MediaWiki的JavaScript、jQuery和CSS，但您可能需要，具体取决于您选择的工作方式.


 * 学习JavaScript和CSS
 * JavaScript and CSS at Wikibooks.
 * 入门jQuery — jQuery指导
 * Learning JavaScript — references and sources.


 * JavaScript和CSS资源
 * MediaWiki社区中的JavaScript编码约定.
 * MediaWiki社区中的CSS编码约定.

MediaWiki
MediaWiki代码库很大，有些部分很难看，不要被它淹没. 当您第一次开始时，目标是编写功能或修复只触及一小部分代码的错误.


 * MediaWiki基礎知識和必讀內容:
 *  — MediaWiki的主要元件及它們之間如何相互配合的高級概述.
 *  — 為何要以及如何編寫安全代碼的概述.


 * MediaWiki资源:
 * — A list of important files and links to more detailed information.
 * — A list of hooks. If you're trying to find what part of the codebase does something, often a good place to start is by searching for the related hooks.
 * — An overview of general coding conventions within the MediaWiki community.


 * 代码文档 (類別參考) — Automatically generated documentation from the code and code comments.
 * — A guide to debugging MediaWiki.
 * — A tool to interact with MediaWiki objects live.

MediaWiki扩展
If you choose to work on MediaWiki extensions code, the following links provide more information.


 * MediaWiki擴充功能基礎知識：
 * 開發擴充功能 — 如何撰寫MediaWiki的擴充功能.
 * 扩展写作教程


 * MediaWiki扩展手册：
 * 最佳实践活动
 * A brief introduction to MediaWiki extension development — A video presentation about how to create a MediaWiki extension (slides).
 * Making a MediaWiki extension — Covers how to develop an extension for MediaWiki, best practices, and how to engage the MediaWiki community. 从2011年2月开始.
 * 开发者小屋中的开发者帮助

參見

 * Search for code across repositories
 * – 如果你已经把这篇文章读完了，是时候去看看开发者小屋了.