1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zce-caz

Клонировать/Скачать
create-template.zh-CN.md 8.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 08:57 4b6762f
console.log('template setup', ctx)
}

module.exports = {
  // ...
  prompts: [
    {
      name: 'install',
      type: 'confirm',
      message: 'Install dependencies',
      initial: true
    },
    {
      name: 'pm',
      type: prev => prev ? 'select' : null,
      message: 'Package manager',
      hint: ' ',
      choices: [
        { title: 'npm', value: 'npm' },
        { title: 'yarn', value: 'yarn' }
      ]
    }
  ],
  setup: async ctx => {
    // 根据用户选择决定如何安装依赖
    ctx.config.install = ctx.answers.install && ctx.answers.pm
  }
}
module.exports = {
  // ...
  prompts: [
    {
      name: 'features',
      type: 'multiselect',
      message: 'Project features',
      instructions: false,
      choices: [
        { title: 'TypeScript', value: 'typescript', selected: true }
        // ....
      ]
    }
  ],
  setup: async ctx => {
    // 动态设置模板源文件目录
    ctx.config.source = ctx.answers.features.includes('typescript')
      ? 'template/typescript'
      : 'template/javascript'
  }
}

Другие настройки, на которые вы можете направить свою творческую энергию...

prepare

Template prepare hook, execute after template files prepare, before rename & render.

Шаблонный хук подготовки, выполняется после подготовки файлов шаблона, перед переименованием и рендерингом.

  • Тип: (ctx: Context) => Promise<void>
  • Ссылка: Context
module.exports = {
  prepare: async ctx => {
    // В этом контексте вы можете безопасно получить доступ к следующим членам:
    const {
      template,
      project,
      options,
      dest,
      src,
      config,
      answers,
      files // Список файлов, которые ещё не были переименованы и отображены
    } = ctx
    console.log('template prepare', ctx)
  }
}

Пример:

Динамическое добавление необходимых сгенерированных файлов

module.exports = {
  prepare: async ctx => {
    ctx.files.push({
      path: 'additional.txt',
      contents: Buffer.from('<%= name %> additional contents')
    })
  }
}

emit

Template emit hook, execute after all files emit to the destination.

Хук генерации шаблонов, который выполняется после того, как все файлы сгенерированы в целевой каталог.

  • Тип: (ctx: Context) => Promise<void>
  • Ссылка: Context
module.exports = {
  emit: async ctx => {
    // Здесь вы можете безопасно получить доступ к следующим участникам:
    const {
      template,
      project,
      options,
      dest,
      src,
      config,
      answers,
      files // список файлов, которые уже были переименованы и визуализированы
    } = ctx
    console.log('template emit')
  }
}

complete

Завершающий обратный вызов, если он установлен как строка, то будет выведен на консоль.

Тип: string или (ctx: Context) => string | Promise<void | string> Значение по умолчанию: вывод всего списка сгенерированных файлов. Ссылка: Context.

Функция обратного вызова:

module.exports = {
  complete: async ctx => {
    // ctx => all context
    console.log('  Happy hacking ;)')
  }
}

Или строка:

module.exports = {
  complete: '  Happy hacking ;)'
}

Дополнительные примеры можно найти в fixtures.

Основные типы

Context

/**
 * Creator context.
 */
interface Context {
  /**
   * Template name.
   * e.g.
   * - offlical short name: `nm`
   * - offlical short name with branch: `nm#master`
   * - custom full name: `zce/nm`
   * - custom full name with branch: `zce/nm#master`
   * - local directory path: `~/templates/nm`
   * - full url: `https://github.com/zce/nm/archive/master.zip`
   */
  readonly template: string
  /**
   * Project name, which is also the project directory.
   */
  readonly project: string
  /**
   * More options.
   */
  readonly options: Options & Record<string, any>
  /**
   * The source directory where the template (absolute).
   */
  src: string
  /**
   * Generated result output destination directory (absolute).
   */
  dest: string
  /**
   * Template config.
   */
  readonly config: Template
  /**
   * Template prompts answers.
   */
  readonly answers: Answers<string>
  /**
   * Template files.
   */
  readonly files: File[]
}

Template

/**
 * Template config.
 */
export interface Template {
  /**
   * Template name.
   */
  name: string
  /**
   * Template version.
   */
  version?: string
  /**
   * Template source dirname.
   */
  source?: string
  /**
   * Template metadata.
   */
  metadata?: Record<string, unknown>
  /**
   * Template prompts.
   */
  prompts?: PromptObject | PromptObject[]
  /**
   *
``` ### Шаблонные фильтры

   */
  filters?: { [key: string]: (answers: Answers<string>) => boolean }
  /**
   * Помощники шаблонизатора.
   */
  helpers?: { [key: string]: unknown }
  /**
   * Автоматическая установка зависимостей.
   */
  install?: false | 'npm' | 'yarn' | 'pnpm'
  /**
   * Автоматическое создание репозитория Git.
   */
  init?: boolean
  /**
   * Хук настройки шаблона, выполняется после загрузки шаблона и завершения опроса.
   */
  setup?: (ctx: Context) => Promise<void>
  /**
   * Подготовительный хук шаблона, выполняется после подготовки файлов шаблона, перед переименованием и рендерингом.
   */
  prepare?: (ctx: Context) => Promise<void>
  /**
   * Эмиттерный хук шаблона, выполняется после того, как все файлы будут отправлены в место назначения.
   */
  emit?: (ctx: Context) => Promise<void>
  /**
   * Завершение работы шаблона.
   */
  complete?: ((ctx: Context) => string | Promise<string> | Promise<void>) | string
}
### File

```typescript
/**
 * Информация о файле.
 */
export interface File {
  /**
   * Полный путь к файлу
   */
  path: string
  /**
   * Содержимое файла (буфер)
   */
  contents: Buffer
}
## Зависимости

Поскольку шаблон автоматически устанавливает производственные зависимости перед работой, вы можете нормально использовать сторонние модули NPM в конфигурационном файле шаблона.

Например:

Установите модуль `chalk` в качестве производственной зависимости:

```shell
$ npm install chalk --save

index.js:

const chalk = require('chalk')

Примечание: Только производственные зависимости устанавливаются автоматически.

Типовые аннотации

Установите модуль caz в качестве зависимости разработки:

$ npm install caz --save-dev

Затем в вашем конфигурационном файле шаблона:

/** @type {import('caz').Template} */
module.exports = {
  // Имеет интеллектуальные подсказки и типовое восприятие (VSCode)
}

Трансляция шаблона

Если вы хотите напрямую вывести символы интерполяции шаблона, вы можете сделать это следующим образом:

  • <%= '\<%= name %\>' %> => <%= name %>
  • <%= '${name}' %> => ${name}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/zce-caz.git
git@api.gitlife.ru:oschina-mirror/zce-caz.git
oschina-mirror
zce-caz
zce-caz
main