Browserify рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛ рд░рд╣реА рд╣реИ



рдкрд░рд┐рдЪрдп



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





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



Browserify рдХреНрдпрд╛ рд╣реИ?



Browserify рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреЗ рдиреЛрдб.рдЬреЗрдПрд╕ рд╕реНрдЯрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ Browserify рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЫреЛрдЯреА рдФрд░ рд╕рд╛рдл рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЕрдкрдиреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА require("./_.js");



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



рдХреНрдпреЛрдВ рдЖрдпрд╛рдд рдиреЛрдб рдореЙрдбреНрдпреВрд▓?



рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдПрдХ рдЖрд╢реАрд░реНрд╡рд╛рдж рд╣реИ: рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдмрд╕ require()



рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рд╡реЗ npm рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ) рдФрд░ рдпрд╣ рдмрд╛рдд рд╣реИ! рдЖрдк jQuery , Underscore , Backbone рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ Angular (рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдкреЛрд░реНрдЯ) рдЬреИрд╕реА рд▓реЛрдХрдкреНрд░рд┐рдп JavaScript рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рд╕рднреА npm рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реА рд╕рд╛рдЗрдЯ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ рдЖрдк рдмрд╕ рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдЖрдк рдЕрдкрдиреЗ рд╕рднреА рдЬреЗрдПрд╕ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рд╣реИ!



рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?



Browserify рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдо рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:



Node.js

npm - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ node.js рдХреЗ рд╕рд╛рде рднреЗрдЬ рджрд┐рдпрд╛

Browserify - рдореИрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП

рдЦреИрд░, рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЬрд┐рд╕реЗ рдЖрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред



рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ



рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдиреЛрдб рдФрд░ рдПрдирдкреАрдПрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред рдпрджрд┐ рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрдВрд╕ рдЧрдП рд╣реИрдВ, рддреЛ рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Node.js рдХреЗ рд▓рд┐рдП рдЗрди рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдВред Browserify рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрд╢рд╛рд░реЗ рдирд╣реАрдВ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред рд╣рдо рдХреЗрд╡рд▓ рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ npm рдЗрд╕рдХреЗ рдКрдкрд░ рдЪрд▓рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк npm рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрди рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Browserify рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



 npm install -g browserify
      
      





рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рд╕рдордЭрд╛рдЗрдП рдХрд┐ рд╣рдо рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рд╣рдо рдЖрдкрдХреА рдорд╢реАрди рдкрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ Browserify рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП npm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ( -g



рдзреНрд╡рдЬ npm рдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ)ред рдпрджрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:



 Error: EACCES, mkdir '/usr/local/lib/node_modules/browserify'
      
      





рдлрд┐рд░, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдк рд╡рд╛рдВрдЫрд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдХрдореА рдореЗрдВ рднрд╛рдЧ рдЧрдПред рдЖрдк sudo рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдлрд┐рд░ рднреА рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдкрд╣рд▓реЗ рдкрдврд╝реЗрдВред



рдЕрдкрдиреА рдкрд╣рд▓реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ



рдЖрдЗрдП рдПрдХ рдлрд╛рдЗрд▓ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдо Browserify рдХреЗ рд╕рд╛рде рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рд╕реБрдкрд░-рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдореЙрдбреНрдпреВрд▓ рд▓реЗрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реБрдкрд░рдореИрди рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред рдореИрдВрдиреЗ рдЕрдкрдиреА JS рдлрд╛рдЗрд▓ рдХреЛ main.js



рдирд╛рдо рджрд┐рдпрд╛ рдФрд░ js



рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред



рдЖрдЗрдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА require()



рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рддрд╣рдд рдЪрд░ _



рдХреЛ рдЬрд▓рд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ:



 var _ = require('underscore');
      
      





рдЕрдм, рд╣рдо рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ each()



рдФрд░ рдлрд╛рдЗрдВрдб find()



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



 var _ = require('underscore'), names = ['Bruce Wayne', 'Wally West', 'John Jones', 'Kyle Rayner', 'Arthur Curry', 'Clark Kent'], otherNames = ['Barry Allen', 'Hal Jordan', 'Kara Kent', 'Diana Prince', 'Ray Palmer', 'Oliver Queen']; _.each([names, otherNames], function(nameGroup) { findSuperman(nameGroup); }); function findSuperman(values) { _.find(values, function(name) { if (name === 'Clark Kent') { console.log('It\'s Superman!'); } else { console.log('... No superman!'); } }); }
      
      





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



 npm install underscore
      
      





рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдиреЛрдб рдФрд░ рдПрдирдкреАрдПрдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рддрдВрддреНрд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреЛрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ node_modules



рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдЧрд╛ред рдпрд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЖрдкрдХреЗ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдореЙрдбреНрдпреВрд▓ рдХреА рдореЗрдЬрдмрд╛рдиреА рдХрд░реЗрдЧреАред рдЯреАрдо рдХреЛ Npm рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА ( https://registry.npmjs.org/undoncore ) рд╕реЗ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓реЗрдЧрд╛ред рд╣рдорд╛рд░реЗ node_modules



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



рдкрд╣рд▓реА рдмрд╛рд░ Browserify рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ



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



рдХрд╣рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдПрдХ рдХрдорд╛рдВрдб рдЪрд▓рд╛рддрд╛ рд╣реВрдВ:



 browserify js/main.js -o js/findem.js -d
      
      





рдпрд╣ рдХрдорд╛рдВрдб рдЖрдкрдХреЗ main.js рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА findem.js



рдХреЛ findem.js



(рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкреИрдХреЗрдЬ рдирд┐рд░реНрднрд░рддрд╛ рд╕рд╣рд┐рдд ред рдкреНрд░рддрд┐ред Perред ) ред , рдЬреЛ -o



рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ -d



рд╡рд┐рдХрд▓реНрдк рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реА рдЯреАрдо рд╣рдорд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░ рднреА рдмрдирд╛рдПрдЧреАред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо underscore



рдФрд░ main.js



рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдбреАрдмрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



Browserify Output File рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛



рдЖрдЙрдЯрдкреБрдЯ рдмреНрд░рд╛рдЙрдЬрд░рдлрд╛рдИ рдлрд╝рд╛рдЗрд▓ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИ рдЬреИрд╕реЗ рдХреЛрдИ рдЕрдиреНрдп рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓:



 <script src="js/findem.js"></script>
      
      







рдЕрдкрдиреА рдЦреБрдж рдХреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЖрдпрд╛рдд рдХрд░рдирд╛



рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХреЗрд╡рд▓ node_modules



рдлрд╝реЛрд▓реНрдбрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк require()



рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЙрд╕реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдб рдХреА рдпрд╣ рд▓рд╛рдЗрди рдПрдХ JS рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо your_module.js







 greatestModuleEver = require('./your_module.js');
      
      





рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдкрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, module.exports



рдкрд░рд┐рднрд╛рд╖рд┐рдд module.exports



ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред



 module.exports = function(vars) { //   }
      
      





рдиреЛрдЯ!

рдпрджрд┐ рдЖрдк рдХрдИ рд░реЗрдбреАрдореЗрдб рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ npm рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ Browserify рдореЗрдВ рдХреИрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ npm- рдореЙрдбреНрдпреВрд▓ Browserify-shim рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреА рдЪрд╛рд╣рд┐рдПред рд╡рд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рд╣рд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЙрдкрдпреЛрдЧреА рд▓рдЧ рд╕рдХрддреА рд╣реИред



рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг



рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдЕрдкрдиреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдкрд┐рдЫрд▓реЗ рд╕реБрдкрд░ рд╣реАрд░реЛ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд▓реЗрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЬрдЧрд╣ рджреЗрдВрдЧреЗ, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рдПрдЧрд╛ред рдореЙрдбреНрдпреВрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:



 module.exports = function() { return ['Barry Allen', 'Hal Jordan', 'Kara Kent', 'Diana Prince', 'Ray Palmer', 'Oliver Queen', 'Bruce Wayne', 'Wally West', 'John Jones', 'Kyle Rayner', 'Arthur Curry', 'Clark Kent']; }
      
      





рдЦреИрд░, рдЕрдм рд╣рдо рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ names = require("./names.js");



рдореЗрдВ рдЖрдпрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ names = require("./names.js");



:



 var _ = require('underscore'), names = require('./names.js'); findSuperman(names()); function findSuperman(values) { _.find(values, function(name) { if (name === 'Clark Kent') { console.log('It\'s Superman!'); } else { console.log('... No superman!'); } }); }
      
      





рд╣рдорд╛рд░реЗ names



рдЪрд░ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рд╕рдорд╛рд░реЛрд╣ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ names



рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ findSuperman()



рд▓рд┐рдП рд╕рд░рдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред



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







Variables рдФрд░ рдкрд╛рд╕рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд╛рд╕рд┐рдВрдЧ рд╣рдорд╛рд░реЗ рдРрдк рдХреЗ рдкрд╛рд░



рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╕рд░рд▓ рд╕реБрдкрд░рдореИрди рдЦреЛрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░реЗрдВ - рдЖрдЗрдП рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ findSuperman()



рдлрд╝рдВрдХреНрд╢рди рдХреЛ findSuperman()



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



рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЪрд░ рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд░рд┐рдЯрд░реНрди рдлрд╝рдВрдХреНрд╢рди ( module.exports



) рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ findsuperman.js



рдлрд╝рд╛рдЗрд▓ findsuperman.js



рдЬреЛ рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛:



 module.exports = function (values) { var foundSuperman = false; _.find(values, function(name) { if (name === 'Clark Kent') { console.log('It\'s Superman!'); foundSuperman = true; } else { console.log('... No superman!'); } }); return foundSuperman; }
      
      





рдореИрдВрдиреЗ рд╣рдорд╛рд░реЗ findSuperman()



рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рдкрд╕реА рдорд╛рди рдЬреЛрдбрд╝рд╛ рд╣реИред рдпрджрд┐ рд╡рд╣ рд╕реБрдкрд░рдореИрди рдкрд╛рддрд╛ true



, рддреЛ true



, рдЕрдиреНрдпрдерд╛ false



ред рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЙрд╕ рдХреЛрдб рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рджреЗрдВ рдЬреЛ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо рдПрдХ рдЪреАрдЬрд╝ рд╕реЗ рдЪреВрдХ рдЧрдП: рд╣рдорд╛рд░рд╛ рдХреЛрдб рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЗрд╕реЗ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдХреЛрдб рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлреЙрд░реНрдо рд▓рд┐рдпрд╛:



 var _ = require('underscore'); module.exports = function (values) { ... }
      
      





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



рдореЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм Browserify рдЗрд╕реЗ рд╕рднреА рдХреЛ рдПрдХ рд╕рд╛рде рд▓рд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдХреВрд▓, рд╣реИ рдирд╛?



рд╣рдорд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдирдП рдореЙрдбреНрдпреВрд▓ рдХреЛ true/false



рдирдП рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕рд┐рд░реНрдл document.write



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣рдо рд╕реБрдкрд░рдореИрди рдХреЛ рдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ:



 var _ = require('underscore'), names = require('./names.js'), findSuperman = require('./findsuperman.js'); if (findSuperman(names())) { document.write('We found Superman'); } else { document.write('No Superman...'); }
      
      





рд╣рдореЗрдВ рдЕрдм рдЕрдкрдиреА рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рднреА рдЗрд╕реЗ findsuperman.js



рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ findsuperman.js



рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



Package.json рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ npm рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди



рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдИ рджреЛрд╕реНрдд рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЙрд╕рд╕реЗ рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рдирд╛ рдмреЗрд╡рдХреВрдлреА рд╣реЛрдЧреА рдХрд┐ рд╡рд╣ рдХрд╣реАрдВ рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛ рд▓реЗрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рдкрд╣рд▓реЗ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ package.json



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



 { "name": "FindSuperman", "version": "0.0.1", "author": "Patrick Catanzariti", "description": "Code designed to find the elusive red blue blur", "dependencies": { "underscore": "1.6.x" }, "devDependencies": { "browserify": "latest" } }
      
      





рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕реВрдЪреА рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ "underscore": "1.6.x"



рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рдЬрд╣рд╛рдВ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдирд╛рдо рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред "lastest"



рдпрд╛ "*"



рдЖрдкрдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ npm рдореЗрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЛ 1.6



(рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛) рдпрд╛ 1.6.



рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ( 1.6.0



рд╕реЗ 1.7



рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рд╡реЗрд╢реА рдирд╣реАрдВ)ред



рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИ - рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ findsuperman.js



рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛ findsuperman.js



рдкрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдПрдХ devDependencies



рд░реВрдк рдореЗрдВ рдкреНрд▓рдЧ рдХрд░реЗрдВрдЧреЗ - рдореЙрдбреНрдпреВрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЖрд╡реЗрджрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ package.json



рдлрд╝рд╛рдЗрд▓ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдорд┐рддреНрд░ рдХреЛ npm install underscore



рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред рдпрд╣ рдмрд╕ npm install



рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ node_modules



рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХреА node_modules



ред



рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рди Browserify



browserify



рдХрдорд╛рдВрдб рдХреЛ рд╣рд░ рдмрд╛рд░ рдЪрд▓рд╛рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдмрд╛рдК рд╣реИ, рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдмреЗрддрд╣рд╛рд╢рд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Browserify рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред



NPM


npm рд╕реНрд╡рдпрдВ рдХрдВрд╕реЛрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдЯрд╛рдЗрдк рдХрд░ рд░рд╣реЗ рдереЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ package.json



рдореЗрдВ рдПрдХ scripts



рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдПрдБред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



 "scripts": { "build-js": "browserify js/main.js > js/findem.js" }
      
      





рдЕрдм рдпрд╣ рд╕рдм рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:



 npm run build-js
      
      





рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдЕрднреА рднреА рд╣рд░ рдмрд╛рд░ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред Npm рд╡реЙрдЪ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рдШрдбрд╝реА рд╕рд░рд▓, рд╣рд▓реНрдХреА рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдЯрди рд╕рдордп рдмрдЪрд╛рддреА рд╣реИред рдпрд╣ рдЖрдкрдХреА JS рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░реЗрдЧрд╛ рдФрд░ Browserify рдХреЛ рдЕрдкрдиреЗ рдЖрдк рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░реЗрдЧрд╛ред



рдЕрдм рд╣рдо рдЗрд╕реЗ package.json



рдкрд░ devDependencies



package.json



devDependencies



рдкрд░ devDependencies



, рдФрд░ scripts



рд╕реЗрдХреНрд╢рди рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрди рд▓рд┐рдЦрдирд╛ рди рднреВрд▓реЗрдВ (рдпрд╣ рдкреИрдХреЗрдЯ watchify



рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рд╕реАрдзреЗ рд╣рдорд╛рд░реЗ watchify



рдореЙрдбреНрдпреВрд▓ рдХреЛ watchify



)ред



 "devDependencies": { "browserify": "latest", "watchify": "latest" }, "scripts": { "build-js": "browserify js/main.js > js/findem.js", "watch-js": "watchify js/main.js -o js/findem.js" }
      
      





рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХрдорд╛рдВрдб рд▓рд┐рдЦреЗрдВ:



 npm run watch-js
      
      





рдпрд╣ рдЬрд╛рджреВ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдХрдорд╛рдВрдб рдореЗрдВ рд▓рдЧрднрдЧ рдХреЛрдИ рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рднрдЯрдХрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХрдорд╛рдВрдб рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк -v



рдзреНрд╡рдЬ рдХреЛ рдЕрдкрдиреА рдирд┐рдЧрд░рд╛рдиреА рдЖрджреЗрд╢ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:



 "watch-js": "watchify js/main.js -o js/findem.js -v"
      
      





рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реЗрдЬреЗ рдЧрдП рд╣реИрдВ:



 121104 bytes written to js/findem.js (0.26 seconds) 121119 bytes written to js/findem.js (0.03 seconds)
      
      







Npm рдореЗрдВ рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ



watchify



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ watchify



рдмрд╛рдж рдРрдб- -d



(рдпрд╛ watchify



) watchify



:



 "scripts": { "build-js": "browserify js/main.js > js/findem.js -d", "watch-js": "watchify js/main.js -o js/findem.js -d" }
      
      





рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП (рдбрд┐рдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ, рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп) рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:



 "watch-js": "watchify js/main.js -o js/findem.js -dv"
      
      







рдШреБрд░рдШреБрд░рд╛рдирд╛



рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧ (рд╕реНрд╡рдпрдВ рд╕рд╣рд┐рдд) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧреНрд░рдВрдЯ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдФрд░, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╡реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ Browserify рдЗрд╕ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!



рд╣рдореЗрдВ рд╡рд╣рд╛рдВ рдПрдХ рдЧреНрд░рдВрдЯ рдХрдиреЗрдХреНрд╢рди рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝рдХрд░ рдЕрдкрдиреЗ package.json



рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдЕрдм scripts



рд╕реЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдЧреНрд░рдВрдЯ рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рд╢рд┐рдлреНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛:



 { "name": "FindSuperman", "version": "0.0.1", "author": "Patrick Catanzariti", "description": "Code designed to find the elusive red blue blur", "dependencies": { "underscore": "1.6.x" }, "devDependencies": { "browserify": "latest", "grunt": "~0.4.0", "grunt-browserify": "latest", "grunt-contrib-watch": "latest" } }
      
      





рд╣рдордиреЗ sl рдЬреЛрдбрд╝рд╛ред рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ:



рдЧреНрд░рдВрдЯ - рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреНрд░рдВрдЯ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред

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

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



рдлрд┐рд░ рд╣рдо Gruntfile.js



рдирд╛рдордХ рдПрдХ рдлрд╝рд╛рдЗрд▓ Gruntfile.js



рдФрд░ рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдЗрд╕ Gruntfile.js



рдЕрдВрджрд░ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:



 module.exports = function(grunt) { grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-browserify'); grunt.registerTask('default', ['browserify', 'watch']); grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), browserify: { main: { src: 'js/main.js', dest: 'js/findem.js' } }, watch: { files: 'js/*', tasks: ['default'] } }); }
      
      





рд╣рдордиреЗ рдЕрдкрдиреА рдЧреНрд░рдВрдЯрдлрд╛рдЗрд▓ рдХреЛ рдЖрд╡рд╢реНрдпрдХ npm рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛ рдЬрд┐рд╕реЗ рд╣рдордиреЗ package.json



рдореЗрдВ рдкреНрд▓рдЧ рдХрд┐рдпрд╛ рдерд╛ package.json



json:



 grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-browserify');
      
      





рд╣рдо рдПрдХ (рдФрд░ рдХреЗрд╡рд▓) рдХрд╛рд░реНрдп рд╕рдореВрд╣ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ( browserify



рдФрд░ watch



):



 grunt.registerTask('default', ['browserify', 'watch']);
      
      





рдЕрдЧрд▓рд╛, рд╣рдо initConfig



рдХреЛ initConfig



рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗ:



 grunt.initConfig({
      
      





рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░рд╛ package.json



рдХрд╣рд╛рдВ рд╣реИ package.json







 pkg: grunt.file.readJSON('package.json'),
      
      





Browserify рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рд╣рдо рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдХрд╣рд╛рдВ рд░рдЦреЗрдВ:



 browserify: { main: { src: 'js/main.js', dest: 'js/findem.js' } }
      
      





рдЕрдм рд╣рдо oode> рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ watch



рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВрдЧреЗ:



 watch: { files: 'js/*', tasks: ['default'] }
      
      





рд╣рдорд╛рд░реЗ рдирдП рд╡рд┐рдХрд╛рд╕ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ ( devDependencies



) рдХреЗ рдХрд╛рд░рдг, рд╣рдореЗрдВ npm install



devDependencies



npm install



рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрдк рдЧреНрд░рдВрдЯ рдХреЗ рд▓рд╛рднреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред



рдЧреНрд░рдВрдЯ рдореЗрдВ рд╕реЛрд░реНрд╕ рдореИрдкреНрд╕ рдмрдирд╛рдирд╛



grunt-browserify



рдкреИрдХреЗрдЬ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 2.0.1 рдХреЗ рд╕рд╛рде, рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдереЛрдбрд╝реА рдмрджрд▓ рдЧрдИ рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдЧрд▓рдд рдлреИрд╕рд▓реЛрдВ рдХреЗ рд╕рд╛рде рдерд╛ред рдЕрдм, рдЧреНрд░рдВрдЯ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдПрдВ, рдмрд╕ debug: true



рдЬреЛрдбрд╝реЗрдВ debug: true



bundleOptions



debug: true



рдзреНрд╡рдЬ:



 browserify: { main: { options: { bundleOptions: { debug: true } }, src: 'js/main.js', dest: 'js/findem.js' } }
      
      





рдпрд╣ рдХрдард┐рди-рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдорд╛рдзрд╛рди рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХреЗ рд╕реЗ Browserify рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред



рдШреВрдВрдЯ



рдЧреБрд▓реНрдк <3 рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд░реЗрдВред рдЧреБрдкрдЪреБрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Browserify рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдЖрдИрдЯреА рд╕рдореБрджрд╛рдпреЛрдВ рдореЗрдВ рдПрдХ рдЕрддреНрдпрдВрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рд╖рдп рд╣реИ, рдФрд░ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ: Browserify рдФрд░ Gulp рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрдиреНрдирдд рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рд╕реНрдЯреИрдХ рд╣реИрдВред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░рд▓рд╛рдЗрдЬрд╝ рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЛ рдЧреБрд▓рдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ, рдпрд╣ рдкрд╛рдардХ рдХреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ npm рдпрд╛ рдЧреНрд░рдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ npm build



рдЯреАрдо рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рд╣реВрдВред



рд╣рдордиреЗ рдЬреЛ рдХреБрдЫ рднреА рдЧрд▓реНрдк рдХреЗ рд▓рд┐рдП рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдерд╛, рдЙрд╕реЗ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЗрд╕реЗ (рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:



 npm install -g gulp
      
      





рд╣рдо рдЕрдкрдиреЗ package.json



рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗред рдирдИ devDependencies



рдХреА рдЬреЛрдбрд╝реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:



 "devDependencies": { "browserify": "latest", "watchify": "latest", "gulp": "3.7.0", "vinyl-source-stream": "latest" }
      
      





рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗ рд╣реИрдВ:

рдШрдбрд╝реА - рд╣рдордиреЗ npm рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдХреЗ рдХрд╛рдо рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛

рдЧрд▓реНрдк - рдХрдиреЗрдХреНрдЯ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЧрд▓реНрдк

рд╡рд┐рдирд╛рдЗрд▓-рд╕реЛрд░реНрд╕-рд╕реНрдЯреНрд░реАрдо - рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо

Browserify рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рд╕реАрдзреЗ рдЧреБрд▓ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



Browserify рдореЗрдВ рд╕реАрдзреЗ рддреМрд░ рдкрд░ Gulp рд╕реЗ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП API рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛рдПрдБ gulp-browserify



browserify рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди Browserify рдЦреБрдж рдХреЛ рдЗрд╕рдХреЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░рд▓рд╛рдЗрдЬрд╝ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо vinyl-source-stream



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред



рдлрд┐рд░ рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдореВрд▓ рдореЗрдВ gulpfile.js



рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рд╕рднреА рдЧреБрд▓ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдпрд╣рд╛рдВ рдкрдбрд╝реЗрдЧреА:



 var browserify = require('browserify'), watchify = require('watchify'), gulp = require('gulp'), source = require('vinyl-source-stream'), sourceFile = './js/main.js', destFolder = './js/', destFile = 'findem.js'; gulp.task('browserify', function() { return browserify(sourceFile) .bundle() .pipe(source(destFile)) .pipe(gulp.dest(destFolder)); }); gulp.task('watch', function() { var bundler = watchify(sourceFile); bundler.on('update', rebundle); function rebundle() { return bundler.bundle() .pipe(source(destFile)) .pipe(gulp.dest(destFolder)); } return rebundle(); });
      
      







 gulp.task('default', ['browserify', 'watch']);
      
      





рд╣рдо рдЕрдкрдиреЗ npm рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рд╣рдо рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рддреАрди рдЪрд░ рдмрдирд╛рдиреЗ рд╣реЛрдВрдЧреЗ:



sourceFile



- рд╕реНрд░реЛрдд рдХрд╛ рдирд╛рдо рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░-рдлрд╝рд╛рдЗрд▓ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ js/main.js



)

destFolder



- рдЕрдВрддрд┐рдо рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рди

destFile



рд╡рд╣ рдирд╛рдо рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреА рдЕрдВрддрд┐рдо рдлрд╝рд╛рдЗрд▓ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдКрдВрдЧрд╛:



рдХреИрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рд╣рдорд╛рд░реЗ gulpfile.js



рдореЗрдВ рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп " gulpfile.js



" рд╣реИ:



 gulp.task('browserify', function() {
      
      





рдпрд╣рд╛рдБ рд╣рдо main.js



Browserify рдкреИрдХреЗрдЬ рдореЗрдВ рдЕрдкрдиреА main.js



рд╕реЛрд░реНрд╕ рдлрд╛рдЗрд▓ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:



 return browserify(sourceFile)
      
      





рддрдм рд╣рдо рдЕрдкрдиреЗ JS рдХрдВрдЯреЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ Browserify API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:



 .bundle()
      
      





рдпрд╣рд╛рдБ рд╣рдо рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдлрд╛рдЗрд▓ рдХреЛ findem.js



рдирд╛рдордХ рдлрд╛рдЗрд▓ рдореЗрдВ findem.js



рдФрд░ рдЗрд╕реЗ js



рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВред



 .pipe(source(destFile)) .pipe(gulp.dest(destFolder));
      
      





рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рд╣рдордиреЗ рдЕрдкрдиреА рдЖрдпрд╛рддрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрдИ рдЪрд░рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд┐рдо рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рд╣реБрд░реНрд░реЗ!



рдШрдбрд╝реА рдФрд░ рдЧреБрд▓ рдХрд╛ рд╕рдВрдпреЛрдЬрди



рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ, Browserify рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕реАрдзреЗ рдмрд╣реБрдд рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИ (hehe, рд▓рдЧрднрдЧ рдкреНрд░рддрд┐ ) рдФрд░ рдкреИрдХреЗрдЬ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рдмрджрд▓рдиреЗ рдкрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдк рдЪрд▓рд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ watchify



рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред



рд╣рдо рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдирд╛рдордХ рдПрдХ рдХрд╛рд░реНрдп рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:



 gulp.task('watch', function() {
      
      





рд╣рдо рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ bundler



рд╡реИрд░рд┐рдПрдмрд▓ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕реЗ рджреЛ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ):



 var bundler = watchify(sourceFile);
      
      





рдлрд┐рд░ рд╣рдо рдПрдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╣рд░ рдмрд╛рд░ update



рдЗрд╡реЗрдВрдЯ rebundle



рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ rebundle



рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рдЬреИрд╕реЗ рд╣реА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдмрджрд▓ рд░рд╣реА рд╣реИ, рд╡рд╣ rebundle()



рдЪрд▓рд╛рддрд╛ рд╣реИ rebundle()



:



 bundler.on('update', rebundle);
      
      





рддреЛ рдХреНрдпрд╛ rebundle()



? рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рд╣рдорд╛рд░реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛рд░реНрдп рдХреЗ рд╕рдорд╛рди рд╣реИ:



 function rebundle() { return bundler.bundle() .pipe(source(destFile)) .pipe(gulp.dest(destFolder)); }; return rebundle(); });
      
      





- , browserify



watchify



, , . , gulpfile.js .



gulpfile.js



, ( , grunt).



 gulp.task('default', ['browserify', 'watch']);
      
      





, Gulp . ┬л ┬╗, :



 gulp
      
      





browserify



-, .



Browserify :



 gulp browserify
      
      





-:



 gulp watch
      
      





рдЧреБрд▓ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЛрд░реНрд╕ рдореИрдк рддреИрдпрд╛рд░ рдХрд░реЗрдВ



рдЕрдкрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, { debug: true }



рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ bundle()



ред



рд╣рдорд╛рд░рд╛ browserify



рдХрд╛рд░реНрдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛрдЧрд╛:



 gulp.task('browserify', function() { return browserify(sourceFile) .bundle({debug:true}) .pipe(source(destFile)) .pipe(gulp.dest(destFolder)); });
      
      





rebundle()



рд╣рдорд╛рд░реЗ watch



рдХрд╛рд░реНрдп рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:



 function rebundle() { return bundler.bundle({debug:true}) .pipe(source(destFile)) .pipe(gulp.dest(destFolder)); }
      
      







рдирд┐рд╖реНрдХрд░реНрд╖



Browserify, , , . , JavaScript , Node . Node , npm . Browserify, , !





Browserify . , :




All Articles