рдкрд░рд┐рдЪрдп
рдпрджрд┐ рдЧреНрд░рдВрдЯ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╢рдмреНрдж рд╣реИ, рддреЛ рдЖрдк рдкрд╣рд▓реЗ рдХреНрд░рд┐рд╕ рдХреЙрдпрд░реНрд╕
рдХреЗ рд▓реЗрдЦ
" рдЧреНрд░рдВрдЯ
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ
рдЬреЛ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЧреНрд░рдВрдЯ
рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдмрджрд╕реВрд░рдд рдФрд░ рднрд╛рд░реА рд╣реИрдВ ред
" рдХреНрд░рд┐рд╕ рд╕реЗ рдкрд░рд┐рдЪрдп рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЧреНрд░рдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрди рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдж рд▓реЗрдВрдЧреЗ рдЬреЛ рдЧреНрд░рдВрдЯ рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдЕрдиреБрдЪреНрдЫреЗрдж рдореЗрдВ, рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЧреНрд░рдВрдЯ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреНрдпрд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ред рдЖрдк рдЧреНрд░рдВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХреМрд╢рд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ:
- рдХреИрд╕реЗ рдЕрдкрдиреЗ gruntfile рдХреЛ рд╕рд╛рдл рд╕реБрдерд░рд╛ рд░рдЦреЗрдВ
- рдЕрдкрдиреЗ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рд╕реБрдзрд╛рд░ рдХреИрд╕реЗ рдХрд░реЗрдВ
- рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдЯрд╕ рдХреЗ рдмрд░рд╛рдмрд░ рдореЗрдВ рдХреИрд╕реЗ рд░рдЦреЗрдВ
рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░: рдЧреНрд░рдВрдЯ рд╕рд┐рд░реНрдл рдХрдИ рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░
рдЧреБрд▓реНрдк рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ, рд╕реБрдкрд░! рдпрджрд┐, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрднреА рднреА рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЕрдкрдирд╛ рд╕реЗрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ! рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЧреНрд░рдВрдЯ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рд╣реИред
рдЖрдкрдХрд╛ рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдХрд╛ рдЖрдпреЛрдЬрди
рдпрджрд┐ рдЖрдк рдХрдИ рдЧреНрд░рдВрдЯ рдкреНрд▓рдЧ рдЗрди рдореЗрдВ рдкреНрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдЕрдкрдиреЗ рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдореЗрдВ рдХрдИ рдХрд╛рд░реНрдп рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рдмреЛрдЭрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдХрдИ рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реИрдВ: рдЕрдкрдиреЗ рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдХреЛ рдПрдХ рд╕рд╛рдл рдФрд░ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ред
рдЕрдиреБрдХреВрд▓рди рд╕реЗ рдкрд╣рд▓реЗ рдЧреНрд░рдиреНрдЯрдлрд╛рдЗрд▓
рдпрд╣ рд╣рдорд╛рд░реА рдЧреНрд░рдиреНрдЯрдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдХреВрд▓рди рд╕реЗ рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), concat: { dist: { src: ['src/js/jquery.js','src/js/intro.js', 'src/js/main.js', 'src/js/outro.js'], dest: 'dist/build.js', } }, uglify: { dist: { files: { 'dist/build.min.js': ['dist/build.js'] } } }, imagemin: { options: { cache: false }, dist: { files: [{ expand: true, cwd: 'src/', src: ['**/*.{png,jpg,gif}'], dest: 'dist/' }] } } }); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-imagemin'); grunt.registerTask('default', ['concat', 'uglify', 'imagemin']); };
рдЕрдЧрд░ рдЕрдм рдЖрдк рдХрд╣рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ тАЬрдЕрд░реЗ! рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реЛрдЧрд╛! рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ! тАЭ, рддрдм рд╢рд╛рдпрдж рдЖрдк рд╕рд╣реА рд╣реЛрдВрдЧреЗред рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдиреБрдХреВрд▓рди рдХреЗ рдХреЗрд╡рд▓ рддреАрди рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЬреЛрдбрд╝реЗред рдпрджрд┐ рдпрд╣ рд▓реЗрдЦ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ "рдореБрдХрд╛рдмрд▓рд╛" рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЕрдВрддрд╣реАрди рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЦреИрд░, рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!
рдСрдЯреЛрд▓реЙрдб рдЕрдкрдиреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕
рд╕рдВрдХреЗрдд: рд▓реЛрдб-рдЧреНрд░рдВрдЯ-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдореЗрдВ рд▓реЛрдб-рдЧреНрд░рдВрдЯ-рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ , рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдореЗрд░реА рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЪреЛрдЯ рдирд╣реАрдВ рдкрд╣реБрдБрдЪрд╛рдПрдЧрд╛редрдЬрдм рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд▓рдЧрдЗрди рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдЦреЛрд▓реЗрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВред рдкреНрд▓рдЧрдЗрди "
рдЧреНрд░рдВрдЯ-рдХрдВрдЯреНрд░реАрдм-рдХреЙрдиреИрдЯ " рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
рдпрджрд┐ рдЖрдк npm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ package.json рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди Gruntfile рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреА рдЕрд╕реЗрдВрдмрд▓реА рдЯреВрдЯ рдЬрд╛рдПрдЧреАред рдпрд╣ рдпрд╣рд╛рдВ рд╣реИ рдХрд┐ рдЫреЛрдЯрд╛ рдкреНрд▓рдЧ-рдЗрди "рд▓реЛрдб-рдЧреНрд░рдВрдЯ-рдЯрд╛рд╕реНрдХ" рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред
рдЗрд╕ рдмрд┐рдВрджреБ рддрдХ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЧреНрд░рдВрдЯ рдкреНрд▓рдЧ-рдЗрди рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-imagemin');
рд▓реЛрдб-рдЧрд░реНрдЯ-рдЯрд╛рд╕реНрдХ рдХреЗ рд╕рд╛рде, рдЖрдк рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
require('load-grunt-tasks')(grunt);
рдкреНрд▓рдЧрдЗрди рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдЖрдкрдХреЗ package.json рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдЧрд╛, рдЖрдкрдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░реЗрдЧрд╛
рд╕реНрдкреНрд▓рд┐рдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓
рд▓реЛрдб-рдЧреНрд░рдВрдЯ-рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЖрдкрдХреЗ рдЧреНрд░рдВрдЯрдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдХ рдмрдбрд╝реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдЕрднреА рднреА рд▓рдЧрд╛рддрд╛рд░ рдмрдврд╝реЗрдЧрд╛ред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдПрдХ рдирдпрд╛ рдкреНрд▓рдЧрдЗрди рдЦреЗрд▓ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рд▓реЛрдб-рдЧреНрд░рдВрдЯ-рдХреЙрдиреНрдлрд┐рдЧ! рдпрд╣ рдЖрдкрдХреЛ рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд▓реЛрдб-рдЧреНрд░рдВрдЯ-рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдзреНрд╡рд╕реНрдд рдХрд░рддрд╛ рд╣реИ!
рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдЕрдкрдиреЗ рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрдИ рд╕рдВрдмрдВрдзрд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рддреЛ рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред"рд▓реЛрдб-рдЧреНрд░рдВрдЯ-рдХреЙрдиреНрдлрд┐рдЧрд░" рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХрд╛ рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
module.exports = function(grunt) { require('load-grunt-config')(grunt); };
рд╣рд╛рдБ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ! рдпрд╣ рдкреВрд░реА рдлрд╛рдЗрд▓ рд╣реИ! рд▓реЗрдХрд┐рди рдЕрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓реЗрдВ рдХрд╣рд╛рдВ рд╣реИрдВ?
рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЧреНрд░рдВрдЯ рдирд╛рдо рджреЗрдВред рдЪрд▓реЛ рдЗрд╕реЗ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХреА рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкреНрд▓рдЧрдЗрди рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдореЛрдВ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП:
- myproject/ -- Gruntfile.js -- grunt/ --- concat.js --- uglify.js --- imagemin.js
рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯ рдХрд░реЗрдВ (рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдЧреНрд░рдВрдЯрдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреЙрдкреА рдкреЗрд╕реНрдЯ рд╣реИ)ред
grunt / concat.js module.exports = { dist: { src: ['src/js/jquery.js', 'src/js/intro.js', 'src/js/main.js', 'src/js/outro.js'], dest: 'dist/build.js', } };
grunt / uglify.js module.exports = { dist: { files: { 'dist/build.min.js': ['dist/build.js'] } } };
grunt / imagemin.js module.exports = { options: { cache: false }, dist: { files: [{ expand: true, cwd: 'src/', src: ['**/*.{png,jpg,gif}'], dest: 'dist/' }] } };
рдпрджрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмреНрд▓реЙрдХ рдЖрдкрдХреЗ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд▓реЛрдб-рдЧреНрд░рдВрдЯ-рдлрд╝рдВрдХреНрд╢рдВрд╕ рднреА рдЖрдкрдХреЛ YAML рдпрд╛ CoffeeScript рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЪрд▓реЛ YAML рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реА рдЕрдВрддрд┐рдо рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦреЗрдВред рдпрд╣ рдПрдХ рдПрд▓рд┐рдпрд╛рд╕ рдлрд╛рдЗрд▓ рд╣реЛрдЧреАред рдпрд╣ рдПрдХ рдлрд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдп рдЙрдкрдирд╛рдо рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╣реИрдВред рд░рдЬрд┐рд╕реНрдЯрд░рдЯрд╕реНрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдпрд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ:
рдЧреНрд░рдВрдЯ / рдПрд▓рд┐рдпрд╛рд╕реЗрд╕ default: - 'concat' - 'uglify' - 'imagemin'
рд╡рд╣ рд╕рдм рд╣реИ! рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рдореНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ:
$ grunt
рдпрджрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдордиреЗ рдЖрдкрдХреЗ рд╕рд╛рде рдЧреНрд░рдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рдХрд╛рд░реНрдп рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ред рдпрд╣ рд╕рднреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд╣рдо рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рдЪрд▓рд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╕рдВрдШ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред рдЦреИрд░, рдЕрдм рдЬрдм рд╣рдордиреЗ рдХреЛрдб рдХреЗ рддреАрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдХреЛ рдХрдо рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЗрд╕рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛, рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд░реБрдХрд┐рдП, рдпрд╣ рдЕрднреА рднреА рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рд╕рдм рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рдордп рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ!
рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рд╕рдордп рдХрдо рд╕реЗ рдХрдо рдХрд░реЗрдВ
рднрд▓реЗ рд╣реА рдЖрдкрдХреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдбрд╛рдЙрдирд▓реЛрдб рдЧрддрд┐ рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХрд╛ рд╕рдордп рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдордп рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдзреАрдореА рдЧрддрд┐ рдЕрднреА рднреА рд╣рдореЗрдВ рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреА рд╣реИред рдпрд╣ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐
рдЧреНрд░рдВрдЯ-рдХреЙрдиреНрдЯреНрд░реА-рд╡реЙрдЪ , рдпрд╛ рдЧрд┐рдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд░реНрдорд╛рдг, рдХрд╛рдлреА "рдореБрд╢реНрдХрд┐рд▓" - рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдпрд╛рддрдирд╛ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ: рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЬрд┐рддрдиреА рддреЗрдЬрд╝реА рд╕реЗ рд╣реЛрддреА рд╣реИ, рдЖрдкрдХреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдЙрддрдирд╛ рд╣реА рдмреЗрд╣рддрд░ рдФрд░ рддреЗрдЬрд╝ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреА рдкреНрд░реЛрдбрдХреНрд╢рди рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ 10 рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдХреЗрд╡рд▓ рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдВрдЧреЗ, рдФрд░ рдЬрдм рдпрд╣ рдЗрдХрдЯреНрдард╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдЖрдк рдХреЙрдлреА рдкреАрдиреЗ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреА рдорд╛рд░ рд╣реИред рд▓реЗрдХрд┐рди рдирд┐рд░рд╛рд╢рд╛ рди рдХрд░реЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдлрд░реНрдХ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
рдХреЗрд╡рд▓ рд╡рд╣реА рдмрджрд▓рд╛ рд╣реИ рдЬреЛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ: рдЧреНрд░рдВрдЯ-рдирдпрд╛
рдУрд╣, рдпрд╣ рдЕрд╣рд╕рд╛рд╕, рдЬрдм рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЕрд╕реЗрдореНрдмрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдХреБрдЫ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рджреВрд╕рд░реЗ рд░рд╛рдЙрдВрдб рдореЗрдВ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдЗрдХрдЯреНрдареЗ рди рд╣реЛ рдЬрд╛рдПред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдЬрдм рдЖрдк src / img / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЫрд╡рд┐ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдореЗрдЬрд┐рди рдЪрд▓рд╛рдиреЗ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП, рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рдмрджрд╕реВрд░рдд рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдХреАрдорддреА рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХреА рдмрд░реНрдмрд╛рджреАред
рдмреЗрд╢рдХ рдЖрдк рд╣рдореЗрд╢рд╛ рджреМрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
$ grunt imagemin
рдорд╛рдирдХ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рдХрдВрд╕реЛрд▓ рд╕реЗ
$ grunt
ред рдпрд╣ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрд╕ рдХрд╛рд░реНрдп рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рддрд░реНрдХрд╕рдВрдЧрдд рд╕рдорд╛рдзрд╛рди рд╣реИред рдЗрд╕реЗ рдЧреНрд░рдВрдЯ-рдиреНрдпреВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЧреНрд░рдВрдЯ-рдиреНрдпреВ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдХреИрд╢ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрджрд▓ рджреА рдЧрдИ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдЪрд▓рд╛рддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╣рдорд╛рд░реЗ рдЙрдкрдирд╛рдо рдпрд╛рдж рд░рдЦреЗрдВред рдЪрд▓реЛ рдмрджрд▓реЛ
default: - 'concat' - 'uglify' - 'imagemin'
рдЗрд╕рдХреЗ рд▓рд┐рдП:
default: - 'newer:concat' - 'newer:uglify' - 'newer:imagemin'
рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдо рдмрд╕ рдЕрдкрдиреЗ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрд╕рд░реНрдЧ "рдирдпрд╛:" рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдЧреНрд░рдВрдЯ-рдирдП рдкреНрд▓рдЧрдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреМрди рд╕реА рдлрд╛рдЗрд▓реЗрдВ рдХрд╛рд░реНрдп рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред
рдЧреНрд░рдВрдЯ-рд╕рдорд╡рд░реНрддреА рдПрдХ рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдмрд╣реБрдд рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЙрди рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╕реБрдкрд░ рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рдЖрдк рд▓реЛрдб-рдЧреНрд░рдВрдЯ-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрд▓рд┐рдк рдмрдирд╛рдПрдВред рдлрд╝рд╛рдЗрд▓:
grunt / рд╕рдорд╡рд░реНрддреАред js module.exports = { first: ['concat'], second: ['uglify', 'imagemin'] };
рд╣рдо рдкрд╣рд▓реЗ (рдкрд╣рд▓реА) рдФрд░ рджреВрд╕рд░реА (рджреВрд╕рд░реА) рдХрддрд╛рд░ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ "рдХреЙрдирдХрдЯ" рдХрд╛рд░реНрдп рдЪрд▓рд╛рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ, рд╣рдо рдмрджрд╕реВрд░рдд рдФрд░ рдЗрдореЗрдЬрдорд┐рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдЧрд╛ред
рд╣рдордиреЗ рдЕрдкрдиреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдп рдХреЗ рдЙрдкрдирд╛рдо рдХреЛ рдЧреНрд░рдВрдЯ-рд╕рдорд╡рд░реНрддреА рдкреНрд▓рдЧрдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╢реЛрдзрд┐рдд рдЙрдкрдирд╛рдореЛрдВ рдХреА рдлрд╛рдЗрд▓ рд╣реИ:
default: - 'concurrent:first' - 'concurrent:second'
рдпрджрд┐ рдЖрдк рдЕрдм рдЧреНрд░рдиреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдорд╡рд░реНрддреА рдкреНрд▓рдЧ рдЗрди рдкрд╣рд▓реЗ рдХреЙрдирдХрдЯ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░реЗрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЕрд▓рдЧ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдкрд░ рджреЛ рдереНрд░реЗрдбреНрд╕ рдмрдирд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЗрдореЗрдЬрдорд┐рди рдФрд░ рдХреБрд░реВрдк рдХрд╛рд░реНрдп рдХрд░реЗрдВред рдХреВрд▓!
рдПрдХ рддреНрд╡рд░рд┐рдд рдЯрд┐рдк : рд╣рдорд╛рд░реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЧреНрд░рдВрдЯ-рд╕рдорд╡рд░реНрддреА рд╣рдорд╛рд░реЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рддреЗрдЬрд╝реА рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдХрд╛рд░рдг рдЧреНрд░рдВрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдзрд╛рдЧреЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд╣реЗрдб (рдУрд╡рд░рд╣реЗрдб) рд╣реИред рдореЗрд░реА рдЧрдгрдирд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЗрд╕рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 300ms / рдзрд╛рд░рд╛ рд▓рдЧрддреА рд╣реИредрд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрд╛? рдЯрд╛рдЗрдо-рдЧреНрд░рдВрдЯ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ
рдЦреИрд░, рдЕрдм рд╣рдордиреЗ рдЕрдкрдиреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬреЛ рдЗрд╕ рдХрд╛рдо рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реИ: рд╕рдордп-рдЧреНрд░рдиреНрдЯред
рдЯрд╛рдЗрдо-рдЧреНрд░рдВрдЯ рд╢рд╛рд╕реНрддреНрд░реАрдп рдЕрд░реНрдереЛрдВ рдореЗрдВ рдПрдХ рдкреНрд▓рдЧрдЗрди рдирд╣реАрдВ рд╣реИ (рдпрд╣ рд▓реЛрдбрдПрдирдПрдордЯреИрд╕реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ), рдпрд╣ рдЙрди рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдк "рд╕реАрдзреЗ" рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд▓реЛрдб-рдЧреНрд░рдВрдЯ-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред рд╣рдо рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЕрдкрдиреЗ рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ рдЬреИрд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓реЛрдб-рдЧреНрд░рдВрдЯ-рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛ред рдЕрдм рд╣рдорд╛рд░реЗ рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдХреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
module.exports = function(grunt) {
рдореИрдВ рдирд┐рд░рд╛рд╢рд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм - рдЕрдкрдиреЗ рдХрдВрд╕реЛрд▓ рд╕реЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП (рдФрд░ рдкреВрд░реЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП) рдЧреНрд░рдВрдЯ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЖрдкрдХреЛ рд░рдирдЯрд╛рдЗрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрдиреА рдЪрд╛рд╣рд┐рдП:

рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рдгрд╛рд▓реА
рдЕрдм рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд▓реЗрдХреНрдЯрд░ рд╣реИ рдЬреЛ рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдиреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдСрдЯреЛ-рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдпрд╛рдиреА рдЧреНрд░рдВрдЯ-рдХреЙрдиреНрдЯреНрд░рд┐рдм-рд╡реЙрдЪ рдкреНрд▓рдЧрдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдХрдорд┐рдЯ рдХреЗ рдмрд╛рдж рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рддреЛ рд╕рд┐рд╕реНрдЯрдо рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬрдм рдЖрдкрдХрд╛ рддрд╛рдЬрд╝рд╛ рдирд┐рд░реНрдорд╛рдг рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ, рдпрд╛ рдЬрдм рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЬрд╛рдП рддреЛ рдЖрдкрдХреЛ рд╕рддрд░реНрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛?
рдЧреНрд░рдВрдЯ-рдиреЛрдЯрд┐рд╕ рд╕реЗ рдорд┐рд▓реЗрдВред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЧреНрд░рдиреНрдЯ-рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрд▓рд░реНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЧреНрд░рдиреНрдЯ рдлреЗрдВрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╣ рдЖрдкрдХреЗ OS рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рд╕реА рднреА рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: Mac OS X рдпрд╛ Windows, Mountain Lion's рдФрд░ Mavericks рдХреЗ Notification Center рдФрд░, Notify-send рдХреЗ рд▓рд┐рдП рдмрдврд╝реЛред рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ npm рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реИ (рдпрд╛рдж рд░рдЦреЗрдВ, рдпрджрд┐ рдЖрдк рдЧреНрд░рдВрдЯ-рд▓реЛрдб-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рддреЛ рдпрд╣ рдХрджрдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реИ!)ред
рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд▓рдЧрдЗрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪрд▓рд┐рдП рдЗрд╕реЗ рдЕрдкрдиреЗ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреНрд░рдВрдЯ-рдХреЙрдиреНрдЯреНрд░реА-рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
grunt / рдЕрдзрд┐рд╕реВрдЪрд┐рддред js module.exports = { imagemin: { options: { title: 'Build complete',
рд╣рдорд╛рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рд╣реИрд╢ рдХреБрдВрдЬреА рдЙрд╕ рдХрд╛рд░реНрдп рдХрд╛ рдирд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЧреНрд░рдВрдЯ-рд╕реВрдЪрд┐рдд рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЗрдореЗрдЬрдорд┐рди рдХрд╛рд░реНрдп (рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЕрдВрддрд┐рдо рдПрдХ) рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдПрдХ рдЕрд▓рд░реНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред
рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ
рдпрджрд┐ рдЖрдкрдиреЗ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА рд╕рдм рдХреБрдЫ рдХрд┐рдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦ рдХреЗ рджреМрд░рд╛рди рд╡рд░реНрдгрд┐рдд рд╣реИ, рддреЛ рдЕрдм рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ рд╕реБрдкрд░-рдХреНрд▓реАрди рдФрд░ рд╕рдВрдЧрдард┐рдд рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рдЧрд░реНрд╡ рдХреЗ рдорд╛рд▓рд┐рдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдорд╛рдирд╛рдВрддрд░ рд░реВрдк рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдФрд░ рдЪрдпрдирд╛рддреНрдордХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдХрд╛рд░рдг рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рддреЗрдЬреА рд╕реЗред рдФрд░ рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛!
рдпрджрд┐ рдЖрдк рдЕрдиреНрдп рд░реЛрдЪрдХ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЧреНрд░рдВрдЯ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ рдпрд╛ рдХрд╣реЗрдВ, рдЙрдкрдпреЛрдЧреА рдкреНрд▓рдЧрдЗрдиреНрд╕, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ! рдЗрд╕ рдмреАрдЪ, рд╕рдлрд▓ рдмрдирд╛рддрд╛ рд╣реИ!
рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ
рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдореВрд▓ рд░реВрдк рдореЗрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░ рдореИрдВрдиреЗ рдЕрднреА рднреА рдХреБрдЫ рдХрдбрд╝рд╡рд╛рд╣рдЯ рдкреИрджрд╛ рдХреА рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ "рд░реВрд╕реА рдореЗрдВ рд▓рдЧ рд░рд╣рд╛ рд╣реИ", рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрдЧреНрд░реЗрдЬреА рд╡рд╛рдХреНрдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рднреА рдореЛрдбрд╝ рдФрд░ рддрд░реАрдХреЗ рд░реВрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕рдордЭ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд▓реЗрдЦ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рд╕реБрдзрд╛рд░ рдХреЗ рд╕реБрдЭрд╛рд╡ рд╕реБрдирдХрд░ рдкреНрд░рд╕рдиреНрди рд╣реВрдВред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рднреА рд╕реНрд╡рд╛рдЧрдд рд╣реИ!