пятница, 1 ноября 2013 г.

Grunt Рабочий пример

Файл package.json для установки модулей в Node JS:

{
      "name": "my-project"
    , "author": "Ivan Borisov"
    , "version": "1.0.0"
    , "description": "My first project."
    , "keywords": ["my", "project"]
    , "dependencies": {
          "connect": "2.9.0"
        , "express": "3.4.0"
        , "grunt": "~0.4.1"
        , "grunt-contrib-watch": "~0.5.3"
        , "grunt-contrib-clean": "~0.5.0"
        , "grunt-contrib-concat": "~0.3.0"
        , "grunt-contrib-requirejs": "~0.4.1"
        , "grunt-contrib-less": "~0.8.1"
        , "grunt-contrib-jshint": "~0.7.0"
        , "grunt-contrib-uglify": "~0.2.5"
        , "grunt-contrib-yuidoc": "~0.5.0"
      }
    , "scripts": {
          "start": "node server.js"
      }
    , "repository": {
          "type": "hg"
        , "url": "http://127.0.0.1:8080/repository/hg/my-project"
      }
    , "engines": {
          "node": ">=0.10.20"
      }
}

Файл Gruntfile.js для запуска задач Grunt JS:

module.exports = function (grunt) {

    grunt.initConfig({

        // Удалить ранее созданные файлы и папки
          clean: {
              files: [
                'build/test.min.js'
              ]
          }
       
        // Объединить содержимое файлов в один итоговый общий файл
        , concat: {
              scripts: {
                  src: [
                          'test-file1.js'
                        , 'test-file2.js'
                  ]
                , dest: 'test.js'
              }
            , styles: {
                  src: [
                          'css-file1.less'
                        , 'css-file2.less'
                  ]
                , dest: 'css-file.less'
              }
          }
       
        // Скомпилировать итоговый LESS-файл в итоговый CSS-файл      
        , less: {
              development: {
                files: {
                      'main-dev.css': 'css-file.less'
                }
              }
            , production: {
                  options: {
                      yuicompress: true
                  }
                , files: {
                      'main-pro.css': 'css-file.less'
                  }
              }
          }

        // Проверить код в JavaScript-файлах
        , jshint: {
              all: [
                  'test.js'
              ]
            , options: {
                  devel: false
                , camelcase: true
                , curly: true
                , eqeqeq: false
                , immed: true
                , indent: 4
                , latedef: true
                , newcap: true
                , noarg: true
                , quotmark: 'single'
                , undef: true
                , unused: true
                , strict: false
                , trailing: true
                , eqnull: true
                , laxcomma: true
                , browser: true
                , jquery: true
                , node: true
                , nonstandard: true
                , worker: true
                , white: false
                , maxlen: 130
              }
            , globals: {
                  require: true
                , define: true
                , underscore: true
                , '_': true
              }
          }
       
        // Создать единый файл из модулей Require JS
        , requirejs: {
            compile: {
                options: {
                      baseUrl: './'
                    , name: 'main'
                    , out: 'main.js'
                    , paths: {
                        jquery: 'empty:'
                      }
                }
            }
          }
       
        // Сжать код в JavaScript-файлах
        , uglify: {
              options: {
                  banner: '/*! Файл создан: <%= grunt.template.today("yyyy-mm-dd") %> */\n'
              }
            , build: {
                  src: 'test.js'
                , dest: 'build/test.min.js'
              }
          }
       
        // Создать папку с документацией кода для JavaScript-файлов
        , yuidoc: {
              compile: {
                options: {
                    paths: [
                          './'
                    ]
                  , outdir: 'doc'
                }
              }
          }
       
        // Начать остлеживание изменений кода файлов
        , watch: {
              options: {
                livereload: true // Разрешить живую перезагрузку страницы
                // Для живой перезагрузки в HTML-файл надо добавить строку
                // <script src="http://localhost:35729/livereload.js" type="text/javascript"></script>
              }
            , scripts: {
                  files: ['test-file1.js']
                , tasks: ['clean', 'concat', 'jshint']
              }
            , styles: {
                  files: ['css-file1.less']
                , tasks: ['less']
              }
          }

    });

    grunt.loadNpmTasks('grunt-contrib-clean');
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-less');
    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-requirejs');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-yuidoc');
    grunt.loadNpmTasks('grunt-contrib-watch');

    grunt.registerTask('default', [
          'clean'
        , 'concat'
        , 'less'
        , 'jshint'
        , 'requirejs'
        , 'uglify'
        , 'yuidoc'
        , 'watch'
    ]);

};

Файл rungrunt.js для запуска Grunt JS из консоли:

require('grunt').cli();


Комментариев нет:

Отправить комментарий