Автоматизация рабочего процесса с помощью 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, а затем автоматически запускать задачу.