BaadSaba / BaadSaba/mobin

create deno workspace

Open
#4 3 comments 0 reactions 1 assignee Claimed by @hemedani View on GitHub
enhancement good first issue help wanted
Dominant language
No language data
Stars
1
Forks
1
PR merge metrics
No merged PRs in 30d

Description

To set up a Deno workspace for your project, you'll want to structure it in a way that allows modularity, ease of development, and scalability. Here's a step-by-step guide to creating a workspace in Deno:

### 1. **Workspace Overview**
In Deno, a workspace setup helps you manage multiple projects (or packages/modules) under a single repository. This is ideal for separating concerns such as backend, frontend, shared libraries, and utilities while keeping everything unified.

A basic structure might look like this:
```
my-deno-workspace/
├── backend/
│ ├── main.ts
│ ├── deps.ts
│ └── tests/
├── frontend/
│ ├── components/
│ ├── routes/
│ └── main.ts
├── shared/
│ ├── utils.ts
│ └── types.ts
├── .github/
│ └── workflows/
├── README.md
├── deno.json
└── deno.lock
```

### 2. **Setting Up the Workspace**

#### 2.1. **Root Directory**
Create a root directory for your workspace, which will contain the backend, frontend, and shared code. This directory will also include the configuration files (`deno.json`, `deno.lock`).

#### 2.2. **Create a `deno.json` File**
In the root of your workspace, create a `deno.json` file to manage dependencies, import maps, and compiler options for the entire project. This file allows you to configure how Deno resolves imports across the workspace.

```json
{
"importMap": "./import_map.json",
"tasks": {
"start:backend": "deno run --allow-net --allow-read backend/main.ts",
"start:frontend": "deno run --allow-net --allow-read frontend/main.ts",
"test": "deno test --coverage"
},
"compilerOptions": {
"lib": ["dom", "deno.ns"],
"strict": true
}
}
```

#### 2.3. **Create an `import_map.json`**
To avoid relative paths for shared code and dependencies, create an `import_map.json` file to centralize import paths.

```json
{
"imports": {
"http/": "https://deno.land/std@0.205.0/http/",
"shared/": "./shared/"
}
}
```

#### 2.4. **Backend Directory**
In the `backend/` directory:
- **`main.ts`:** This file will be the entry point for the backend service. It should start the server and handle routing for APIs.
- **`deps.ts`:** This file manages the backend dependencies (e.g., third-party modules).

Example `main.ts` for a simple server:
```ts
import { serve } from "http/server.ts";

serve(() => new Response("Hello from the backend!"), { port: 8000 });
```

#### 2.5. **Frontend Directory**
In the `frontend/` directory:
- **`main.ts`:** Entry point for the Deno Fresh-based frontend.
- **components/** and **routes/** folders for Fresh components and routes.

Example `main.ts`:
```ts
import { start } from "$fresh/server.ts";
import manifest from "./fresh.gen.ts";

await start(manifest);
```

#### 2.6. **Shared Directory**
The `shared/` folder is where you place reusable modules, such as utility functions, types, or constants that both the backend and frontend can use.

- **`utils.ts`:** For shared utility functions.
- **`types.ts`:** For TypeScript types or interfaces shared across the workspace.

#### 2.7. **GitHub Actions for CI/CD**
Set up GitHub Actions for CI/CD in `.github/workflows/`. You might want to automate tasks such as running tests, building the project, and deploying.

Example CI workflow (`ci.yml`):
```yaml
name: CI

on:
push:
branches:
- main
pull_request:

jobs:
test:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Setup Deno
uses: denoland/setup-deno@v1
with:
deno-version: v1.x
- run: deno task test
```

#### 2.8. **README.md**
Create a `README.md` that documents the structure of your workspace, how to set up the environment, and how to run both the backend and frontend.

### 3. **Running and Testing the Workspace**

With the workspace set up, you can start different services via the `deno.json` task system:
- Start the backend: `deno task start:backend`
- Start the frontend: `deno task start:frontend`
- Run tests: `deno task test`

### 4. **Benefits of Deno Workspace**
- **Modularity:** Each part (backend, frontend, shared) is cleanly separated but can easily share code.
- **Centralized Configurations:** Manage dependencies, imports, and tasks from a single source using `deno.json`.
- **Reusability:** Shared code between frontend and backend, reducing code duplication.

This setup allows for flexibility and organization, making it easier to manage and contribute to your open-source project.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.