Node.js рдореЗрдВ ECMAScript рдореЙрдбреНрдпреВрд▓: рдПрдХ рдирдИ рдпреЛрдЬрдирд╛

Node.js рдореЗрдВ ECMAScript рдореЙрдбреНрдпреВрд▓ (ESM) рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╕рдорд░реНрдерди рд╕реНрдерд┐рддрд┐:


  • 12 рд╕рд┐рддрдВрдмрд░ 2017 рдХреЛ Node.js 8.5.0 рдореЗрдВ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ ESM рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред
  • рдЙрд╕рдХреЗ рдмрд╛рдж, Node.js рдХреА рддрдХрдиреАрдХреА рд╕рдВрдЪрд╛рд▓рди рд╕рдорд┐рддрд┐ рдиреЗ рдЖрдЧрд╛рдореА (рдЧреИрд░-рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ) рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рд▓рд╛рдкрддрд╛ рднрд╛рдЧреЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдЯреАрдо рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдЯреАрдо рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ред рдЗрд╕ рдЯреАрдо рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡реЗрдм рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЗрдВрдбрд╕реНрдЯреНрд░реАрдЬ (рдлреНрд░рдВрдЯреЗрдВрдб, рдмреИрдХреЗрдВрдб, рдЬреЗрдПрд╕ рдЗрдВрдЬрди рдЖрджрд┐) рдХреЗ рд▓реЛрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдЕрдХреНрдЯреВрдмрд░ рдореЗрдВ, рдореЛрдбрд▓реНрд╕ рдЯреАрдо рдиреЗ "рдиреНрдпреВ рдореЙрдбрд▓реНрд╕ рдЗрдВрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдкреНрд▓рд╛рди" рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ред рдпрд╣ рдкреЛрд╕реНрдЯ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд╣реИред


рдЕрд╡рд╕реНрдерд╛


рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреАрди рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ:


  • рдЪрд░рдг 1: рдПрдХ "рдиреНрдпреВрдирддрдо" рдХреЛрд░ рдмрдирд╛рдПрдВ - рдирд┐рдпрдореЛрдВ рдФрд░ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдореВрд▓ рд╕реЗрдЯ, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдиреНрдпреВрдирддрдо рдФрд░ рдирд┐рд╢реНрдЪрд┐рддред
  • рдЪрд░рдг 2 рдЖрдЧреЗ: рдХрд░реНрдиреЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред

рдПрдХ рдиреНрдпреВрдирддрдо рдХреЛрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд╛рдо рдХрд╛ рдЖрдзрд╛рд░ рд╣реЛрдЧрд╛ред рдирдИ рдбрд┐рдЬрд╝рд╛рдЗрди рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рднреА рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рджреЗрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдорд╛рди рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред


рдЪрд░рдг 1: Node.js рдореЗрдВ рдиреНрдпреВрдирддрдо рдХреЛрд░ рдИрдПрд╕рдПрдо рд╕рдорд░реНрдерди


рдореЙрдбреНрдпреВрд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╕рд░рд▓реАрдХрд░рдг


рдореЙрдбреНрдпреВрд▓ рдЯреАрдо рдХреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ "рдмреНрд░рд╛рдЙрдЬрд╝рд░ рддреБрд▓реНрдпрддрд╛" рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ: Node.js рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдХрд░реАрдм рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд░реНрдиреЗрд▓ рдЗрд╕реЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ (рдореЙрдбреНрдпреВрд▓ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП URL) рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:


  • рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╣ рд╣реИ
    • рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ
    • рдЖрдпрд╛рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрд╛ рддреЛ dir/index.mjs рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдпрд╛ package.json рдореЗрдВ main рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдПред dir/index.mjs )ред
  • ES рдореЙрдбреНрдпреВрд▓реНрд╕ рдмрд┐рд▓реНрдЯ-рдЗрди Node.js рдореЙрдбреНрдпреВрд▓ ( path рдФрд░ рдЗрд╕ рддрд░рд╣) рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рдкрд┐рдЫрд▓реЗ рдирд┐рдпрдо рдХреЗ рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рд╣реИрдВред
  • рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ .mjs рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ .mjs (рдЪрд░рдг 2 рджреЗрдЦреЗрдВ рдпрджрд┐ рдЖрдк рдЕрдиреНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдпрд╛рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ import рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдХреЙрдорди рдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓, рдЬреЗрдПрд╕рдПрди рдлрд╛рдЗрд▓реЗрдВ, рджреЗрд╢реА рдореЙрдбреНрдпреВрд▓ред

рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдХреЙрдорди рдЬреЗрдПрд╕рдПрд╕ рдЖрд╡рд╢реНрдпрдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд▓рд╛рдирд╛


  • рд╡рд░реНрддрдорд╛рди рдореЙрдбреНрдпреВрд▓ рдХрд╛ URL ( __filename рд╕реЗ __filename рд╕рдорд╛рди): import.meta.url
  • рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ import() рдХреЙрдордирдЬреЗрдПрд╕ рдореЗрдВ require() рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз): import()

рдЕрдиреБрдХреВрд▓рддрд╛


  • ES рдореЙрдбреНрдпреВрд▓ createRequireFromPath() рдорд╛рдзреНрдпрдо рд╕реЗ createRequireFromPath() рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, createRequireFromUrl() рдлрд╝рдВрдХреНрд╢рди):

 import {createRequireFromPath as createRequire} from 'module'; import {fileURLToPath as fromPath} from 'url'; const require = createRequire(fromPath(import.meta.url)); const cjsModule = require('./cjs-module.js'); 

  • рдХреЙрдорди рдЬреЗрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ import() рдорд╛рдзреНрдпрдо рд╕реЗ рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

рдЪрд░рдг 2 рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛рдПрдВ


  • рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ, рд╣рдо рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
    • "рдирдВрдЧреЗ" рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреИрд╕реЗ 'lodash' ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдЗрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рд╛рд╕реНрддреЛрдВ рдкрд░ рдореИрдк рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред
    • .mjs рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред рдЗрд╕рдореЗрдВ рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, .js рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ ES рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рд╣реИред
  • рдЪрд░рдг 3 рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓ рд▓реЛрдбрд░ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рддрд░реНрдХ рдореЗрдВ рдкреНрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ Node.js рдореЗрдВ ES рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?


  • рдзреНрд╡рдЬ рдХреЗ рдкреАрдЫреЗ: рдЕрднреА рдЙрдкрд▓рдмреНрдз рд╣реИ
    • рдЪреЗрддрд╛рд╡рдиреА: рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рддрдХ рдЪрд░рдг 1 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рд╕реА рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ (рдЬреИрд╕рд╛ рдХрд┐ Node.js 11.5.0)
  • рдмрд┐рдирд╛ рдЭрдВрдбреЗ рдХреЗ рдФрд░ рдЪрд░рдг 1 рдХреЗ рдЕрдиреБрд╕рд╛рд░: рдореЙрдбреНрдпреВрд▓ рдЯреАрдо рдЗрд╕реЗ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рд╣реИред рд╣рдо рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ Node.js 14 (рдЕрдкреНрд░реИрд▓ 2020) рдореЗрдВ рдзреНрд╡рдЬ рд╕реЗ рдЫреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди


  • рдореБрдЭреЗ рдирдП .mjs рдлрд╝рд╛рдЗрд▓ .mjs рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
    • рдИрдПрд╕рдПрдо рдФрд░ рдХреЙрдордирдЬреЗрдПрд╕ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдгрдп рдХреЗ рдЕрдкрдиреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реИрдВред рдПрдХ рдЕрд▓рдЧ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк ( рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА ) рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред
  • Node.js рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рддрд░рд╣ рдХреНрдпреЛрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
    • рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛрдб рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ Node.js рджреЛрдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИ
    • рдЗрд╕рд╕реЗ рдХреЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдмреИрдХрдПрдВрдб рдФрд░ рдлреНрд░рдВрдЯреЗрдВрдб рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рднреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
  • рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдпреЗ рд╕рднреА рдкреНрд░рддрд┐рдмрдВрдз рдХреНрдпреЛрдВ?
    • рд╕рдВрд░рдЪрдирд╛ (рд╕реНрдерд┐рд░ рдмрдирд╛рдо рдЧрддрд┐рд╢реАрд▓) рдФрд░ рд▓реЛрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐ (рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдмрдирд╛рдо рд╕рд┐рдВрдХреНрд░реЛрдирд╕) рдореЗрдВ ES рдФрд░ CommonJS рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рдХрд╛рдлреА рдордЬрдмреВрдд рдЕрдВрддрд░ рд╣реИрдВред рдмрд╛рдзрд╛рдПрдВ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИрдВ - рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ, рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рд╣реЛрдЧрд╛ред
  • рдпрд╣ рд╕рдм рдЗрддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХреНрдпреЛрдВ рдЪрд▓рддрд╛ рд╣реИ?
    • рдХрдИ рд╣рд┐рддрдзрд╛рд░рдХ рдпрд╣рд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (Node.js, npm, рдмреНрд░рд╛рдЙрдЬрд╝рд░реНрд╕, JS рдЗрдВрдЬрди, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ, TC39 рдФрд░ рдЕрдиреНрдп)ред рдЕрдЧрд░ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдИрдПрд╕-рдореЙрдбреНрдпреВрд▓ рдорд┐рд▓рддреЗ рд╣реИрдВ рдЬреЛ рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╢рд╛рдпрдж рдЗрдВрддрдЬрд╛рд░ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдЖрдИрдПрдордПрдЪрдУред

рдзрдиреНрдпрд╡рд╛рдж


рдЗрд╕ рдкреЛрд╕реНрдЯ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрд▓реНрд╕ рдмреЛрд░рд┐рдиреНрд╕ рдХреЛ рдзрдиреНрдпрд╡рд╛рджред


рдЖрдЧреЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрди


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


All Articles