рдЧреНрд░рдВрдЯрдЬ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡

рдЫрд╡рд┐

рдирдорд╕реНрдХрд╛рд░ред рд╣рдордиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдХрд┐рддрд╛рдм рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛, рдФрд░ рдЕрдм рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╣рдордиреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ - рдЧреНрд░рдВрдЯрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛


рджрд░рдЕрд╕рд▓, рд╣рдордиреЗ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд░реВрд╕реА рд▓реЗрдЦрдХ рдХреА рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдХрд┐рддрд╛рдм рдХреАред рдкреБрд╕реНрддрдХ рдЬреЗрдПрд╕, рдИрд╕реАрдЯреА-рдЬреЗрдПрд╕ рдФрд░ рд▓реЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИред рдЧреНрд░рдВрдЯ рдЕрд╕реЗрдВрдмрд▓реА, рдХреЙрдиреНрдлреИрдЯрд┐рдиреЗрд╢рди, рдорд┐рдирд┐рдлрд┐рдХреЗрд╢рди рдФрд░ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдореЗрдВ рд▓рдЧреЗ рд╣реБрдП рд╣реИрдВ, рдлреЛрди рдЖрдИрдкреИрдб рдкрд░ рдлреЛрдирдЧреИрдк рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рд╣рдордиреЗ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдпрд╛ - рд╣рдордиреЗ рд╡рд┐рднрд┐рдиреНрди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдФрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдХреБрдЫ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╢рд╛рдВрдд рд╣реЛ рдЧрдпрд╛, рдХреБрдЫ рдХреЗ рд╕рд╛рде рдирд╣реАрдВред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХрд┐рддрд╛рдм рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдРрдк рд╕реНрдЯреЛрд░ рд╕реЗ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЕрдм рдЖрдк GruntJS рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ...



рдмреНрд░реЗрди рдЧреНрд░рдВрдЯ



- рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рдЪрд░ рд╣реИрдВ, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ?
- рдореИрдВ рдкреНрд▓рдЧрдЗрди рдбрд╛рд▓ "jquery.math", рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ!


рдореИрдВ рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдЕрддрд┐рд░рдВрдЬрд┐рдд, рд▓реЗрдХрд┐рди рд╢рд┐рдХреНрд╖рд╛рдкреНрд░рдж рдХрд╣рд╛рдиреА рд╕реБрдирд╛рддрд╛ рд╣реВрдБред рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореБрдЦреНрдп рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкреНрд░рд╛рд░реВрдк рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЗ рд╕рд╛рде PNG24 рдерд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ рд▓рдЧрднрдЧ 500 рдПрдордмреА рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ред рд╣рдордиреЗ рдЗрд╕реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдмреЗрд╢рдХ, GruntJS рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ ...

рдХреЛрдИ рдирддреАрдЬрд╛ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛ред 500MB рдХрд┐рд╕реА рднреА рдврд╛рдВрдЪреЗ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдЖред рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ 450Mb рддрдХ рд╕рдВрдкреАрдбрд╝рд┐рддред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрдИ рджрд┐рдиреЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЛрдВрдиреЗ 250MB рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ред рдЗрд╕ рддрд░рд╣:

find . -name "*.png" | xargs pngquant -f -v --ext .png --quality 0-90 


GruntJS рдХрдорд╛рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдирд╢реЗ рдХреА рд▓рдд рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдХрд╣рд╛рдиреА рдереЛрдбрд╝реА рдЕрддрд┐рд░рдВрдЬрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЗрдЦрд╛ рдХрд┐ рд▓реЛрдЧ рдРрд╕реА рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред JQuery рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдХрднреА-рдХрднреА рдмреИрд╢ рдкрд░ рдПрдХ-рд▓рд╛рдЗрдирд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдХрдВрд╕реЛрд▓-рд╕рд┐рджреНрдз рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЬреЛ рд╕рдордп-рдкрд░реАрдХреНрд╖рдг рд╣реЛрддреЗ рд╣реИрдВред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдмрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдХрдорд╛рдВрдб рдХреЛ рдЧреНрд░рдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рдВрдЯ-рд╢реЗрд▓ рд╣реИ ред

 grunt.initConfig({ shell: { compressPNG: { options: { stdout: true }, command: 'find . -name "*.png" | xargs pngquant -f -v --ext .png --quality 0-90' } } }); grunt.loadNpmTasks('grunt-shell'); grunt.registerTask('compress', ['shell: compressPNG']); 


Gruntfile.js рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ



рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, Gruntfile.js рдореЗрдВ рдХреЛрдб рдХреА рд▓рдЧрднрдЧ 200 рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рдереАрдВ, рдЬрд╣рд╛рдВ рддрд░реНрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдорд┐рд╢реНрд░рд┐рдд рдереЗред рд╣рдордиреЗ рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореИрдВрдиреЗ рдПрдХ config.json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВ:



рдЗрд╕рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреЗ рдЫреЛрдЯреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЧреНрд░рдВрдЯ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рдЕрдкрд░рд┐рдЪрд┐рдд рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЦреИрд░, рддреАрд╕рд░реЗ рдореЗрдВ, рддрд░реНрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд╢реНрд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╡рд┐рдиреНрдпрд╛рд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 { "src": "_src", "dst": "www", "port": 8000, "variables": { "bookname": "  "}, "ignore": [ "**/*.ect", "**/*.md", "**/*.less"], "less": { "www/app/assets/css/app.min.css": ["_src/app/assets/less/main.less"], "www/content/assets/css/content.min.css": ["_src/content/assets/less/main.less","_src/content/widgets/**/widget.less"] } }, "js": { "www/app/assets/js/app.min.js": [ "_src/app/assets/js/utilities.js", "_src/app/assets/js/modules/*.js", "_src/app/assets/js/setups/*.js", "_src/content/widgets/**/*.js" "_src/app/assets/js/init.js", ] } } 


рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдЙрджрд╛рд╣рд░рдг



 module.exports = function (grunt) { //  config.json var config = grunt.file.readJSON('config.json') || grunt.fatal('config.json not found'); //     - config.ignore = getIgnorePatterns(config); var tasks = { clean: { dst: path.join(config.dst, '**/*'), ignore: config.ignore }, livereload: {тАж}, regarde: {тАж}, copy: {тАж}, ect: {тАж}, less: {тАж}, uglify: {тАж}, rsync: {тАж} }; grunt.initConfig(tasks); grunt.registerTask('lvrld', ['livereload-start', 'connect', 'regarde']); grunt.registerTask('main', ['clean:dst', 'copy:main', 'clean:ignore','uglify:main', 'ect', 'less:browser']); grunt.registerTask('browser', ['main', 'lvrld']); grunt.registerTask('phonegap', ['clean:dst', 'copy:main', 'clean:ignore', 'uglify:main', 'less:phonegap', 'ect']); grunt.registerTask('deploy', ['main', 'rsync:deploy']); grunt.registerTask('default', ['browser']); require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); }; 


рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбрд┐рдмрдЧрд┐рдВрдЧ



рдЖрдИрдкреИрдб рдФрд░ рдореИрдХрдмреБрдХ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдкрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛрдб рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдкреЗрдЬ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд░рд┐рдлреНрд░реЗрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рднрдпрд╛рдирдХ рд╣реИред

рдЧреНрд░рдВрдЯ рдпрд╣рд╛рдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЧреНрд░рдВрдЯ-рдХреЙрдиреНрдЯреНрд░реА-рд╡реЙрдЪ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рд▓рд┐рд╡рд░реЗрд▓реЙрдб рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдХреЛ рдЖрдИрдкреА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдЖрдк рдХреЛрдб рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдЧреИрдЬреЗрдЯ рдкреГрд╖реНрда рдХреЛ рд╕реНрд╡рдпрдВ рд▓реЛрдб рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдХрдорд╛рд▓ рд╣реИ! рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдпрджрд┐ рдЖрдк рд▓рдЧрд╛рддрд╛рд░ рддреАрди рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рднреА рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдШрдВрдЯреЗ рдореЗрдВ рдореИрдВ рд╕рдм рдХреБрдЫ рдЪрд┐рдкреНрд╕ рдореЗрдВ рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред рд▓рдЧрднрдЧ рдПрдХ рд╣рдЬрд╛рд░ 2. рддреЛ, рдпрджрд┐ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рд┐рд╡рд░реЗрд▓реЙрдбреНрд╕ (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде) рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдиреЛрдбрдЬ рдЧрд┐рд░рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ рдкреВрд░реНрдг рдХрд╡рд░реЗрдЬ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдЪрд╛рдХреВ рдХреА рддрд╕реНрд╡реАрд░реЛрдВ рдХреЗ рдиреАрдЪреЗ рдЧрдПред

рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓реЗрдЦрди



рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ рдЦрд╛рдХрд╛ рдЗрдВрдЬрди рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдЪреБрдирд╛ - рдореИрдВрдиреЗ рд▓реЗрдЖрдЙрдЯ рдФрд░ рднрд╛рдЧ рдХреЗ рд╕рд╛рде рдкрд╣рд▓рд╛ рд▓рд┐рдпрд╛ред рдкрд╣рд▓рд╛ ECTJS рдирд┐рдХрд▓рд╛ред рдЕрдм рдореИрдВ рдЬреЗрдб рд▓реЗ рдЬрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓реЗ рд▓рд┐рдпрд╛ред рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рдкреНрд▓рдЧрдЗрди рдирд╣реАрдВ рдвреВрдВрдврдиреЗ рдкрд░, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, gruntjs рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд▓рдЧрднрдЧ рд╣рд░ рдЪреАрдЬ рдХреА рдЬрд░реВрд░рдд рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

1. grunt-init gruntplugin рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдЧрд╛
2. рд╣рдо рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдореЙрдбреНрдпреВрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ ...
3. рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛ - GruntJS рдПрдкреАрдЖрдИ рдореЗрдВ рдЭрд╛рдВрдХрдирд╛




рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╕рдм рдореИрдВ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

Source: https://habr.com/ru/post/In193092/


All Articles