Шаблон проекта
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