跳转至

开发快速入门

本页介绍如何运行、测试和开发 ZJUI-Learn。确保您已经安装了 ZJUI-Learn:

开发服务器

在开发模式下运行服务器,以便在检测到更改时自动重新启动:

make dev

在网络浏览器中转到 http://localhost:3000.

要停止服务器,请使用 Ctrl+C

生产构建

您还可以使用服务器代码的预编译版本进行构建和运行,以更接近地模拟生产环境中将发生的情况。查看在生产环境中运行设置说明 了解更多信息。

make build
make start

工作空间

如果您需要 workspaces 的支持,请确保 Docker 已安装并运行,然后在单独的终端中运行:

sudo make dev-workspace-host # or sudo make start-workspace-host
# Make sure to run ZJUI-Learn as root
sudo make dev

在 macOS 本机安装中,您应该在 config.json 中设置以下内容:

config.json
{
  "workspaceDevContainerHostname": "localhost",
  "workspaceJobsDirectoryOwnerUid": 1001,
  "workspaceJobsDirectoryOwnerGid": 1001
}

更多信息可以在 config.json 文档中找到。

???注意“工作区故障排除”

You can list the active hosts with:

```sql
SELECT * FROM workspace_hosts;
```

If you see no hosts, the workspace host is not running. If the `ready_at` column is an older date, the workspace host may also not be running.

Since ZJUI-Learn manages the workspace files, you need to also run ZJUI-Learn as root.

文档

如果您想预览文档,请运行:

make dev-docs

测试

如果您向 ZJUI-Learn 贡献代码,则必须确保您的更改有效并通过我们的风格指南。有关调试和测试的更多信息可以在开发者指南 中找到。贡献信息可参见贡献指南

运行测试套件(Docker 必须安装并运行):

make test-all

或者,仅运行测试的特定子集:

make test-js           # Javascript tests (both packages and applications)
make test-prairielearn # ZJUI-Learn application tests
make test-python       # Python tests
make test-e2e          # E2E tests (run `make e2e-deps` first)

JavaScript 测试

主要的 JavaScript 测试套件的运行时间可能需要 10 多分钟,因此您在开发时只能运行特定的测试文件。要运行特定的测试文件,首先需要运行make start-support启动数据库和其他服务,然后才能运行特定的测试文件。

make start-support
cd apps/prairielearn
pnpm vitest src/tests/getHomepage.test.ts

封装测试

要测试特定包,您可以从包的目录运行 pnpm test

cd packages/csv
pnpm test

棉绒

对 ZJUI-Learn 的所有更改都必须在合并之前通过我们的 linter。

make lint

或者,仅检查特定类型的文件:

make lint-js     # JavaScript only
make lint-python # Python only
make lint-all    # Additional linters

格式化

您可以使用以下方法格式化 + 自动修复 lint 错误:

make fix-js
make fix-python

与 HEAD 相比,格式化所有已更改的文件(暂存 + 未暂存 + 未跟踪):

make format-changed

这比格式化整个代码库要快,因为它只处理您修改过的文件。

如果您使用 VSCode 开发代码,则不需要运行这些代码,因为我们提供了一组推荐的扩展和默认配置,这些扩展和默认配置将在保存时格式化文件。

更新依赖项

如果您切换分支、拉取新代码或编辑 Python 依赖项,则需要更新依赖项。

make deps

处理包

在处理 packages/ 目录中的某些内容时,您需要重建包,然后任何更改才会对其他包或使用该包的应用程序可见。您可以使用 make build 构建所有内容,也可以在包中运行 dev 脚本,以便在发生更改时自动重建它。

# From the root of the repository:
pnpm --filter @prairielearn/postgres dev

# From a specific package directory, e.g. `packages/postgres`:
pnpm dev

更多信息

大多数有关开发的信息可以在开发者指南 中找到。它概述了调试和测试技巧、最佳实践和编码风格,以及有关 ZJUI-Learn 各个方面的详细信息(问题呈现、数据库模式等)。