|
1 | | -# Modules |
| 1 | +# Source Academy Modules Repository |
2 | 2 |
|
3 | | -  |
| 3 | + [](https://github.com/source-academy/modules/actions/workflows/pages/pages-build-deployment) |
4 | 4 |
|
5 | | -This repository contains the default modules of the Source Academy and their documentation, deployed to the default module site at <https://source-academy.github.io/modules>. |
| 5 | +This repository contains the default modules of the Source Academy and their documentation, alongside all the libraries and tooling required for development. |
6 | 6 |
|
7 | 7 | The [Source Academy](https://sourceacademy.org) and [Source Academy @ NUS](https://sourceacademy.nus.edu.sg) are configured to access the default module site when evaluating `import` directives. |
8 | 8 |
|
9 | | -[Documentation of Source Academy modules](https://source-academy.github.io/modules/documentation). |
10 | | - |
11 | | -## Information for Module Developers |
12 | | - |
13 | | -See the modules [wiki](https://github.com/source-academy/modules/wiki) for more details. |
14 | | - |
15 | | -### Terminology |
16 | | - |
17 | | -| **Term** | **Description** | |
18 | | -| ---------- | ------------------------------------------------------------------ | |
19 | | -| **Module** | A set of **one** bundle _with the same name_ and **some/no** tabs. | |
20 | | -| **Bundle** | The suite of functions that are provided by the module. | |
21 | | -| **Tab** | A user interface used by the module. | |
22 | | - |
23 | | -### Getting Started |
24 | | - |
25 | | -The following set of instructions explain how to clone and set up a copy of the `modules` code repository on your local development machine. Following the steps below will create a `modules` directory in your local development machine and install the necessary dependencies of the project. |
26 | | - |
27 | | -The recommended version of [Node.js](https://nodejs.org/en/) for local development is Node.js 20. You may use a Node.js version manager such as [nvm](https://github.com/creationix/nvm#installation) _(macOS/Linux)_ or [nvm-windows](https://github.com/coreybutler/nvm-windows#node-version-manager-nvm-for-windows) to switch Node.js versions between different projects. |
28 | | - |
29 | | -This project also uses [Yarn](https://yarnpkg.com/) as a package manager. You may install and enable Yarn by running the following command. |
30 | | -```bash |
31 | | -corepack enable |
32 | | -``` |
33 | | - |
34 | | -If the above does not work, you can manually install the Yarn package manager through [NPM](https://www.npmjs.com/) using the following command. |
35 | | - |
36 | | -```bash |
37 | | -npm install -g yarn |
38 | | -``` |
39 | | - |
40 | | -You may also require [Python](https://www.python.org/downloads/) to run build scripts and install project dependencies. We recommend either using Python 2.7 or Python 3.8-3.11. |
41 | | - |
42 | | -Clone the repository on your local development machine and navigate to it using your favourite command line or shell tool. |
43 | | - |
44 | | -```bash |
45 | | -git clone https://github.com/source-academy/modules.git |
46 | | -cd modules |
47 | | -``` |
48 | | - |
49 | | -Install all the dependencies of the project into `node_modules` in the root folder of your project directory. |
50 | | - |
51 | | -```bash |
52 | | -yarn install |
53 | | -``` |
54 | | - |
55 | | -If you encounter errors with esbuild dependencies like the following while building: |
56 | | - |
57 | | -```plaintext |
58 | | -Error: The package "@esbuild/darwin-arm64" could not be found, and is needed by esbuild. |
| 9 | +## Quick Links |
| 10 | +| Site | Link | |
| 11 | +| ---- | ---- | |
| 12 | +| Source Academy | https://sourceacademy.org | |
| 13 | +| Default Modules Deployment | https://source-academy.github.io/modules | |
| 14 | +| Default Modules Documentation | https://source-academy.github.io/modules/documentation | |
| 15 | +| Developer Wiki | https://github.com/source-academy/modules/wiki | |
| 16 | +| `js-slang` | https://github.com/source-academy/js-slang | |
| 17 | +| Frontend | https://github.com/source-academy/frontend | |
| 18 | + |
| 19 | +If you are looking for the documentation for the default modules, they can be found [here](https://source-academy.github.io/modules/documentation). |
| 20 | + |
| 21 | +If you are a developer working with this repository, the developer documentation can be found [here](https://github.com/source-academy/modules/wiki) |
| 22 | + |
| 23 | +## Repository Structure |
| 24 | +The repository is designed as a monorepo, managed using Yarn workspaces. |
| 25 | + |
| 26 | +```txt |
| 27 | +. |
| 28 | +├── .github // Configuration for issue templates and workflows |
| 29 | +├── .husky // Configuration for code that runs on Git Hooks |
| 30 | +├── .vscode // Configuration for VSCode integration |
| 31 | +├── build // Output directory for compiled assets |
| 32 | +├── devserver // Modules Development Server |
| 33 | +├── docs // Developer Documentation and Server |
| 34 | +├── lib |
| 35 | +│ ├── buildtools // Scripts for compiling bundles and tabs |
| 36 | +│ ├── lintplugin // ESLint Plugin for SA Modules |
| 37 | +│ └── modules-lib // Common utilities and React components for SA Modules |
| 38 | +├── src |
| 39 | +│ ├── bundles // Source code for Bundles |
| 40 | +│ ├── tabs // Source code for Tabs |
| 41 | +│ └── java // Assets for Source Java |
| 42 | +├── eslint.config.js // ESLint configuration for the entire repository |
| 43 | +├── vitest.config.js // Vitest configuration for the entire repository |
| 44 | +└── yarn.config.cjs // Yarn constraints configuration |
59 | 45 | ``` |
60 | | - |
61 | | -You will need to delete the `node_modules` folder and rerun `yarn install` to fix the issue. |
62 | | - |
63 | | -### Serve Modules |
64 | | - |
65 | | -The following set of instructions explain how to transpile and serve the modules from your local development machine's code repository. Following the steps below will transpile all the modules in your project directory into JavaScript files located in the `build` folder. Thereafter, you will serve all the contents of the build folder in a server on your local development machine. |
66 | | - |
67 | | -To transpile the modules' files from `src` into JavaScript files in `build`, run the following command. |
68 | | - |
69 | | -```bash |
70 | | -yarn run build:all |
71 | | -``` |
72 | | - |
73 | | -To start the server that serves all the contents of the `build` folder in the root directory of the project, run the following command. By default, running this command serves the contents of the `build` folder on <http://localhost:8022>. |
74 | | - |
75 | | -```bash |
76 | | -yarn run serve |
77 | | -``` |
78 | | - |
79 | | -### Development with Source Academy `frontend` |
80 | | - |
81 | | -The following set of instructions explains how to use a local copy of the Source Academy [frontend](https://github.com/source-academy/frontend) with a local copy of the modules code repository. Following the steps below will configure the environment of the Source Academy frontend to use your locally served modules instead of the publicly available ones. Doing this will allow you to develop and modify modules without affecting the currently publicly available ones. |
82 | | - |
83 | | -You will need to already have a local instance of Source Academy frontend set up. If you do not, you can follow the instructions [here](https://github.com/source-academy/frontend#getting-started) to setup an instance of Source Academy frontend on your local development machine. |
84 | | - |
85 | | -Ensure that the environment variable `REACT_APP_MODULE_BACKEND_URL` in the `.env` file of the Source Academy frontend is configured to the URL of the module site that you are trying to retrieve modules from. At the same time, make sure that the server hosting the modules site is running. By default, the local server started by running `yarn run serve` is on <http://localhost:8022>. The default modules are implemented in the repository <https://github.com/source-academy/modules> and deployed to the modules site <https://source-academy.github.io/modules>. |
86 | | - |
87 | | -Upon starting the local instance of Source Academy frontend, the Source Academy will connect to the configured modules site. |
88 | | - |
89 | | -### Development Guide |
90 | | - |
91 | | -Please refer to the Modules Development Guide located in the modules wiki [here](https://github.com/source-academy/modules/wiki/Development-Guide) for more information regarding how to create your own module including its own bundle and tab. |
92 | | - |
93 | | -## License |
94 | | - |
95 | | -[](https://opensource.org/licenses/Apache-2.0) |
96 | | - |
97 | | -All sources in this repository are licensed under the [Apache License Version 2][apache2]. |
98 | | - |
99 | | -[apache2]: https://www.apache.org/licenses/LICENSE-2.0.txt |
0 commit comments