npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

create-aduxt

v1.2.1

Published

Template monorepo AdonisJS + Nuxt

Downloads

221

Readme

Aduxt

Un monorepo moderne combinant AdonisJS 6 (backend) et Nuxt 4 (frontend) avec une communication type-safe via Tuyau.

📋 Prérequis

🚀 Démarrage rapide

Créer un nouveau projet

npm create aduxt@latest

Ou avec d'autres gestionnaires de paquets :

# Avec Bun
bunx create-aduxt@latest

# Avec pnpm
pnpm create aduxt@latest

# Avec Yarn
yarn create aduxt

Cela créera un nouveau projet Aduxt dans le répertoire de votre choix avec toute la structure et la configuration nécessaires.

⚙️ Configuration

1. Configuration de l'environnement

Créer le fichier .env pour l'API :

cp api/.env.example api/.env

Éditer api/.env et configurer les variables :

# Application
PORT=3333
HOST=localhost
NODE_ENV=development
APP_KEY=<générer avec: node ace generate:key>

# Database
DB_HOST=127.0.0.1
DB_PORT=5432
DB_USER=votre_user
DB_PASSWORD=votre_password
DB_DATABASE=aduxt

# Session
SESSION_DRIVER=cookie

2. Installer les dépendances

bun install

3. Base de données

Créer la base de données PostgreSQL :

createdb aduxt

Exécuter les migrations :

cd api
node ace migration:run

4. Générer les types Tuyau

Pour la communication type-safe entre le frontend et le backend :

cd api
node ace tuyau:generate

5. Lancer l'application

Mode développement (les deux apps) :

bun run dev

Ou séparément :

# Terminal 1 - API
bun run dev:api

# Terminal 2 - Frontend
bun run dev:web

Accès :

📁 Structure du projet

aduxt/
├── api/                      # Backend AdonisJS
│   ├── app/
│   │   ├── auth/            # Module d'authentification
│   │   └── core/            # Middleware, exceptions
│   ├── config/              # Configuration (database, auth, etc.)
│   ├── database/
│   │   └── migrations/      # Migrations de base de données
│   ├── start/
│   │   ├── routes.ts        # Définition des routes
│   │   └── kernel.ts        # Configuration des middleware
│   └── tests/               # Tests unitaires et fonctionnels
│
├── web/                      # Frontend Nuxt
│   ├── app/
│   │   ├── pages/           # Pages Vue Router
│   │   ├── components/      # Composants Vue
│   │   ├── composables/     # Composables Vue
│   │   ├── plugins/         # Plugins Nuxt (Tuyau)
│   │   └── assets/          # Assets (CSS, images)
│   └── public/              # Fichiers statiques
│
├── script/                   # Scripts de déploiement
├── Dockerfile               # Configuration Docker
├── compose.yml              # Docker Compose
└── package.json             # Configuration du workspace

🛠️ Commandes utiles

API (AdonisJS)

cd api

# Développement
node ace serve --hmr              # Serveur avec hot reload
node ace build                    # Build pour production
node ace --help                   # Liste toutes les commandes

# Base de données
node ace migration:run            # Exécuter les migrations
node ace migration:rollback       # Annuler la dernière migration
node ace migration:fresh          # Réinitialiser la BDD
node ace make:migration <nom>     # Créer une migration
node ace make:model <nom>         # Créer un modèle

# Tests
node ace test                     # Tous les tests
node ace test unit                # Tests unitaires
node ace test functional          # Tests fonctionnels

# Tuyau (Type-safe API)
node ace tuyau:generate           # Générer les types pour le frontend

# Code quality
bun run lint                      # Linter
bun run format                    # Formatter
bun run typecheck                 # Vérification des types

Web (Nuxt)

cd web

# Développement
bun run dev                       # Serveur de développement
bun run build                     # Build pour production
bun run preview                   # Preview du build de production
bun run generate                  # Génération statique

🔧 Développement

Créer une nouvelle route API

  1. Définir la route dans api/start/routes.ts :
import router from '@adonisjs/core/services/router'

router.get('/users', async () => {
  return { users: [] }
})
  1. Régénérer les types Tuyau :
cd api
node ace tuyau:generate
  1. Utiliser dans le frontend :
<script setup>
const tuyau = useTuyau()

const { data } = await tuyau.users.$get()
</script>

Créer une nouvelle page

Créer un fichier dans web/app/pages/ :

<!-- web/app/pages/about.vue -->
<template>
  <div>
    <h1>À propos</h1>
  </div>
</template>

La page sera automatiquement accessible sur /about.

Accéder à la base de données

import db from '@adonisjs/lucid/services/db'

// Query builder
const users = await db.from('users').select('*')

// Ou avec un modèle
import User from '#models/user'
const users = await User.all()

🧪 Tests

Les tests utilisent Japa :

cd api

# Tous les tests
node ace test

# Tests spécifiques
node ace test unit
node ace test functional

# Avec coverage
node ace test --coverage

🐳 Docker

Développement avec Docker Compose

docker compose -f compose.dev.yaml up

Production

# Build
docker build -t aduxt .

# Run
docker compose up

📚 Documentation des outils

Backend

Frontend

Type-Safety

Base de données

Package Manager

🔑 Points importants

Tuyau (Type-Safety)

⚠️ Important : Après chaque modification des routes API, vous devez régénérer les types :

cd api
node ace tuyau:generate

Cela permet au frontend d'avoir une autocomplétion et une vérification des types en temps réel.

Path Aliases (API)

L'API utilise des alias de chemins :

import User from '#models/user'        // au lieu de '../models/user'
import { middleware } from '#start/kernel'

Hot Reload

Le hot reload est activé pour :

  • api/app/controllers/**/*.ts
  • api/app/middleware/*.ts

Les modifications dans ces fichiers ne nécessitent pas de redémarrage.

🤝 Contribution

  1. Fork le projet
  2. Créer une branche (git checkout -b feature/nouvelle-fonctionnalite)
  3. Commit les changes (git commit -m 'Ajout nouvelle fonctionnalité')
  4. Push vers la branche (git push origin feature/nouvelle-fonctionnalite)
  5. Ouvrir une Pull Request

📝 License

UNLICENSED