рдШрдЯрдХ рдиреЛрдЯреЛрдВ рдХреЗ рдКрдкрд░рдмрдирд╛рдо рдмрдирд╛ рдЧреНрд░рдВрдЯ рдмрдирд╛рдо рдЧреБрд▓ рдХреА рдШрдбрд╝реА
рдХрд╛рд░реНрдп рдзрд╛рд╡рдХ - рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реЗрдгреА рдЬреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреА рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВ, рдореЗрдХ, рд░реЗрдХ, рдХреЗрдХ, рдЖрджрд┐ред рдЖрдорддреМрд░ рдкрд░ рдЬреЛ рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рд╡реЗ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЕрдХреНрд╕рд░, рдФрд░ рдмрд╣реБрдд рдмрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рд╕рдВрдХрд▓рди, рдЪрд▓ рд░рд╣реЗ рдкрд░реАрдХреНрд╖рдг, рдкреНрд░рддрд┐рдкрд╛рджрди рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛, рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЗрдВ, рд╕реАрдПрд╕рдПрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдирд╛ред рджреИрдирд┐рдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬред
рдЧреНрд░рдВрдЯ (рдЧреНрд░рдВрдЯ)ред Gruntfile.js рдЧреНрд░рдВрдЯ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╣реИред Gruntfile.js рд╕рд╣рдЬ рд╣реИ, рдмрд╕ рдирдореВрдиреЗ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЗрдХрд┐рди рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓.рдЬреЗрдПрд╕ рдмреЗрд╣рдж рдмрджрд╕реВрд░рдд рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
gulp
рд▓реЗрдЦрдХ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЧреНрд░рдВрдЯ рдмреЗрд╣рдж рдЕрдХреНрд╖рдо рд╣реИред
gruntfile.js
рд▓рд┐рдЦрдирд╛ рдФрд░ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдЬрд▓реНрджреА рдЙрдмрд╛рдК рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЧреБрд▓ ("рддрд╛рдЬрд╝реА рд╣рд╡рд╛" рдХреА рдПрдХ рд╕рд╛рдВрд╕)ред Gruntfile.js рдХреЗ рд╡рд┐рдкрд░реАрдд, gulpfile.js рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдиреЛрдб рдкрд░ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИред
рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддреБрд▓рдирд╛ рджреЗрдЦреЗрдВред рд╣рд╛рдВ, рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдкрд░рд┐рдЪрд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, gulp plugins рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, js рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреЛ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП .min.js рдкрд░ рд░реЗрдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рд╣реА рд╣реИред рд▓реЗрдХрд┐рди guplfile.js рдХрд╛ рдЖрдХрд╛рд░ gruntgile.js рд╕реЗ рд▓рдЧрднрдЧ рдХреЛрдИ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рджрд╕рд╡реАрдВ рдмрд╛рд░ рдЗрд╕рдХреА рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕реБрд╕реНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛ рд░рд╣реА рд╣реИред рдлрд┐рд░ рднреА, рд╕реНрд╡рд╛рдж рдХреА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди, IMHO,
gulp
рддреБрд▓рдирд╛
gulp
рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдореЗрдХ рдорд╣рд╛рди рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрдХрдлрд╛рдЗрд▓ рдХрд╛ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдПрдХ рдкреВрд░реНрдг, рдмрд╣реБрдд рд╡рд┐рд╕реНрддреГрдд рдФрд░ рд╕реВрдЦрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ - рдПрдХ
рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ ред рдпрд╛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореИрдиреБрдЕрд▓ 1960 рдХреЗ рджрд╢рдХ рдХреЗ рдЕрдВрддрд┐рдо рд╕рд╣рд╕реНрд░рд╛рдмреНрджреА рд╕реЗ рдПрдХ рд╣реА рдкрд╛рда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдЬрдм рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдирд╣реАрдВ рдереА, рдФрд░ рд╕реА рднрд╛рд╖рд╛ рдЕрднреА рднреА рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдереАред рдпреЗ рдореЙрд╕реА рд╕реА рдЙрджрд╛рд╣рд░рдг рд░рд┐рдЯреЗрд▓рд┐рдВрдЧ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рдореЗрдХрдлрд╛рдЗрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ
grunt
рдФрд░
gulp
рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдиреЗ рджреЗрдЧрд╛ред рдШрдЯрдХ рд╕рдореБрджрд╛рдп, рд╕рд╛рде рд╣реА рдиреЛрдб рд╕рдореБрджрд╛рдп рдореЗрдВ,
Makefile
рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЗрд╕рдХреА рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИред
рдореЗрдХрдлрд╛рдЗрд▓ рдЕрд╡рд▓реЛрдХрди
make
рдХрд┐рд╕реА рднреА рд╢реЗрд▓ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ - рдЯреАрдо рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдПрдХ рдЯреИрдмред (рдлрд┐рд░ рднреА, рдкрд┐рдЫрд▓реЗ рд╕рд╣рд╕реНрд░рд╛рдмреНрджреА, рд▓реЛрдЧ рдордЬрдмреВрдд рдереЗ)ред рдПрдХ рдФрд░ рдиреЛрдЯ - рдЙрди рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрддреЗрдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╣реИрдВред
file
рдореЗрдВ рдЪрд░ рдФрд░ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реЛрддрд╛ рд╣реИред
рд▓рдХреНрд╖реНрдп рдирд┐рдпрдо
Makefile рдореЗрдВ рд▓рдХреНрд╖реНрдп рдирд┐рдпрдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИрдВ:
target: sources tab -> commands tab ->tab -> commands, .
рдпрд╣рд╛рдБ
target
рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рдЖрдорддреМрд░ рдкрд░
target
рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╢реЗрд╖
PHONY
рд▓рдХреНрд╖реНрдп (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рдХреЛ рдЫреЛрдбрд╝рдХрд░ред
рдпрджрд┐ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЧрд░реНрднрдкрд╛рдд рдХрд░рддрд╛ рд╣реИред (рд╡рд┐рдХрд▓реНрдк -i рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ)ред
mtime
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдВрддрд┐рдо рдмрд╛рд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
target
рддреИрдпрд╛рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЕрдЧрд░, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣ рдЕрдкрдиреЗ рд╕реНрд░реЛрдд рд╕реЗ рдирдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЗрд╡рд▓ рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдмрдирд╛рдПрдВ рдЬреЛ рдмрджрд▓ рдЧрдИ рд╣реИрдВред
рджрд┐рдП рдЧрдП рдирд┐рдпрдо рдХреЗ рд▓рдХреНрд╖реНрдп рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрд╣рд▓рд╛ рдирд┐рдпрдо рд╣реИред рдпрд╣ рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЗрд╕рдХреЗ рдЕрдкрдиреЗ рдирд┐рдпрдо рд╣реИрдВ, рддреЛ рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдкреБрди: рдЬрд╛рдБрдЪрддрд╛ рд╣реИред рд╕рд░рдгреА рдореЗрдВ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреНрд░рдо рдордирдорд╛рдирд╛ рд╣реИ!
рдЬрдм рддрдХ рдпрд╣ рд╕рдорд╛рдкреНрдд рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдпрд╛ рд╕реНрд░реЛрдд рдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЗрд╕рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рдЕрдкрдиреЗ рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИрдВ, рддрдм рддрдХ рд╕реНрд░реЛрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдиреАрдЪреЗ рдЬрд╛рддреА рд╣реИред рдЬрдм рдЙрд╕реЗ рдРрд╕рд╛ рдХреЛрдИ рдорд╛рдорд▓рд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЙрдЪрд┐рдд рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдкреБрди: рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИред
рдирд┐рдпрдореЛрдВ рдХреЛ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреИрдЯрд░реНрди рдирд┐рдпрдо
рдкреИрдЯрд░реНрди рдирд┐рдпрдо рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
%.js: %.html @component convert $<;
рдлреЛрдиреА рдирд┐рдпрдо
рдлреЛрдиреА рдирд┐рдпрдо рдлрд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдорд╛рдВрдб рд╣реИрдВред рдЙрдирдХреЗ рдкрд╛рд╕ рд╕реНрд░реЛрдд рдХреЛрдб, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдФрд░ рдЕрдиреНрдп рд╕рднреА рдЪреАрдЬреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬрд┐рдирдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рдпрдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд▓рд┐рдП рдорд╛рдЗрдо рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
clean: rm -fr build components $(TEMPLATES) .PHONY: clean
.PHONY
рдирд┐рдпрдореЛрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪрд░ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
.PHONY
рдЪрд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЪрд░ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп $ @ рд╣реИрдВ - рд▓рдХреНрд╖реНрдп рдХрд╛ рдирд╛рдо, $ + - рд╕рднреА рд╕реНрд░реЛрдд, рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╕реЗ рдЕрд▓рдЧ, $ <; - рдкрд╣рд▓реЗ рд╕реНрд░реЛрдд рдХрд╛ рдирд╛рдоред рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдкреВрд░реА рд╕реВрдЪреА -
http://www.gnu.org/software/make/manual/make.html#Automatic-Variablesрд╕рд╛рдзрд╛рд░рдг рдЪрд░ (рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╕реНрд░реЛрдд рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рдХреНрд╖реНрдп) - рдЖрдк рдмрд╕ рд╕реВрдЪреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
JS = index.js example.js
рд▓реЗрдХрд┐рди рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдирдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ:
CF = $(shell find templates -name "*.coffee")
рдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░:
SRC = $(wildcard client/*/*.js)
рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдЪрд░ рд╕реЗ
targets
рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:
HTML = $(JADE: .jade=.html)
рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, HTML рдлрд╛рдЗрд▓реЗрдВ рд╕реНрд╡рдпрдВ рдЕрднреА рддрдХ рдирд╣реАрдВ рдмрдиреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдирд╛рдореЛрдВ рдХреА рдХреЗрд╡рд▓ рдПрдХ рд╕рд░рдгреА рд╣реИред
рдЪрд░ рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг:
SRC = $(wildcard client/*/*.js) HTML = $(wildcard client/*/*.html) TEMPLATES = $(HTML:.html=.js) build: components $(SRC) $(TEMPLATES) @component build components: component.json @component install %.js: %.html @component convert $<;
рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рдирд╛рдо рдШрдЯрдХреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ рд╣рдо рдШрдЯрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬрдорд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╡рд╣ SRC рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ JS рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рдпрд╣ рдкрд╣рд▓реА .js рдлрд╝рд╛рдЗрд▓ рдХреЗ 'рд╕реНрд░реЛрддреЛрдВ' рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ, .js рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдЯрд░реНрди рдирд┐рдпрдо рдвреВрдБрдврддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ .html рд╕реНрд░реЛрдд рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдпрд╣ рдПрдХ рд╣реА
build/build.js
рдореЗрдВ рд╕рдм рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИред
build/build.js
component build
,
component convert
ред
рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:
JADE = $(shell find templates -name "*.jade") HTML = $(JADE:.jade=.html) all: $(HTML) %.html: %.jade jade < $< > $@
рдкреИрдЯрд░реНрди-рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЙрдлреА, рдЬреЗрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реИ:
%.js: %.coffee @coffee -c $< %.js: %.jade @jade -c $<
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ,
coffee
,
jade
рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдШрдбрд╝реА
рд╡реЙрдЪ рдПрдХ рдШрдЯрдХ рдирд╣реАрдВ рд╣реИ, рди рдХрд┐ рдиреЛрдб.рдЬреЗрдПрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рдпрдорд┐рдд рдпреВрдирд┐рдХреНрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИред (рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдпрд╣
Altlinux рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)ред
рд╣рдо рдХреНрд▓реЛрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдбрд╛рд▓рддреЗ рд╣реИрдВ:
$ PREFIX=~ make install
рдФрд░ рд░рди
make
$ watch make &;
рд╕реНрд░реЛрдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЧреНрд░рдВрдЯ рдореЗрдВ рдСрдЯреЛ-рд░реЗрдореНрдкрд╛рдЗрд▓ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░реЗрдВред
gulp
рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рди рдХрд┐ рдПрдХ рдкреНрд▓рдЧрдЗрди рдореЗрдВред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдЗрд╕реЗ
gulpfile.js
рдореЗрдВ рдЪрд▓рд╛рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рднреА рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ред
Makefile рдореЗрдВ, рдЖрдк рдШрдбрд╝реА рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
.PHONY: continuously continuously: while true; do make 1>/dev/null; sleep 3; done
рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдП