n8n:conventions

Par n8n-io · n8n

Référence rapide pour les patterns n8n. Documentation complète dans /AGENTS.md

npx skills add https://github.com/n8n-io/n8n --skill n8n:conventions

n8n Guide de Référence Rapide

📚 Documentation Complète:

  • Général: /AGENTS.md - Architecture, commandes, workflows
  • Frontend: /packages/frontend/AGENTS.md - Variables CSS, timing

Utilisez cette skill quand vous avez besoin de rappels rapides sur les motifs critiques.

Règles Critiques (À Respecter)

TypeScript:

  • Ne jamais any → utiliser unknown
  • Préférer satisfies à as (sauf tests)
  • Types partagés dans @n8n/api-types

Gestion des Erreurs:

import { UnexpectedError } from 'n8n-workflow';
throw new UnexpectedError('message', { extra: { context } });
// N'UTILISEZ PAS ApplicationError (deprecated)

Frontend:

  • Vue 3 Composition API (<script setup lang="ts">)
  • Variables CSS (jamais hardcoder px) - voir /packages/frontend/AGENTS.md
  • Tout texte via i18n ($t('key'))
  • data-testid pour E2E (une seule valeur, pas d'espaces)

Backend:

  • Controller → Service → Repository
  • Injection de dépendances via @n8n/di
  • Config via @n8n/config
  • Schémas Zod pour validation

Tests:

  • Vitest (unitaires), Playwright (E2E)
  • Mocker les dépendances externes
  • Travailler depuis le répertoire package: pushd packages/cli && pnpm test

Base de Données:

  • SQLite/PostgreSQL uniquement (DB app)
  • Exception: Nœuds DB (MySQL Node, etc.) peuvent utiliser des fonctionnalités spécifiques à la DB

Commandes:

pnpm build > build.log 2>&1  # Toujours rediriger
pnpm typecheck               # Avant commit
pnpm lint                    # Avant commit

Packages Clés

Package Objectif
packages/cli API Backend
packages/frontend/editor-ui Frontend Vue 3
packages/@n8n/api-types Types partagés
packages/@n8n/db Entités TypeORM
packages/workflow Interfaces cœur

Motifs Courants

Store Pinia:

import { STORES } from '@n8n/stores';
export const useMyStore = defineStore(STORES.MY_STORE, () => {
  const state = shallowRef([]);
  return { state };
});

Composant Vue:

<script setup lang="ts">
type Props = { title: string };
const props = defineProps<Props>();
</script>

Service:

import { Service } from '@n8n/di';
import { Config } from '@n8n/config';

@Service()
export class MyService {
  constructor(private readonly config: Config) {}
}

📖 Besoin de plus de détails? Lisez /AGENTS.md et /packages/frontend/AGENTS.md

Skills similaires