Используете ли вы кодогенерацию в проектах на Node.js?

«Используете ли вы кодогенерацию в проектах на Node.js?» — вопрос из категории Архитектура, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, я использую кодогенерацию для автоматизации рутинных задач и обеспечения консистентности кода. В моих Node.js проектах это особенно полезно для:

  • Генерации типизированных клиентов API из спецификаций OpenAPI/Swagger с помощью инструментов вроде openapi-typescript-codegen.
  • Создания TypeScript-типов для GraphQL с использованием graphql-code-generator на основе схемы.
  • Генерации кода для работы с БД, например, Prisma Client от Prisma ORM, который создает полностью типизированный запросник на основе схемы данных.

Я также настраиваю собственные генераторы для шаблонных структур проекта, например, для создания новых модулей с контроллерами, сервисами и тестами. Для этого удобно использовать plop.js:

// plopfile.js
export default function (plop) {
  plop.setGenerator('service', {
    description: 'Generate a new service module',
    prompts: [
      {
        type: 'input',
        name: 'name',
        message: 'Service name (e.g., user, payment):'
      }
    ],
    actions: [
      {
        type: 'add',
        path: 'src/services/{{kebabCase name}}.service.ts',
        templateFile: 'plop-templates/service.hbs'
      },
      {
        type: 'add',
        path: 'src/services/__tests__/{{kebabCase name}}.service.test.ts',
        templateFile: 'plop-templates/service.test.hbs'
      }
    ]
  });
}

Ключевой принцип — применять кодогенерацию там, где она устраняет повторяющуюся работу и снижает вероятность человеческой ошибки, но при этом не создает "магию", затрудняющую отладку и понимание кодовой базы.