2023-03-05 21:18:56 +03:00
# Building AFFiNE Web
2023-02-09 10:34:43 +03:00
2023-08-06 19:45:30 +03:00
> **Warning**:
>
> This document has not been updated for a while.
> If you find any outdated information, please feel free to open an issue or submit a PR.
2023-03-09 09:36:51 +03:00
> **Note**
> For developing & building desktop client app, please refer to [building-desktop-client-app.md](./building-desktop-client-app.md)
2023-02-09 10:34:43 +03:00
## Table of Contents
- [Prerequisites ](#prerequisites )
- [Setup Environment ](#setup-environment )
2023-03-05 21:18:56 +03:00
- [Start Development Server ](#start-development-server )
2023-02-09 10:34:43 +03:00
- [Testing ](#testing )
## Prerequisites
2023-06-16 08:15:42 +03:00
AFFiNE client has both **Node.js** & **Rust** toolchains.
### Install Node.js
2023-02-09 10:34:43 +03:00
We suggest develop our product under node.js LTS(Long-term support) version
2023-06-16 08:15:42 +03:00
#### Option 1: Manually install node.js
2023-02-09 10:34:43 +03:00
install [Node LTS version ](https://nodejs.org/en/download )
> Up to now, the major node.js version is 18.x
2023-06-16 08:15:42 +03:00
#### Option 2: Use node version manager
2023-02-09 10:34:43 +03:00
2023-09-01 02:50:54 +03:00
install [fnm ](https://github.com/Schniz/fnm )
2023-02-09 10:34:43 +03:00
```sh
2023-09-01 02:50:54 +03:00
fnm use
2023-02-09 10:34:43 +03:00
```
2023-06-16 08:15:42 +03:00
### Install Rust Tools
Please follow the official guide at https://www.rust-lang.org/tools/install.
### Setup Node.js Environment
2023-02-09 10:34:43 +03:00
2023-05-22 15:18:43 +03:00
This setup requires modern yarn (currently `3.x` ), run this if your yarn version is `1.x`
2023-04-20 08:25:10 +03:00
Reference: [Yarn installation doc ](https://yarnpkg.com/getting-started/install )
```sh
corepack enable
2023-05-22 15:18:43 +03:00
corepack prepare yarn@stable --activate
2023-04-20 08:25:10 +03:00
```
2023-02-09 10:34:43 +03:00
```sh
# install dependencies
2023-03-21 08:12:42 +03:00
yarn install
2023-02-09 10:34:43 +03:00
```
2023-06-16 08:15:42 +03:00
### Build Native Dependencies
2023-02-09 10:34:43 +03:00
2023-06-16 08:15:42 +03:00
Run the following script. It will build the native module at [`/packages/native` ](/packages/native ) and build Node.js binding using [NAPI.rs ](https://napi.rs/ ).
2023-08-02 18:32:22 +03:00
This could take a while if you build it for the first time.
2023-08-08 10:25:56 +03:00
Note: use `strip` from system instead of `binutils` if you are running MacOS. [see problem here ](https://github.com/toeverything/AFFiNE/discussions/2840 )
2023-03-21 08:12:42 +03:00
2023-02-09 10:34:43 +03:00
```
2023-06-16 08:15:42 +03:00
yarn workspace @affine/native build
2023-03-21 08:12:42 +03:00
```
2023-09-01 02:50:54 +03:00
### Build Infra
2023-08-02 18:32:22 +03:00
2023-09-01 02:50:54 +03:00
```sh
yarn run build:infra
2023-08-02 18:32:22 +03:00
```
2023-09-01 02:50:54 +03:00
### Build Plugins
2023-06-29 07:13:35 +03:00
2023-09-01 02:50:54 +03:00
```sh
yarn run build:plugins
2023-03-21 08:12:42 +03:00
```
2023-09-01 02:50:54 +03:00
### Build Server Dependencies
2023-03-21 08:12:42 +03:00
2023-09-01 02:50:54 +03:00
```sh
yarn workspace @affine/storage build
2023-06-16 08:15:42 +03:00
```
2023-02-09 10:34:43 +03:00
## Testing
Adding test cases is strongly encouraged when you contribute new features and bug fixes.
We use [Playwright ](https://playwright.dev/ ) for E2E test, and [vitest ](https://vitest.dev/ ) for unit test.
2023-05-30 08:14:10 +03:00
To test locally, please make sure browser binaries are already installed via `npx playwright install` .
2023-09-01 02:50:54 +03:00
Also make sure you have built the `@affine/core` workspace before running E2E tests.
### Unit Test
2023-02-09 10:34:43 +03:00
```sh
2023-03-21 08:12:42 +03:00
yarn test
2023-02-09 10:34:43 +03:00
```
2023-05-30 08:14:10 +03:00
2023-09-01 02:50:54 +03:00
### E2E Test
2023-05-30 08:14:10 +03:00
2023-09-01 02:50:54 +03:00
```shell
# there are `affine-local`, `affine-legacy/*`, `affine-local`, `affine-plugin`, `affine-prototype` e2e tests,
# which are run under different situations.
cd tests/affine-local
yarn e2e
```