# 开发相关的说明

## 目录结构

- `builder` 和 `buildutils` 为 JupyterLab 构建相关的工具.
- `dag` 是 aihub-dag 仓库的 git submodule.
- `dev_mode` 包含了"开发模式"下的构建配置和代码.
- `jupyterlab` 包含了 JupyterLab 后台的代码, 构建时会将前后端代码统一打包形成 whl 安装包.
- `packages` 包含了 JupyterLab 的前端代码. JuptyerLab 的前端代码是通过插件的方式组织起来的. 该文件夹中的所有子文件夹通过 yarn workspace 和 lerna 进行统一管理和构建.
- `sparkmagic` 是 aihub-sparkmagic 仓库的 git submodule

## 开发环境

进行开发前需要安装一下构建相关的依赖:

```bash
pip install -e .
jlpm install
jlpm build
```

_注: 这里的 jlpm 是 JupyterLab 提供的特定版本的 yarn, 这里也可以使用 yarn install_

运行开发模式的命令如下:

```bash
jupyter lab --dev-mode --extensions-in-dev-mode
```

运行后可在浏览器中查看页面. 如果需要在改动前端代码后自动编译, 可以在上述命令后面加上 `--watch` 参数.
(目前的 JupyterLab 提供的构建工具并不能自动刷新浏览器, 改动代码后需要手动刷新一下浏览器)

## 关于 JupyterLab 的二次开发

- JupyterLab 是基于 Lumino 框架开发的, 开发时可以参考其 API 文档: https://jupyterlab.github.io/lumino
- Lumino 的官方仓库提供了一些使用样例可参考: https://github.com/jupyterlab/lumino
- JupyterLab 的前端代码是以插件的形式组织起来的, 插件开发文档: https://jupyterlab.readthedocs.io/en/stable/extension/extension_dev.html
- 在开发插件时, 可以参考官方提供的样例: https://github.com/jupyterlab/extension-examples
