К основному содержанию
скилл CX Codex

nodejs-development — скилл для Claude Code

Набор инструкций для разработки на Node.js и TypeScript. Помогает агенту писать коллекции Payload CMS, компоненты Vue 3 и валидацию на Zod.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Mindrally/skills --skill nodejs-development -a claude-code
Открыть на GitHub

Что делает nodejs-development

Скилл задаёт правила и шаблоны для написания серверного и клиентского кода на TypeScript. В него включены готовые паттерны для связки Payload CMS с Next.js App Router: файловая структура каталогов, объявление коллекций с контролем доступа и роуты выборки данных через getPayloadClient.

Для клиентской части описана работа с Vue.js через <script setup lang="ts">, типизированные composables и хранилища Pinia. Валидация входящих данных строится на Zod, включая middleware для Express и безопасный парсинг схем через safeParse.

В скилле нет исполняемых скриптов или готовых утилит командной строки. Это чисто текстовое руководство по архитектуре, поэтому агент опирается только на установленные в проекте пакеты.

Какие задачи решает

  • настроить коллекции Payload CMS с контролем доступа в Next.js
  • создать типизированный Vue-компонент со скриптом <script setup>
  • написать composable для запросов к API с обработкой ошибок
  • сделать middleware валидации тела запроса для Express на базе Zod
  • организовать хранилище Pinia с типизированным состоянием и действиями

Примеры запросов агенту

  • Создай коллекцию Payload CMS для постов блога с полями title, content и publishedDate.
  • Напиши composable useApi на Vue 3 с типизацией ответа и состояния загрузки.
  • Сделай middleware для Express, который проверяет тело запроса по схеме Zod.

Как установить nodejs-development

1Через Skills CLI (Vercel)

npx skills add Mindrally/skills --skill nodejs-development -a claude-code

2Вручную: положить файлы

~/.claude/skills/nodejs-development/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/nodejs-development/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о nodejs-development

Как установить nodejs-development в Claude Code?

Выполните в терминале команду npx skills add Mindrally/skills --skill nodejs-development -a claude-code. Также файл можно скопировать вручную по пути ~/.claude/skills/nodejs-development/SKILL.md.

Что делает скилл nodejs-development?

Он даёт ИИ-ассистенту готовые архитектурные паттерны для TypeScript, Payload CMS, Next.js, Vue 3, Pinia и Zod. Модель использует их при генерации схем данных, роутов и компонентов.

Какие библиотеки нужны для работы с кодом из этого скилла?

Примеры в скилле ориентированы на payload, vue, pinia, zod и express. Конкретный набор библиотек зависит от того, какую именно часть стека вы внедряете в проект.

Исходный текст

SKILL.md · Apache-2.0
---
name: nodejs-development
description: Node.js development guidelines covering Payload CMS, Vue.js with TypeScript, and general TypeScript best practices
metadata:
  maintainer: Mindrally
  source: https://github.com/Mindrally/skills
---

# Node.js Development Guidelines

You are an expert in Node.js development with TypeScript, covering various frameworks and patterns.

## Payload CMS with Next.js

### Project Setup
```
project/
├── src/
│   ├── app/              # Next.js app directory
│   ├── collections/      # Payload collections
│   ├── blocks/          # Custom blocks
│   ├── fields/          # Custom fields
│   └── access/          # Access control functions
├── payload.config.ts    # Payload configuration
└── next.config.js       # Next.js configuration
```

### Collection Definition
```typescript
import { CollectionConfig } from 'payload/types';

const Posts: CollectionConfig = {
  slug: 'posts',
  admin: {
    useAsTitle: 'title',
  },
  access: {
    read: () => true,
    create: ({ req: { user } }) => Boolean(user),
    update: ({ req: { user } }) => Boolean(user),
    delete: ({ req: { user } }) => Boolean(user),
  },
  fields: [
    {
      name: 'title',
      type: 'text',
      required: true,
    },
    {
      name: 'content',
      type: 'richText',
    },
    {
      name: 'publishedDate',
      type: 'date',
    },
  ],
};

export default Posts;
```

### API Routes
```typescript
// app/api/posts/route.ts
import { getPayloadClient } from '@/lib/payload';

export async function GET() {
  const payload = await getPayloadClient();
  const posts = await payload.find({
    collection: 'posts',
    limit: 10,
  });
  return Response.json(posts);
}
```

## Vue.js with TypeScript

### Component Structure
```vue
<script setup lang="ts">
import { ref, computed, onMounted } from 'vue';

interface User {
  id: number;
  name: string;
  email: string;
}

const props = defineProps<{
  userId: number;
}>();

const emit = defineEmits<{
  (e: 'update', user: User): void;
}>();

const user = ref<User | null>(null);
const isLoading = ref(false);

const displayName = computed(() => user.value?.name ?? 'Unknown');

async function fetchUser() {
  isLoading.value = true;
  try {
    const response = await fetch(`/api/users/${props.userId}`);
    user.value = await response.json();
  } finally {
    isLoading.value = false;
  }
}

onMounted(fetchUser);
</script>

<template>
  <div v-if="isLoading">Loading...</div>
  <div v-else-if="user">
    <h2>{{ displayName }}</h2>
    <p>{{ user.email }}</p>
  </div>
</template>
```

### Composables
```typescript
// composables/useApi.ts
import { ref } from 'vue';

export function useApi<T>(url: string) {
  const data = ref<T | null>(null);
  const error = ref<Error | null>(null);
  const isLoading = ref(false);

  async function execute() {
    isLoading.value = true;
    error.value = null;

    try {
      const response = await fetch(url);
      if (!response.ok) throw new Error('Request failed');
      data.value = await response.json();
    } catch (e) {
      error.value = e as Error;
    } finally {
      isLoading.value = false;
    }
  }

  return { data, error, isLoading, execute };
}
```

### Pinia Store
```typescript
// stores/user.ts
import { defineStore } from 'pinia';

interface UserState {
  user: User | null;
  isAuthenticated: boolean;
}

export const useUserStore = defineStore('user', {
  state: (): UserState => ({
    user: null,
    isAuthenticated: false,
  }),

  getters: {
    displayName: (state) => state.user?.name ?? 'Guest',
  },

  actions: {
    async login(credentials: LoginCredentials) {
      const user = await authService.login(credentials);
      this.user = user;
      this.isAuthenticated = true;
    },

    logout() {
      this.user = null;
      this.isAuthenticated = false;
    },
  },
});
```

## TypeScript with Zod

### Schema Definition
```typescript
import { z } from 'zod';

const UserSchema = z.object({
  id: z.number(),
  name: z.string().min(1),
  email: z.string().email(),
  role: z.enum(['user', 'admin']),
  createdAt: z.date(),
});

type User = z.infer<typeof UserSchema>;

const CreateUserSchema = UserSchema.omit({ id: true, createdAt: true });
type CreateUserInput = z.infer<typeof CreateUserSchema>;
```

### Validation
```typescript
function createUser(input: unknown): User {
  const validatedInput = CreateUserSchema.parse(input);
  // Input is now typed as CreateUserInput
  return {
    ...validatedInput,
    id: generateId(),
    createdAt: new Date(),
  };
}

// Safe parsing (doesn't throw)
function validateUser(input: unknown) {
  const result = UserSchema.safeParse(input);
  if (!result.success) {
    console.error(result.error.issues);
    return null;
  }
  return result.data;
}
```

### API Validation Middleware
```typescript
import { z } from 'zod';
import { Request, Response, NextFunction } from 'express';

function validate<T extends z.ZodSchema>(schema: T) {
  return (req: Request, res: Response, next: NextFunction) => {
    const result = schema.safeParse(req.body);
    if (!result.success) {
      return res.status(400).json({ errors: result.error.issues });
    }
    req.body = result.data;
    next();
  };
}

// Usage
app.post('/users', validate(CreateUserSchema), createUserHandler);
```

## General Best Practices

### Error Handling
- Use custom error classes
- Implement global error handlers
- Log errors with context
- Return appropriate status codes

### Async Patterns
- Use async/await consistently
- Handle promise rejections
- Implement proper timeouts
- Use Promise.all for parallel operations

### Testing
- Write unit tests for utilities
- Integration tests for APIs
- Use test fixtures
- Mock external dependencies

© Mindrally · Apache-2.0 · Mindrally/skills

Похожие скиллы

Все скиллы по теме «Бэкенд и API» →
mcp-builder официальный anthropics Скилл проводит через создание MCP-сервера на TypeScript или Python: от изучения протокола до тестов и оценки качества. 130 949установок claude-api официальный anthropics Справочник по Anthropic SDK и API Claude для генерации кода без устаревших параметров и выдуманных методов. 74 198установок lark-im larksuite Скилл подключает Lark IM к агенту: он отправляет сообщения, ищет историю, управляет чатами и файлами. Подойдёт для задач вокруг командных коммуникаций. CX Codex +1 472 900установок lark-event larksuite Слушает события Lark/Feishu и отдаёт их потоком NDJSON. Подходит для ботов, обработчиков сообщений и долгих подписчиков. CX Codex +1 466 800установок caveman-discover JuliusBrussee Находит точки вызова LLM в репозитории и размечает их воркфлоу для Caveman Cloud, чтобы расходы на токены не сливались в одну общую кучу. CX Codex +1 104 400установок migration JuliusBrussee Скилл задаёт правила безопасных миграций схем, данных и API с обязательным откатом. Пригодится при изменениях, где нельзя терять данные или ломать совместимость. CX Codex +1 103 900установок

Из того же набора214

svelte Инструкция для ИИ-агентов по разработке на Svelte 5 и SvelteKit с рунами, сниппетами, SSR и правилами миграции со Svelte 4. CX Codex +1 753установок grpc-development Скилл ведёт агента по шагам сборки gRPC-сервиса: контракт в .proto, генерация стабов, сервер, клиент, интерсепторы. CX Codex +1 755установок backend-development Задаёт агенту правила бэкенд-разработки на C++ и Elixir/Phoenix: именование, управление памятью, контексты Phoenix, обработка ошибок. CX Codex +1 753установок business-central-development Скилл обучает ИИ-агента разработке расширений для Microsoft Dynamics 365 Business Central на языке AL. Он задаёт правила для таблиц, страниц и модулей codeunit. CX Codex +1 749установок ethereum Задаёт агенту правила разработки смарт-контрактов Ethereum: паттерны безопасности, интеграция OpenZeppelin, тесты на Hardhat. CX Codex +1 737установок devops Задаёт агенту роль старшего DevOps-инженера: правила для Kubernetes, CI/CD, Bash, Ansible и Python. Пригодится, когда инфраструктуру пишут вместе с моделью. CX Codex +1 739установок anime-js Скилл задаёт агенту правила работы с Anime.js: таймлайны, stagger, SVG-морфинг и производительность. Пригодится, когда анимации в проекте пишет ИИ. CX Codex +1 736установок ruby Задаёт агенту стиль кода, возможности Ruby 3.x и правила тестирования на RSpec. Пригодится, когда пишете или правите Ruby-проект. CX Codex +1 734установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой