向 Habitica 的habitica.com网站贡献代码的第一步是设置网站的本地实例来测试您的更改。此页面包含有关如何在Linux中执行此操作的说明。
如果您使用不同的操作系统(或托管在 Linux 上但包含不同操作系统的虚拟机),或者如果您想为移动应用程序的开发做出贡献,请参阅本地设置 Habitica中的链接。
按顺序阅读本页上的每个部分,确保在继续下一个之前遵循每条说明。如果您遇到错误,请务必停止并解决它们,然后再继续下一步。
阅读铁匠指南以获取有关 Habitica 编码的背景信息 也很重要。
1 准备故障排除
2 安装 Git
3 设置交换文件
4 安装构建工具
5 安装 MongoDB
6 安装节点和 NPM
7 安装其他通用要求
8 叉子和克隆 Habitica
9 留在正确的分支和目录中
10 Habitica 初始配置
11 安装 Habitica 特定要求
12 启动 Habitica Web 服务器
13 查看服务器输出
14 在浏览器中测试网站
15 后续步骤:使用本地安装
准备故障排除
本地安装并不总是顺利,但我们很乐意为您提供帮助!Habitica 使用了很多软件,我们知道在您习惯之前安装它们可能会很复杂。请在遇到错误之前按照本节中的所有步骤进行操作,以便在必要时轻松寻求帮助,我们可以快速评估您的问题。
在安装 Habitica 时:
记录您键入的每个命令和每个命令的完整输出- 将所有命令和输出保存到一个或多个文本文件中,以防我们以后需要查看它们。
仔细阅读所有输出消息以查找错误。
如果您看到错误,请在错误解决之前不要继续操作,因为后面的步骤可能无法正常工作。
屏幕截图可能是记录错误的一种简单方法,但不利于分析它们,因此如果可能,请以文本形式提供完整的错误消息。这让管理员可以将相关部分粘贴到 GitHub 问题或 Google 搜索中。
如果您需要偏离此页面上的任何说明,请记录您所做的不同之处以及原因。如果您以后需要帮助,帮助您的人了解这些差异至关重要,否则可能会将时间花在与您无关的建议上。
如果您在修复任何错误方面需要帮助,请将您收集的所有信息上传到GitHub Gist等网站,然后在 GitHub 中记录问题并告诉我们以下内容:
您使用的是什么版本的 Linux
您需要从标准说明中做出的任何偏差
本页说明要求您记录的任何其他信息
链接到您上传的文件
你遇到什么问题
故障排除的关键步骤是能够重现问题。为了让其他人能够帮助排除故障,除非他们已经熟悉问题,否则他们通常需要能够在另一个系统上复制这种情况。因此,任何可以帮助其他人复制场景的信息都是有价值的。您还应该能够自己复制问题。有时从头开始可以解决问题或帮助确定问题的可能原因。
安装 Git
如果您还没有 GitHub 帐户,请创建一个。
git在您的机器上安装(此处提供安装说明)。
设置交换文件
如果您的计算机没有太多 RAM,您可能需要至少 4 GB 的交换文件,否则在运行“npm install”和“npm start”命令时会出现持续错误(例如错误,请参阅此 GitHub 问题)。如果您有一台具有良好 RAM 的相对较新的计算机,您可能可以忽略此部分。
您的计算机可能已经有一个交换文件。在 Internet 上查找适当的说明,以查看或为您的平台创建交换文件。
如果您有交换文件,但仍然无法成功运行“npm install”和“npm start”命令,请尝试增加交换文件的大小。
现在记录交换文件的大小。如果您以后需要寻求帮助,请在您提供给我们的情况下将其包含在故障排除信息中。
安装构建工具
用于构建软件(例如 make 和 gcc)的命令行工具将由您将在本页后续步骤中安装的软件包使用。你的 Linux 机器可能已经安装了它们,所以下面的命令可能会告诉你不需要安装任何东西;这不会是错误,您可以继续本页的下一部分。
对于Ubuntu、Debian和基于它们的发行版,运行:
sudo apt-get install build-essential
对于RedHat、CentOS和类似的发行版,运行:
sudo yum install gcc-c++ make。
对于任何其他发行版,如果有必要安装从源代码构建软件的工具,请查阅发行版的文档以了解如何操作。
安装 MongoDB
自 2020 年 7 月 15 日起,无需手动安装 MongoDB。当您按照以下步骤操作时,将自动安装专门用于 Habitica 的 MongoDB 实例。也不需要使用 MongoDB 的标准服务器启动命令手动启动 Habitica 的 MongoDB 服务器。
(请注意,如果您正在为 Habitica 以外的项目运行 MongoDB 服务器,它将与 Habitica 自己的 MongoDB 实例冲突,因此需要在您的 Habitica 本地安装运行时停止它。有关此的更多详细信息将在下面给出有必要停止它的地方。)
安装节点和 NPM
本节将带您完成安装 node 和 npm 的过程。重要提示:您必须安装node 14和npm 6。自 2020 年 12 月起,节点 12 也将正常工作,但将来会停止工作,因此请尽可能安装节点 14。如果您使用任何其他版本,您将遇到错误。如果你需要在你的开发机器上使用不同的版本来完成与 Habitica 无关的工作,你可以使用nvm来管理这些版本。
安装 Node 时,系统上将安装一个 Node 可执行文件。它可能被称为node或nodejs。以下所有命令都假定它已被调用node,但如果您看到错误提示该节点不存在,请键入nodejs。
请注意,以下示例命令仅供参考,可能不包含正确版本的 node 或 npm,因此请务必在运行之前根据需要调整命令。正确的版本是 node 14和npm 6
检查是否未安装不适当的node 和 npm版本:
node --version; npm --version
如果该命令显示该节点未安装,请继续执行下一步。
如果它显示您的节点版本与所需版本不同,请将其卸载。在 Ubuntu 上,卸载它的命令是:
sudo apt-get purge nodejs -y; sudo apt-get purge node -y
使用源代码或二进制发行版或包管理器为您的 Linux 发行版安装正确版本的节点。
对于 Ubuntu,其软件存储库可能比最新版本晚几个月运行,请从更新的存储库安装 NodeJS。例如,如果需要安装 Node 12:
curl --location https://deb.nodesource.com/setup_12.x | sudo bash -
sudo apt-get install nodejs
对于 CentOS 7,如果需要安装 Node 12:
curl --location https://rpm.nodesource.com/setup_12.x | sudo bash -
sudo yum install -y nodejs
检查您是否成功安装了节点并且它是正确的版本:
node --version
安装节点也会安装 npm。检查是否已完成并且版本是否正确:
npm --version
如果您有任何其他版本的 npm,请将其升级到正确的版本。例如,如果需要安装 npm 6 但您的版本不同:
sudo npm install -g npm@6
如果您发现您的 Node 可执行文件名为,请使用以下命令nodejs创建指向该名称的链接:node
sudo ln -s which nodejs
/usr/bin/node
安装其他通用要求
执行这个命令:
sudo npm install -g mocha
注意:如果你查看 Habitica repo 的README 文件,你会看到它链接到各种服务,例如 Greenkeeper。您不需要在本地安装中安装它们。
注意:
完成上述步骤后,重要的是,从此时起,您将使用为 Habitica 开发代码时使用的相同用户帐户登录计算机。不要以 root 身份登录。当需要提升权限时,此页面将告诉您使用 sudo。在其他时间使用提升的权限会导致问题。
关闭您在之前的步骤中打开的所有命令窗口或终端窗口。当您再次需要命令/终端窗口时,请打开一个新窗口,以便您的 shell 环境知道您迄今为止安装的软件。
叉子和克隆 Habitica
获取 Habitica 代码库的副本。有多种方法可以做到这一点;以下是最简单的方法,基于 GitHub 的Fork A Repo文章。
通过转到https://github.com/HabitRPG/habitica并单击“Fork”按钮来创建 Habitica 的存储库。这会在您自己的 GitHub 帐户中创建 Habitica 存储库的副本。
如果您之前已经对存储库进行了 fork,请确保您的 fork 是最新的。
在您的机器上,打开命令提示符或终端窗口。切换到你想要复制 Habitica 代码库的目录。
使用以下命令克隆您的 Habitica 存储库副本(将“ YourUsername ”替换为您的 GitHub 用户名)。这会将 Habitica 的代码复制到您的机器上,将存储库放入当前目录下的新“habitica”目录中。
git clone https://github.com/YourUsername/habitica.git
更改为由上述步骤创建的“habitica”目录:
cd habitica
除非另有说明,否则在此页面上的所有后续步骤中都保留在该目录中。
配置 Git 以将你的 fork 与 Habitica 的存储库同步。
git remote add upstream https://github.com/HabitRPG/habitica.git
git remote -v通过键入应该产生与以下相同的输出但使用您的 GitHub 用户名来验证所有设置是否正确:
来源 https://github.com/ YourUsername /habitica.git (fetch)
来源 https://github.com/ YourUsername /habitica.git(推送)
上游 https://github.com/HabitRPG/habitica.git (fetch)
上游 https://github.com/HabitRPG/habitica.git(推送)
留在正确的分支和目录中
克隆 Habitica 的存储库后,默认情况下您将在develop分支中。这是在本地安装 Habitica 时要使用的正确分支。您不需要更改到任何其他分支,但如果您出于任何原因这样做,则必须git checkout develop在继续安装之前切换回开发分支。您可以检查您所在git branch的分支(旁边带有星号的分支是您当前所在的分支)。
完成上述所有步骤后,您将进入 Habitica 的顶级目录。除非另有说明,否则您必须保留在该目录中以执行此页面上的所有后续步骤。下面的所有命令都是在假设您位于该目录中的情况下编写的。如果您出于任何原因更改该目录,请在继续执行此页面上的说明之前更改回该目录。如果您想检查您是否在正确的目录中,请查找一个名为config.json.example- 如果您在当前目录中看到该文件,那么您在正确的目录中。
Habitica 初始配置
通过复制(而不是重命名)示例文件来创建您自己的 config.json 配置文件副本:
cp config.json.example config.json
如果需要,编辑config.json:
通常你不需要这样做,但如果你知道任何理由,你现在就可以这样做。如果需要,您也可以在以后的任何时间对其进行编辑。
编辑 config.json 的一个可能原因是更改 Habitica 的 Express 服务器使用的端口。默认情况下,它使用端口 3000,除非您知道您正在使用相同端口的计算机上运行其他软件,否则没有理由更改它。如果是,请在其中找到BASE_URL和PORT行config.json并将端口更改为合适的数字。两者使用相同的数字。
没有理由更改 ADMIN_EMAIL 的值。它已被弃用,将来可能会被删除。
不要编辑config.json.example。
安装 Habitica 特定要求
安装 Habitica 特定的 npm 包:
npm install
如果该命令显示错误,请尝试重新运行它两到三次,以防故障是由于从 Internet 检索包时超时造成的。
如果这没有帮助,请运行npm ci,这将删除 node_modules 文件夹并重新安装所有软件包,但在安装过程中存在一些差异。
如果您仍然看到任何错误,或者此页面上的任何后续步骤显示有关缺少模块或文件的错误,请按照上述“准备故障排除”部分中的描述寻求帮助。
启动 Habitica Web 服务器
如果您为 Habitica 以外的项目运行 MongoDB 服务器,它将与 Habitica 自己的 MongoDB 实例发生冲突。现在使用 MongoDB 的标准服务器停止命令为您的系统停止该 MongoDB 服务器。(您可以在运行完 Habitica 的服务器之后安全地重新启动它。)
确保您的计算机或虚拟机上设置的时间精确到最接近的秒数,否则您将看到“RequestTimeTooSkewed”错误。
在一个命令提示符或终端中:
启动 Habitica 自己的 MongoDB 实例npm run mongo:dev
等到你看到Started replica set on "mongodb://localhost:27017?replicaSet=rs"后再继续下一步。(第一次运行时,它会在 Habitica 的目录中下载并安装 MongoDB,所以这需要几分钟。)
不要尝试将此终端用于其他任何事情,因为 Mongo 命令需要在那里继续运行。
在第二个命令提示符或终端窗口中,使用以下命令启动 Habitica Web 服务器:
npm start
在第三个命令提示符或终端窗口中,使用npm run client:dev. 这将在您保存对客户端文件的更改时自动重建,并会通知您任何错误。
如下一节所述,查看这三个命令的输出。如果您已经注意到错误消息,该部分将有所帮助。
查看服务器输出
该npm run mongo:dev命令的输出应类似于以下示例。您可能会看到细微的差别(例如,不同的版本号)。
habitica@4.148.1 mongo:dev /home/alys/code/habitica
run-rs -v 4.2.8 -l ubuntu1804 --keep --dbpath mongodb-data --number 1 --quiet
Skipping purge
Running ‘/home/alys/code/habitica/node_modules/run-rs/4.2.8/mongod’ [ 27017 ]
Restarting replica set…
Started replica set on “mongodb://localhost:27017?replicaSet=rs”
启动服务器(来自npm start命令)的输出应该类似于下面的示例。您可能会在系统中看到细微的差异(例如,不同的日期、时间和版本号)。斜体文字描述了您可能看到的信息类型,并非逐字记录。
habitica@4.116.8 start /home/username/habitica
gulp nodemon
[18:39:02] Using gulpfile ~/habitica/gulpfile.js
[18:39:02] Starting ‘nodemon’…
[18:39:02] Finished ‘nodemon’ after 25 ms
[18:39:02] [nodemon] 1.19.4
[18:39:02] [nodemon] to restart at any time, enter rs
[18:39:02] [nodemon] watching dir(s): [directory path(s) here]
[18:39:02] [nodemon] watching extensions: js,mjs,json
[18:39:02] [nodemon] starting node ./website/server/index.js
(node:3348) [ “DeprecationWarnings” might be here and/or below; they do not indicate an error ]
2019-10-20T08:39:08.767Z - info: Express server listening on port 3000
2019-10-20T08:39:08.960Z - info: Connected with Mongoose.
构建网站客户端(来自npm run client:dev命令)的输出分两个阶段出现,首先是构建客户端时的一些初始文本(然后可能会从屏幕上清除),然后输出显示客户端已准备好。
第一阶段应该类似于下面的示例,最后一行快速变化。斜体文字描述了您可能看到的信息类型,并非逐字记录。
habitica@4.116.8 client:dev /home/username/habitica
cd website/client && npm run serve
habitica-client@1.0.0 serve /home/username/habitica/website/client
vue-cli-service serve
INFO Starting development server…
42% building 2584/2635 modules 51 active … [file paths here]
第二阶段应该类似于下面的示例。斜体文本不是逐字逐句的。
DONE Compiled successfully in 12652ms 6:56:45 PM
App running at:
- Local: http://localhost:8080/
- Network: http://your.IP.address:8080/
Note that the development build is not optimized.
To create a production build, run npm run build. [This is just informational and not an instruction for you to follow.]
如果您看到任何与这些示例明显不同的输出,尤其是错误或明显的警告消息,请在继续之前自行解决或使用本页顶部“准备故障排除”部分中的指南进行报告。以下是一些带有建议修复的错误示例:
任何错误
首先检查您是否使用了正确版本的node和npm,如上面安装节点和 NPM中所述。如果您使用 nvm 在版本之间交换,这一点尤其重要,因为它可能在您没有意识到的情况下交换了它们。
ECONNREFUSED和/或Proxy error: Could not proxy request /api/v… from localhost:8080 to http://localhost:3000
使用上面安装 MongoDB部分链接到的说明检查您的本地数据库服务器是否正在运行。
npm ERR! code ELIFECYCLE
如果您使用的是 Linux 或 Docker,则此错误很可能是因为 nodemon 需要的文件监视程序比inotify提供的要多。增加文件观察者的数量。在 Ubuntu 和类似的 Linux 发行版上,您可以使用以下命令执行此操作:
echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/50-max-user-watches.conf && sudo sysctl --system
对于其他发行版,请参阅您的发行版的文档。此问题中显示了此错误的一个示例。
npm run mongo:dev如果和npm start的输出npm run client:dev看起来不错,请继续下一部分测试网站。如果您不能完全确定它们是否良好,请继续进行,但如果网站出现故障,您可能需要解决输出中显示的问题。
在浏览器中测试网站
打开浏览器访问http://localhost:8080以测试应用程序。该网站应该看起来与https://habitica.com相同,并且工作方式相同,只是在左下角的“任务”页面上会有一个“调试”菜单(暂时忽略它;它在链接的文档中有所描述在本页末尾,但您还不需要使用它)。
如果您到达网站的首页但没有完成加载,或者您到达登录屏幕但登录按钮没有任何作用,请清除“localhost”域的本地存储。您可以通过单击http://localhost:8080/static/clear-browser-data上的红色“清除数据”按钮或使用浏览器的 JavaScript 控制台(有关如何在首选浏览器中清除本地存储的信息谷歌)。然后重新加载首页。
为您的测试创建一个或多个帐户。本地安装使用的数据库托管在您的机器上;它与 Habitica 本身使用的数据库不同,因此您无法使用普通的 Habitica 帐户。
后续步骤:使用本地安装
现在您已经在本地安装了 Habitica 网站,请阅读使用您的本地安装来修改 Habitica 的网站和 API以了解如何贡献代码。
阅读《铁匠指南》也很重要,其中包含有关使用的技术、Habitica 代码的结构、如何提供帮助的想法以及其他信息的信息。
评论区