
рдПрдХ рдмрд╛рд░, рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдмреИрдареЗ рдФрд░ рдЕрдкрдиреЗ рдЕрдЧрд▓реЗ рдмреЗрдХрд╛рд░ рдЙрджреНрдпрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдЕрдЪрд╛рдирдХ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рд╛рдЗрдб рдкрд░ рдФрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рд╕рдорд╛рди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред рд▓рдЧрднрдЧ рддреБрд░рдВрдд, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рдЗрддрдирд╛ рд╕реНрдорд╛рд░реНрдЯ рдирд╣реАрдВ рдерд╛, рдФрд░ рд╕рдм рдХреБрдЫ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╣реА рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдФрд░ рдореБрдЭрд╕реЗ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реБрдИ рдереАред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореЗрд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
Node.js рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ
рдПрдбреЙрдкреНрдЯрд░ рдХреЗ рд╕рд╛рде
EssentialJS рдЕрджреНрднреБрдд
рдерд╛ , рдЬреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдореЗрд░реЗ
рд╕рдирд╕рдиреАрдЦреЗрдЬ рд╕реЗ рдорд┐рд▓рд╛, рдЬрдм рддрдХ рдХрд┐ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рд╢рд╛рдирджрд╛рд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдЖрдпрд╛: тАЬрдореИрдВ рджреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рд╛рд░реВрдкреЛрдВ рд╕реЗ рджрд▓рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХреНрдпреЛрдВ рд╣реВрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдореЗрдВ рд╕рдм рдХреБрдЫ рдПрдХрдЬреБрдЯ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ! тАЭ
рдФрд░ рдлрд┐рд░, рдЬрд╡рд╛рдм рдЖрдиреЗ рдореЗрдВ рд▓рдВрдмрд╛ рдирд╣реАрдВ рдерд╛, рдХреЙрдордирдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдПрдХ рд▓рд╛рдЦ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдереЗ: рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЧреНрд▓реВрдЕрд░, рд╕рд░реНрд╡рд░ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░, рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд▓реЛрдбрд░, рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд╛рд▓реЗ - рд╕рдм рдХреБрдЫ рдЬреЛ рдЖрдкрдХреЗ рджрд┐рд▓ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреЛрд╖ рдереЗред рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд┐рд░реАрдХреНрд╖рдХреЛрдВ рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛ рджрд┐рдпрд╛ред
рд╣рдо рд╕реЛрдЪрддреЗ рд╣реИрдВ
рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдо рд╕реНрдерд╛рди рдХреЗрд╡рд▓ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рднреАрддрд░ рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ рдЕрдкрдиреА рд╕реАрдорд╛ рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдХреЛрдб рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕рднреА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░реЗрдЧрд╛ред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдХреЛрдб рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рд╕реНрдерд╛рди рд╕реНрдерд╛рдиреАрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдк рдмреНрд░рд╛рдЙрдЬрд░ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд░ рдореЗрдВ рд╣реА рд╕рд░реНрд╡рд░ рдкрд░ рдХрд┐рд╕реА рдлрдВрдХреНрд╢рди рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВред рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рд╕реНрд░реЛрдд рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рд╣рдо рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдЬрд╛рдПрдВрдЧреЗред рд╣рдорд╛рд░реА рдкрджреНрдзрддрд┐ рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рдЕрд▓рдЧ iframe рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдмрд╛рдХреА рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдХреЗ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдХреЙрдордирдЬ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлрдВрдХреНрд╢рди рдФрд░ рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдФрд░ рдореЙрдбреНрдпреВрд▓.рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рддрд░реАрдХрд╛ рдЗрд╕рдХреА рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдерд╛ред рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдореБрдЭреЗ рд╕рд╛рдордиреЗ рдЖрдИ рд╡рд╣ рдереА рдореВрд▓ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдЦрд┐рдбрд╝рдХреА рдФрд░ рдЕрдиреНрдп рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕реБрд╡рд┐рдзрд╛ред рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмреЛрдЭрд┐рд▓ window.parent.window рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреЗрдорд╛рдиреА рд╣реЛрдЧреА рдпрджрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЧреЛрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди, рдХрд┐рд╕реА рддрд░рд╣, рдкреНрд░рддреНрдпреЗрдХ iframe рдореЗрдВ рдПрдХ
рд╡реИрд╢реНрд╡рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рдореВрд▓ рд╡рд┐рдВрдбреЛ рдХреА рд╡рд┐рдВрдбреЛ рдХрд╛ рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛ред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╡рд┐рдВрдбреЛ, рдбреЙрдХреНрдпреВрдореЗрдВрдЯ, рдиреЗрд╡рд┐рдЧреЗрдЯрд░, рд╣рд┐рд╕реНрдЯреНрд░реА, рдЗрддреНрдпрд╛рджрд┐ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░ рдкрд╛рдПрдВрдЧреЗ рдФрд░ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЧреНрд▓реЛрдмрд▓ рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХреЗрдВрдЧреЗред
рджреВрд╕рд░рд╛, рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛, рджреЛрд╖ рдпрд╣ рдерд╛ рдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдпреЛрдВ (рдХрдХреНрд╖рд╛рдУрдВ) рдлрд╝рдВрдХреНрд╢рди, рджрд┐рдирд╛рдВрдХ, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЖрджрд┐ рдХреА рдЧреИрд░-рдкрд╣рдЪрд╛рди рдереАред рд╡рд┐рднрд┐рдиреНрди рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВред рдпрд╣ рд╣рдореЗрдВ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЛрдИ рд╡рд╕реНрддреБ рдХрд┐рд╕реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд░реНрдЧ рдХреА рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрджрд┐ рд╡рд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИред
var doSomething = require("./someModule").doSomething;
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЛрдб рдореЗрдВ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рдорд╛рди рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордЭреМрддреЗ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд░реЗрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рд╕реЗ:
console.log(typeof doSomething === "function");
рдПрдХ рдФрд░ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рдЬреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХреЛ рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдХреЙрдордирдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреЙрдордирдЬрд╕ рдХреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдордХрд╛рд▓рд┐рдХ рдкреНрд░рдХреГрддрд┐ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рд╡рд╛рдВрдЫрд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ AJAX рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рдпрд╛ рдирдП рдлрд╝рдВрдХреНрд╢рди () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдирд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдбреАрдмрдЧрд░ рдореВрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╣рдо рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдПрдВрдЧреЗ, рдЬреЛ рд╣рдореЗрдВ рдЕрдЫреВрддреЗ рдирд┐рд░реНрджрдпреА рдирд┐рд░реНрд╡рд╛рд╕рд┐рдд рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдбрд┐рдмрдЧрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдЖрд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдХреИрд╢ рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓.рдПрдХреНрд╕рдкреЛрд░реНрдЯреНрд╕ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рд╣реА рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рдмрд╛рддреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдереЛрдбрд╝реА рдЪрд╛рд▓ рдкрд░ рдЪрд▓реЗрдВ - рд╣рдо рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рд▓реЛрдб рдХрд░ рджреЗрдВрдЧреЗ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЗрди рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдХреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдХреИрд╢ рдХрд░ рджреЗрдВрдЧреЗ, рдЬрд╣рд╛рдВ рд╕реЗ рд╣рдорд╛рд░реЗ рдмрд┐рд▓реНрдХреБрд▓ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред
рдмреЗрд╢рдХ, рдпрд╣ рд╡рд┐рдзрд┐ рднреА рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд╣реИред рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреНрд░реАрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдирдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ (рдирд╛рдореЛрдВ) рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЙрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреНрд░реАрд▓реЛрдб рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ рдЬрд┐рдирдХреА рдкрд╣рдЪрд╛рди рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИред рдЕрд░реНрдерд╛рддреН, рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ:
var a = someRandomValue(); require("./module" + a);
рдлрд┐рд░ рднреА, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп AJAX- рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП eval рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрднреА рднреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдХреНрд░рдо рдЗрд╕рд╕реЗ рднрд┐рдиреНрди рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Node.js. рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВред рджреЛ рдЫреЛрдЯреЗ рдореЙрдбреНрдпреВрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
Node.js рдореЗрдВ, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП callDataForSomeExternalOperation рдлрд╝рдВрдХреНрд╢рди doSomeExternalOperation рдХреЙрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реЛрдЧрд╛ (рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдЧрд░ рдХреЛрдИ рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА ("./ a" рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ)ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЖрд╕рдкрд╛рд╕ рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЙрдбреНрдпреВрд▓ рдореЙрдбреНрдпреВрд▓ рдмреА рд╕реЗ рдкрд╣рд▓реЗ рд▓реЛрдб рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдореЗрдВ рднреА рдЗрд╕ рдЦрд╛рдореА рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ рдпрд╣ рдХрд╣рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╣реА рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдкреИрджрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдореЙрдбреНрдпреВрд▓ рдХреЗ рдореБрдЦреНрдп рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдмрд╛рд╣рд░реА рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдирд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдпрд╛ рдХреБрдЫ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ) рдЬреЛ рдХрд┐ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред
рдпрд╣рд╛рдБ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдФрд░ рд╡рд╣ рд╕рдм рдЬреЛ рдореИрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓реЛрдбрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрджрд┐ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд▓рдЧ рд░рд╣реА рдереА рдФрд░ рд╡рд╣ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ (рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдкреНрд░рд╛рдердорд┐рдХ рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЗрд╕рдореЗрдВ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП), рдореИрдВ рдмрд╣реБрдд рдЦреБрд╢ рд╣реВрдВред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдЕрдЪрд╛рдирдХ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рдпрд╛ рд╕рд┐рд░реНрдл рдЙрддреНрд╕реБрдХ рд╣реИрдВ - рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!
рдХреЛрдб
рд╕реНрд░реЛрдд
рдЧреАрдереВрдм рдкрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рдореИрдВрдиреЗ рдЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реЛрдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрднреА рдХреЗ рд▓рд┐рдП, рдкреВрд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ - рд╡рд╣ рдорд╛рд░реНрдЧ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реА рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдерд┐рдд рд╣реИрдВ), рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреИрд╢:
function Comeon(path) { var self = this; self.path = path; self.modules = {}; }
рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдПрдХрд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдЦрддреНрдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
Comeon.prototype.require = function require(moduleRequest, callback) { var self = this; loadNextModule.bind(self)(enqueueModule.bind(self)(getModuleId("", moduleRequest)), callback); }
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рджреЛ рдореБрдЦреНрдп рдФрд░ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░реНрдпреЛрдВ enqueueModule рдФрд░ loadNextModule рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рд╣рдо рдХреБрдЫ рд╕рд╣рд╛рдпрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
SearchRequires рдлрд╝рдВрдХреНрд╢рди рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ URL рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ XHR рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╕ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рджреМрд░рд╛рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдХреИрд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдмрд╛рдж рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред
var requirePattern = /(?:^|\s|=|;)require\(("|')([\w-\/\.]*)\1\)/g; function searchRequires(url) { var requires = []; var xhr = new XMLHttpRequest(); xhr.open("GET", url, false); xhr.onreadystatechange = function () { if ((xhr.readyState === 4) && (xhr.status === 200)) { var match; while ((match = requirePattern.exec(xhr.responseText)) !== null) { requires.push(match[2]); } } }; xhr.send(); return requires; }
GetModuleId рдФрд░ getModuleContext рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрде рдХреЛ рдХреНрд░рдорд╢рдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
function getModuleId(moduleContext, moduleRequest) { var moduleId = []; (/^\.\.?\//.test(moduleRequest) ? (moduleContext + moduleRequest) : moduleRequest).replace(/\.(?:js|node)$/, "").split("/").forEach(function (value) { if (value === ".") { } else if (value === "..") { moduleId.pop(); } else if (/[\w\-\.]+/.test(value)) { moduleId.push(value); } }); return moduleId.join("/"); }
function getModuleContext(moduleId) { return moduleId.slice(0, moduleId.lastIndexOf("/") + 1); }
рдЖрд╡рд╢реНрдпрдХрддрд╛ рдлрд╝рдВрдХреНрд╢рди рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЕрдиреБрд░реЛрдзрд┐рдд рдХреИрд╢реНрдб рдирд┐рд░реНрдпрд╛рдд рд▓реМрдЯрд╛рдПрдЧрд╛ред рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдФрд░ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкрде рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдлреНрд░реЗрдо рдХреЛ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдбрд╛рд▓ рджреЗрдВрдЧреЗред
function require(moduleContext, moduleRequest) { var self = this; var moduleId = getModuleId(moduleContext, moduleRequest); if (self.modules[moduleId] && self.modules[moduleId].exports) { return self.modules[moduleId].exports; } else { throw Error("Module not found."); } }
рдФрд░ рдЕрдВрдд рдореЗрдВ, рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рд╕рднреА рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред
рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди enqueueModule рдХрддрд╛рд░ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рднреА, рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ, рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдбрд┐рдВрдЧ рдХрддрд╛рд░ рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рд╣реЛрдЧрд╛ - рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБред рдЗрд╕ рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рдХреИрд╢реНрдб рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рд╡рд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
function enqueueModule(moduleId) { var self = this; var moduleQueue = []; if (!self.modules[moduleId]) { self.modules[moduleId] = { url: self.path + moduleId + ".js?ts=" + (new Date()).valueOf() }; moduleQueue.push(moduleId); searchRequires(self.modules[moduleId].url).forEach(function (value) { Array.prototype.push.apply(moduleQueue, enqueueModule.bind(self)(getModuleId(getModuleContext(moduleId), value))); }); } return moduleQueue; }
LoadNextModule рдлрд╝рдВрдХреНрд╢рди enqueueModule рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рдХрддрд╛рд░ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреНрд░рдо рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╕рдХреА рдХреИрд╢ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рд▓реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдерд╛)ред рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдКрдкрд░ рд╕рд╣рдордд рдереЗ, рдПрдХ рдЕрд▓рдЧ iframe рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╡реИрд╢реНрд╡рд┐рдХ, рдирд┐рд░реНрдпрд╛рдд рдФрд░ рдореЙрдбреНрдпреВрд▓.exports рдЪрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЕрдЧрд▓рд╛ iframe рдкрд┐рдЫрд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдбрд╛рдЙрдирд▓реЛрдб рдХрддрд╛рд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╣рдо рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рдФрд░ рдЕрдВрддрд┐рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдХреЛ рдЗрд╕рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
function loadNextModule(moduleQueue, callback) { var self = this; if (moduleQueue.length) { var iframe = document.createElement("iframe"); iframe.src = "about:blank"; iframe.style.display = "none"; iframe.onload = function () { var moduleId = moduleQueue.pop(); var iframeWindow = this.contentWindow; var iframeDocument = this.contentDocument; iframeWindow.global = window; iframeWindow.require = require.bind(self, getModuleContext(moduleId)); iframeWindow.module = { exports: {} } iframeWindow.exports = iframeWindow.module.exports; var script = iframeDocument.createElement("script"); script.src = self.modules[moduleId].url; script.onload = function () { self.modules[moduleId].exports = iframeWindow.module.exports; if (moduleQueue.length) { loadNextModule.bind(self)(moduleQueue, callback); } else if (typeof callback === "function") { callback(self.modules[moduleId].exports); } }; iframeDocument.head.appendChild(script); }; document.body.appendChild(iframe); } else if (typeof callback === "function") { callback(); } }
рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
var script = Array.prototype.slice.call(document.getElementsByTagName("script"), -1)[0]; var main = script.getAttribute("data-main"); if (main) { window.addEventListener("load", function () { var comeon = new Comeon(script.getAttribute("data-path") || "/"); comeon.require(main); }); }
рд╡рд╣ рд╕рдм рд╣реИред рдЕрдм рд╣рдо рдмреНрд░рд╛рдЙрдЬрд░ рдХреА рддрд░рдл рдХреЙрдордирдЬрд╕ рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдореЙрдбреНрдпреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдЦреБрд╢реА рдореЗрдВ рдбреЗрдмреНрдпреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдкрде рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдФрд░ рдбреЗрдЯрд╛ рдореЗрдВ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЖрдирд╛ рд╣реЛрдЧрд╛:
<script src="http://rawgithub.com/avgaltsev/comeon/master/comeon.js" data-path="scripts/" data-main="main"></script>
рдпрд╛, рдпрджрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдЖрдкрдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдХрдИ рдореЙрдбреНрдпреВрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╛ рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрдИ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<script src="http://rawgithub.com/avgaltsev/comeon/master/comeon.js"></script> <script> window.onload = function () { var comeon = new Comeon("scripts/"); </script>