How to become a MediaWiki hacker/zh

这篇文章用以帮助开发者学习开发MediaWik 内核和MediaWiki扩展的基础技能.

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

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

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

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

雖然MediaWiki是由PHP语言编写，有些支持性工具由其他语言编写，他们包括批处理文件、shell脚本、makefiles和Python.

Some supporting tools are written in other languages, including batch files, shell scripts, makefiles and Python.

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

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


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



配置您的开发环境
You can install and develop MediaWiki on Linux, Windows, or macOS using any of the three solutions below.

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

Docker

 * MediaWiki Docker – 利用Docker运行MediaWiki.

You can also try the experimental mwcli tool which sets up Docker with a few simple commands and provides basic orchestration functionality between MediaWiki, ElasticSearch, Memcache, and other types of containers.

Vargant

 * MediaWiki Vagrant – Run MediaWiki on a Linux virtual machine using Vagrant.

Vagrant allows you start a MediaWiki instance you can develop as well as allowing you to add and develop any of 250+ extensions - all with a single command. This saves you installation and configuration time compared to manually installing. It runs slower than Docker on WSL Windows or a local installation.



手动安装
MediaWiki can be developed by installing it locally on your system and editing its code. Installing it locally means it will run faster than Docker or Vagrant, but it will take more time to configure.


 * 1)  — 检查硬件要求并安装依赖
 * 2)  — 於Git下載最新版的原始碼.
 * 3)  — 繼續安裝與初始化設定.
 * 4) 架設不同的偵錯模式於您的環境，以提早顯示警告與錯誤.



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


 * 學習PHP
 * PHP指导 — 在许多不同语言中都可用. 如果你完全不会PHP，但是知道在其他面向对象编程语言中如何编程，那么PHP对你来说会易学一些.
 * 维基教科书上的PHP编程.
 * PHP at Wikiversity.


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


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

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


 * 学习MySQL或MariaDB
 * MySQL指导 — 来自MySQL参考手册.
 * 维基学院上的MySQL.


 * 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和CSS.
 * 入门jQuery — jQuery指导
 * Learning JavaScript — references and sources.


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

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


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


 * MediaWiki资源:
 * — 重要文件和更多细节的列表
 * — 钩子列表. 如您正尝试寻找是代码库的哪个部分执行某个操作，通常可以从搜索相关钩子开始.
 * — MediaWiki社区代码编写规范的概述.


 * 代码文档 (類別參考) — Automatically generated documentation from the code and code comments.
 * — 调试MediaWiki的指南.
 * — 实时与MediaWiki对象交互的工具.



MediaWiki扩展
如您选择在MediaWiki扩展的代码建设上添砖加瓦，下列链接能提供更多信息.


 * 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月开始.
 * 开发者小屋中的开发者帮助



MediaWiki皮肤
Manual:How to make a MediaWiki skin is helpful if you choose to work on MediaWiki skins.



參見

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