Автоматизация рабочего процесса с помощью Grunt.js
Grunt — это средство выполнения задач на Javascript. Он автоматизирует повторяющиеся задачи и рабочий процесс Steamline. Он использует Node JS и может быть установлен через npm (диспетчер пакетов Node).
С прошлого года я использую Grunt для нескольких своих проектов — для конкатенации, минимизации файлов css и JavaScript, а также для компиляции SASS, проверки синтаксических ошибок и запуска модульного теста.
Два важных файла Grunt
Package.json
Файл метаданных проекта хранит информацию обо всех зависимостях. При запуске установки $npm гарантируется, что будет установлена правильная версия.
{
"name": "my-project-name",
"version": "0.1.0",
"devDependencies": {
"grunt": "~0.4.5",
"grunt-contrib-compass": "~0.10.0",
"grunt-contrib-hologram": "~0.4.1",
"grunt-contrib-uglify": "~0.5.0"
}
}
Gruntfile.js
В файле конфигурации хранится подробная информация о каждом подключаемом модуле Grunt.
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
// Concatenate JavaScript files
uglify: {
all: {
files: {
'app/assets/js/all.min.js': ['app/assets/js/main/*.js', 'app/assets/js/common.js']
}
}
},
// Compile SASS to CSS
compass: {
dist: {
options: {
sassDir: '../sass',
cssDir: '../css',
outputStyle: 'compressed'
}
},
// Generate pattern library
hologram: {
generate: {
options: {
config: 'hologram_config.yml'
}
}
},
}
});
// Load the plugin
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-compass');
grunt.loadNpmTasks('grunt-contrib-hologram');
// Default task(s).
grunt.registerTask('default', [
'uglify:all',
'compass',
'hologram'
]);
};
grunt.initConfig — здесь мы определяем конфигурации плагина Grunt.
grunt.loadNpmTasks — здесь мы загружаем подключаемый модуль Grunt.
grunt.registerTask — здесь мы регистрируем задачу Grunt.
Настройка Grunt
Убедитесь, что у вас установлены node.js и npm, вот пошаговое руководство. После завершения установки, давайте начнем!
Установите интерфейс командной строки
$npm install -g grunt-cli
Установить Grunt
$npm install grunt --save-dev
Установите подключаемый модуль Grunt
$npm install [grunt-plugin-name] --save-dev
Беги хрюканье
Просто введите ниже, чтобы запустить все задачи одновременно
$grunt
Вы также можете настроить registerTask и запустить конкретную задачу
grunt.registerTask('compass', ['compass']);
затем введите ниже, чтобы запустить
$grunt compass
Выполните задачу Grunt, вы должны увидеть следующий вывод в терминале:
Running "compass:dist" (compass) task
write /StyleGuide/css/crlib.styles.no-query.css (6.04s)
write /StyleGuide/css/crlib.styles.css (6.859s)
Running "compass:dev" (compass) task
Running "hologram:generate" (hologram) task
Custom markdown renderer Cortanamarkdownrenderer loaded.
Build completed. (-:
Done, without errors.
Проверьте это с Grunt
Jasmine — это фреймворк для тестирования разработки, ориентированной на поведение, для JavaScript. Его также называют безголовым тестированием, потому что оно не зависит от браузеров, DOM или какой-либо инфраструктуры JavaScript. Использовать Grunt для автоматизированного тестирования очень просто.
Установить Жасмин
$npm install grunt-contrib-jasmine --save-dev
Настроить задачу
jasmine : {
src : 'theme-build/js/*.js',
options : {
specs : 'theme-build/specs/*.js'
}
}
Добавить спецификацию
Создайте спецификацию Jasmine, specs/spec.js, как показано ниже.
describe("crlibSlidebarsr", function() {
it("should be a constructor function", function() {
expect(typeof window.crlibSlidebars).toBe("function");
});
});
Загрузить плагин
grunt.loadNpmTasks('grunt-contrib-jasmine');
Запустите подключаемый модуль
$grunt jasmine
Терминал должен выглядеть так…
Running "jasmine:src" (jasmine) task
Testing jasmine specs via PhantomJS
>> ReferenceError: Can't find variable: angular at
>> theme-build/js/main.js:12
>> theme-build/js/main.js:17
crlibSlidebars
X should be a constructor function
Expected 'undefined' to be 'function'. (1)
1 spec in 0.005s.
>> 1 failures
Смотри вместе с Грантом
Grunt может наблюдать за изменениями файлов, выполнять задачи, а затем перезагружать страницу для нас. Фрист, давайте установим Grunt watch
$npm install grunt-contrib-watch --save-dev
Настроить задачу
// Watch files
watch: {
// Watch .scss files
sass: {
files: ['css/sass/**/*.scss'],
tasks: ['sass:dev'],
},
// Live reload files
livereload: {
options: { livereload: true },
files: [
'css/**/*.css',
'**/*.html',
]
}
},
Загрузить плагин
grunt.loadNpmTasks('grunt-contrib-watch');
Запустите подключаемый модуль
$grunt watch
Тада! Это сделано! Теперь Grunt будет следить за изменениями в любых файлах .scss, а затем автоматически запускать задачу.