Оригинальный автор(ы) | Бен Алман |
---|---|
Разработчик(и) | Бен Алман, Тайлер Келлен, Кайл Робинсон Янг, Влад Филиппов, Синдре Сорхус, Айзек Дюразо, Джаррод Оверсон, Тим Браньен, Йорн Цефферер, Джеймс Смит, Дэйв Геддес |
Первоначальный выпуск | 4 апреля 2016 г. ( 2016-04-04 ) | [1]
Стабильный релиз | 1.4.1 / 22 апреля 2021 г. ( 2021-04-22 ) [2] |
Репозиторий | github.com/gruntjs/grunt |
Написано в | JavaScript |
Операционная система | Linux , MacOS , Windows |
Платформа | Node.js |
Доступно в | Английский |
Тип | Task Runner, инструмент сборки |
Лицензия | Лицензия Массачусетского технологического института [3] [4] |
Веб-сайт | gruntjs.com |
Grunt — это JavaScript task runner , инструмент, используемый для автоматического выполнения частых задач, таких как минификация , компиляция , модульное тестирование и линтинг . Он использует интерфейс командной строки для запуска пользовательских задач, определенных в файле (известном как Gruntfile). Grunt был создан Беном Алманом и написан на Node.js. Он распространяется через npm . По состоянию на октябрь 2022 года в экосистеме Grunt было доступно более 6000 плагинов. [5]
Компании и проекты, которые используют Grunt, включают Adobe Systems , jQuery , Twitter , Mozilla , Bootstrap , Cloudant , Opera , WordPress , Walmart и Microsoft . [5]
Grunt изначально был создан Беном Алманом в 2012 году как эффективная альтернатива для упрощения написания и поддержки набора задач процесса сборки JavaScript в одном огромном файле. Он был разработан как инструмент командной строки на основе задач для проектов JavaScript. [6]
Grunt в основном используется для автоматизации задач, которые необходимо выполнять регулярно. Существуют тысячи плагинов, которые можно установить и использовать напрямую для выполнения некоторых часто используемых задач. Одной из самых желанных особенностей Grunt является его высокая настраиваемость, т. е. он позволяет разработчикам добавлять, расширять и изменять пользовательские задачи в соответствии со своими личными потребностями; каждая задача имеет набор параметров конфигурации, которые может установить пользователь. Более того, Grunt предлагает возможность определять пользовательские задачи, которые могут объединять несколько существующих задач в одну задачу или добавлять совершенно новую функциональность. [7]
Интерфейс командной строки Grunt (CLI) может быть установлен глобально через npm . Выполнение grunt
команды загрузит и запустит версию Grunt, установленную локально в текущем каталоге. Таким образом, мы можем поддерживать разные версии Grunt в разных папках и запускать каждую из них по своему усмотрению. [5]
Чтобы использовать Grunt в проекте, необходимо создать два специальных файла в корневом каталоге, а именно package.json и Gruntfile.
dependencies
или devDependencies
.Задачи — это модули, которые выполняют определенную работу. Они определены в Gruntfile.
Разработчики могут загружать предопределенные задачи из существующих плагинов Grunt и/или писать пользовательский код для определения собственных задач в зависимости от своих требований. После определения эти задачи можно запускать из командной строки, просто выполняя grunt <taskname>
. Если <taskname>
в Gruntfile определено значение «default» , то простого выполнения grunt
будет достаточно.
Ниже приведен пример файла Gruntfile, написанного на JavaScript, который показывает, как загружать плагины, создавать пользовательские задачи и настраивать их:
модуль . экспорт = функция ( grunt ) { // Конфигурация задачи grunt.initConfig ( { taskName1 : ' Конфигурация задачи1' , taskName2 : 'Конфигурация задачи2' }); // Загружает плагины grunt.loadNpmTasks ( 'pluginName1' ) ; grunt.loadNpmTasks ( ' pluginName2' ) ; // Пользовательские задачи grunt.registerTask ( 'customTaskName1' , ' Описание пользовательской задачи' , function ( taskParameter ) { // Пользовательские операторы }); // Объединение нескольких задач в одну задачу grunt.registerTask ( ' customTaskName2' , [ ' taskName1' , 'customTaskName1' ]); // Задача по умолчанию — запускается, если имя задачи не указано grunt.registerTask ( 'default' , [ 'customTaskName2' ]); };
В приведенном выше примере выполнение grunt
команды приведет к запуску <customtaskName2>
, которая была определена выше как комбинация <taskName1>
и <customTaskName1>
.
Плагины — это повторно используемый код, который определяет набор задач. Каждый плагин внутри содержит каталог задач с файлами JavaScript, имеющими тот же синтаксис, что и Gruntfile. Большинство плагинов Grunt публикуются с ключевым словом gruntplugin
[8] в npm и имеют префикс grunt
. Это помогает Grunt отображать все плагины в списке плагинов Grunt. Плагины, официально поддерживаемые Grunt, имеют префикс grunt-contrib
[8] и также отмечены символом звездочки в списке плагинов. Некоторые популярные плагины включают grunt-contrib-watch, grunt-contrib-clean, grunt-contrib-uglify.
Разработчики даже могут создавать собственные плагины Grunt с помощью grunt-init
плагина и публиковать их в npm с помощью npm publish
команды.
Ниже приведены некоторые преимущества использования Grunt:
Ant или Apache Ant — это инструмент сборки на основе Java . Ant имеет чуть более сотни встроенных задач, которые лучше подходят для проектов со структурой сборки Java. Написание пользовательского кода в Ant требует от пользователей написания JAR- файла и ссылки на него из XML . Это добавило бы ненужных сложностей проектам, которым не требуется сама Java. Конфигурации сборки Ant перечислены в формате XML, а не JSON . [7]
Rake позволяет разработчикам определять задачи в Ruby . Rake не имеет концепции плагинов или предопределенных задач, что означает, что все требуемые действия должны быть написаны и затем выполнены. Это делает разработки дорогостоящими по сравнению с Grunt, который имеет большой набор повторно используемых плагинов. [7]
Gulp.js — это инструмент запуска задач на основе JavaScript, похожий на Grunt, поскольку оба они следуют модульной архитектуре и основаны на npm . Задачи Gulp определяются кодом, а не конфигурацией. Gulp быстрее Grunt. Grunt использует временные файлы для передачи вывода из одной задачи в другую, тогда как в Gulp файлы передаются между задачами. [7]
{{cite book}}
: CS1 maint: местоположение ( ссылка )