Spec-Zone.ru › Grunt

Шаблон проекта

grunt-init

Grunt-init — это инструмент для создания шаблонов проектов, предназначенный для автоматизации процесса создания проектов. Он создаст всю структуру каталогов на основе текущей среды и ответов на некоторые вопросы. Точные созданные файлы и их содержимое зависят от выбранного шаблона и ответов на заданные вопросы.

Примечание: Эта автономная утилита раньше была встроенной в Grunt в качестве задачи «init». Обратитесь к руководству по обновлению с 0.3 до 0.4 для получения дополнительной информации об этом изменении.

Установка

Для использования grunt-init необходимо установить его глобально.

npm install -g grunt-init

Это поместит команду grunt-init в вашу системную переменную PATH, позволяя запускать её из любой точки.

Примечания: Возможно, вам потребуется использовать sudo или запустить командную оболочку как администратор.

Использование

  • Получить справку по программе и список доступных шаблонов с помощью grunt-init --help
  • Создать проект на основе доступного шаблона с помощью grunt-init TEMPLATE
  • Создать проект на основе произвольно расположенного шаблона с помощью grunt-init /path/to/TEMPLATE

Обратите внимание, что большинство шаблонов генерируют файлы в текущем каталоге, поэтому обязательно измените каталог на новый, если не хотите перезаписывать существующие файлы.

Установка шаблонов

После установки шаблонов в ваш каталог ~/.grunt-init/ (%USERPROFILE%\.grunt-init\ в Windows) они станут доступны для использования с помощью grunt-init. Рекомендуется использовать git для клонирования шаблона в этот каталог. Например, шаблон grunt-init-jquery можно установить так:

git clone https://github.com/gruntjs/grunt-init-jquery.git ~/.grunt-init/jquery

Примечание: если вы хотите сделать шаблон доступным локально как "foobarbaz", вы можете указать ~/.grunt-init/foobarbaz во время клонирования. Grunt-init будет использовать фактическое имя каталога шаблона, как оно существует внутри каталога ~/.grunt-init/.

Несколько шаблонов grunt-init поддерживаются официально:

  • grunt-init-commonjs - Создать модуль commonjs, включая тесты модулей Nodeunit. (образец "generated" репозитория | транскрипт создания проекта)
  • grunt-init-gruntfile - Создать базовый Gruntfile. (образец "generated" репозитория | транскрипт создания проекта)
  • grunt-init-gruntplugin - Создать плагин Grunt, включая тесты модулей Nodeunit. (образец "generated" репозитория | транскрипт создания проекта)
  • grunt-init-jquery - Создать плагин jQuery, включая тесты модулей QUnit. (образец "generated" репозитория | транскрипт создания проекта)
  • grunt-init-node - Создать модуль Node.js, включая тесты модулей Nodeunit. (образец "generated" репозитория | транскрипт создания проекта)

Пользовательские шаблоны

Вы можете создавать и использовать пользовательские шаблоны. Ваш шаблон должен соответствовать той же структуре, что и вышеупомянутые шаблоны.

Пример шаблона с именем my-template будет иметь следующую общую структуру каталогов:

  • my-template/template.js — основной файл шаблона.
  • my-template/rename.json — правила переименования, специфичные для шаблона, обрабатываются как шаблоны.
  • my-template/root/ — файлы, которые будут скопированы в целевое место.

Предполагая, что эти файлы существуют в /path/to/my-template, команда grunt-init /path/to/my-template будет использоваться для обработки шаблона. В одном каталоге могут храниться несколько шаблонов с разными именами.

Кроме того, если вы поместите этот пользовательский шаблон в ваш каталог ~/.grunt-init/ (%USERPROFILE%\.grunt-init\ в Windows), он будет автоматически доступен для использования с помощью просто grunt-init my-template.

Копирование файлов

Пока шаблон использует методы init.filesToCopy и init.copyAndProcess, все файлы в подкаталоге root/ будут скопированы в текущий каталог при запуске шаблона init.

Обратите внимание, что все скопированные файлы будут обрабатываться как шаблоны, и любой шаблон {% %} будет обрабатываться относительно собранного объекта данных props, если не установлена опция noProcess. Обратитесь к шаблону jquery для примера.

Переименование или исключение файлов шаблона

Файл rename.json описывает соответствия переименований от sourcepath до destpath. Файл sourcepath должен содержать путь к копируемому файлу относительно папки root/, но значение destpath может содержать шаблоны {% %}, описывающие, каким будет целевой путь.

Если false указан как destpath, файл не будет скопирован. Также поддерживаются шаблоны glob для srcpath.

Указание значений по умолчанию для запросов

Каждый запрос init имеет значение по умолчанию, закодированное в нём или же пытается определить это значение из текущей среды. Если вы хотите переопределить значение по умолчанию для определённого запроса, вы можете сделать это в дополнительном файле OS X или Linux ~/.grunt-init/defaults.json или Windows %USERPROFILE%\.grunt-init\defaults.json.

Например, мой файл defaults.json выглядит так, потому что я хочу использовать немного другое имя, чем имя по умолчанию, исключить мой адрес электронной почты и автоматически указать URL автора.

{
  "author_name": "\"Cowboy\" Ben Alman",
  "author_email": "none",
  "author_url": "http://benalman.com/"
}

Примечание: пока все встроенные запросы не будут документированы, вы можете найти их имена и значения по умолчанию в исходном коде.

Определение шаблона init

exports.description

Это краткое описание шаблона будет отображаться вместе с именем шаблона, когда пользователь запустит grunt init или grunt-init для отображения списка всех доступных шаблонов init.

exports.description = descriptionString;

exports.notes

Если указано, это необязательное расширенное описание будет отображаться перед отображением любых запросов. Это хорошее место, чтобы дать пользователю немного помощи, объяснив соглашения об именах, какие запросы могут быть необходимы или необязательны и т.д.

exports.notes = notesString;

exports.warnOn

Если этот необязательный (но рекомендуемый) шаблон подстановок или массив шаблонов подстановок соответствует, Grunt прервётся с предупреждением, которое пользователь может переопределить с помощью --force. Это очень полезно в тех случаях, когда шаблон init потенциально может перезаписать существующие файлы.

exports.warnOn = wildcardPattern;

Хотя наиболее распространённое значение будет '*', соответствующее любому файлу или каталогу, синтаксис шаблонов подстановок minimatch позволяет добиться большой гибкости. Например:

exports.warnOn = 'Gruntfile.js';    // Warn on a Gruntfile.js file.
exports.warnOn = '*.js';            // Warn on any .js file.
exports.warnOn = '*';               // Warn on any non-dotfile or non-dotdir.
exports.warnOn = '.*';              // Warn on any dotfile or dotdir.
exports.warnOn = '{.*,*}';          // Warn on any file or dir (dot or non-dot).
exports.warnOn = '!*/**';           // Warn on any file (ignoring dirs).
exports.warnOn = '*.{png,gif,jpg}'; // Warn on any image file.

// This is another way of writing the last example.
exports.warnOn = ['*.png', '*.gif', '*.jpg'];

exports.template

Хотя свойства exports определены вне этой функции, весь фактический код инициализации указан внутри. В эту функцию передаются три аргумента. Аргумент grunt — ссылка на grunt, содержащая все методы и библиотеки grunt. Аргумент init — объект, содержащий методы и свойства, специфичные для данного шаблона init. Аргумент done — функция, которую необходимо вызвать по завершении выполнения шаблона init.

exports.template = function(grunt, init, done) {
  // See the "Inside an init template" section.
};

Внутри шаблона init

init.addLicenseFiles

Добавить файлы лицензий с правильными именами в объект файлов.

var files = {};
var licenses = ['MIT'];
init.addLicenseFiles(files, licenses);
// files === {'LICENSE-MIT': 'licenses/LICENSE-MIT'}

init.availableLicenses

Возвращает массив доступных лицензий.

var licenses = init.availableLicenses();
// licenses === [ 'Apache-2.0', 'GPL-2.0', 'MIT', 'MPL-2.0' ]

init.copy

Копирует файл из абсолютного или относительного исходного пути в необязательный относительный путь назначения, при желании обработав его с помощью переданного обратного вызова.

init.copy(srcpath[, destpath], options)

init.copyAndProcess

Итерируется по всем файлам в переданном объекте, копируя исходный файл в целевое место и обрабатывая содержимое.

init.copyAndProcess(files, props[, options])

init.defaults

Установленные пользователем значения по умолчанию для init из defaults.json.

init.defaults

init.destpath

Абсолютный путь к целевому файлу.

init.destpath()

init.expand

То же самое, что и grunt.file.expand.

Возвращает уникальный массив всех путей к файлам или каталогам, которые соответствуют заданному шаблону подстановки. Этот метод принимает либо шаблоны подстановок, разделённые запятыми, либо массив шаблонов подстановок. Пути, соответствующие шаблонам, начинающимся с !, будут исключены из возвращаемого массива. Шаблоны обрабатываются в порядке, поэтому порядок включения и исключения имеет значение.

init.expand([options, ] patterns)

init.filesToCopy

Возвращает объект, содержащий файлы для копирования с их абсолютным исходным путём и относительным путём назначения, переименованный (или опущенный) в соответствии с правилами в rename.json (если он существует).

var files = init.filesToCopy(props);
/* files === { '.gitignore': 'template/root/.gitignore',
  '.jshintrc': 'template/root/.jshintrc',
  'Gruntfile.js': 'template/root/Gruntfile.js',
  'README.md': 'template/root/README.md',
  'test/test_test.js': 'template/root/test/name_test.js' } */

init.getFile

Получить путь к одному файлу задачи.

init.getFile(filepath[, ...])

init.getTemplates

Возвращает объект всех доступных шаблонов.

init.getTemplates()

init.initSearchDirs

Инициализировать каталоги для поиска шаблонов init. template — это местоположение шаблона. Также включает ~/.grunt-init/ и основные задачи init внутри grunt-init.

init.initSearchDirs([filename])

init.process

Запустить процесс, чтобы начать запрос ввода.

init.process(options, prompts, done)
init.process({}, [
  // Prompt for these values
  init.prompt('name'),
  init.prompt('description'),
  init.prompt('version')
], function(err, props) {
  // All finished, do something with the properties
});

init.prompt

Запросить у пользователя значение.

init.prompt(name[, default])

init.prompts

Объект всех запросов.

var prompts = init.prompts;

init.readDefaults

Считать JSON-значения по умолчанию из файлов задач (если они существуют), объединяя их в один объект данных.

init.readDefaults(filepath[, ...])

init.renames

Правила переименования для шаблона.

var renames = init.renames;
// renames === { 'test/name_test.js': 'test/{%= name %}_test.js' }

init.searchDirs

Массив каталогов, в которых нужно искать шаблоны.

var dirs = init.searchDirs;
/* dirs === [ '/Users/shama/.grunt-init',
  '/usr/local/lib/node_modules/grunt-init/templates' ] */

init.srcpath

Искать пути к шаблонам init для имени файла и вернуть абсолютный путь.

init.srcpath(filepath[, ...])

init.userDir

Возвращает абсолютный путь к каталогу шаблонов пользователя.

var dir = init.userDir();
// dir === '/Users/shama/.grunt-init'

init.writePackageJSON

Сохранить файл package.json в каталоге назначения. Обратный вызов может быть использован для послеобработки свойств для добавления/удаления/любых других действий.

init.writePackageJSON(filename, props[, callback])

Встроенные подсказки

author_email

Адрес электронной почты автора, используемый в package.json. Попытка найти значение по умолчанию из конфигурации пользователя Git.

author_name

Полное имя автора, используемое в package.json и уведомлениях об авторских правах. Попытка найти значение по умолчанию из конфигурации пользователя Git.

author_url

Публичный URL-адрес веб-сайта автора, используемый в package.json.

bin

Относительный путь к скрипту командной строки от корня проекта.

bugs

Публичный URL-адрес системы отслеживания ошибок проекта. По умолчанию используется система отслеживания ошибок GitHub, если у проекта есть репозиторий GitHub.

description

Описание проекта. Используется в package.json и файлах README.

grunt_version

Допустимый семантический диапазон версий Grunt, необходимый для проекта.

homepage

Публичный URL-адрес домашней страницы проекта. По умолчанию используется URL-адрес GitHub, если у проекта есть репозиторий GitHub.

jquery_version

Если это проект jQuery, версия jQuery, необходимая для проекта. Должно быть допустимым семантическим диапазоном версий.

licenses

Лицензия(и) для проекта. Несколько лицензий разделены пробелами. Встроенные лицензии: MIT, MPL-2.0, GPL-2.0, и Apache-2.0. По умолчанию MIT. Добавьте пользовательские лицензии с помощью init.addLicenseFiles.

main

Основная точка входа в проект. По умолчанию имя проекта в папке lib.

name

Имя проекта. Будет активно использоваться во всей шаблоне проекта. По умолчанию текущая рабочая директория.

node_version

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

npm_test

Команда для запуска тестов проекта. По умолчанию grunt.

repository

Репозиторий Git проекта. По умолчанию используется предположение о URL-адресе GitHub.

title

Человекочитаемое имя проекта. По умолчанию фактическое имя проекта, изменённое для лучшей читаемости.

version

Версия проекта. По умолчанию первая допустимая семантическая версия, 0.1.0.

© GruntJS Team
Licensed under the MIT License.
https://gruntjs.com/project-scaffolding

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API