Sinon: ESM рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдкрд░ рдЬрд╛рд╕реВрд╕реА рд╡рд┐рдлрд▓/рдмреЗрд╡рдЬрд╣ рдЕрд╡рд░реБрджреНрдз

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдордИ 2020  ┬╖  21рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sinonjs/sinon

рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
рдкрд╣рд▓реЗ, import * as foo from 'someModule' + spy(foo, 'default') рд╕рдВрдпреЛрдЬрди рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рдФрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдореИрдиреБрдЕрд▓ рдереНрд░реЛ рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдкрд░ рдЬрд╛рд╕реВрд╕реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдиреЙрдиред

рдкреНрд░рд╕рдВрдЧ (рдХреГрдкрдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВ):

  • рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрд╕реНрдХрд░рдг: 9.0.2

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд░реНрдн
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ TypeError: Cannot assign to read only property рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреБрд░рд╛рдиреЗ рд╕реНрдХреВрд▓ __defineGetter__ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкрд░рд┐рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЖрдк "рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм" рдмрдЯрди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдЖрд╕рд╛рди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред :)

рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЕрдиреБрд░рдХреНрд╖рдХ рд╣реВрдВ, рдФрд░ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред

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

рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЖрдкрдХреА рдФрд░ рдмрд╛рдХреА рд╕рдореБрджрд╛рдп рдХреА рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред

рд╕рднреА 21 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЙрд╕ рдкреБрд░рд╛рдиреЗ рдЕрдВрдХ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ __defineGetter__ рдХрд╛ рдХреЛрдИ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ, рдмрд╕ Object.defineProperty, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реНрдб рд╡реЗрдмрдкреИрдХ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВред рдпрд╣ рдирд╣реАрдВ рдХрд╣рдирд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐

рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рд╕реАрдзреЗ рд╡реЗрдирд┐рд▓рд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рдЖрдпрд╛рддрд┐рдд рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ (рдЧреИрд░-рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рдирд┐рд░реНрдпрд╛рдд рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ? рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рджреЛ рдлрд╛рдЗрд▓реЛрдВ some-module.mjs рдФрд░ file-that-overwrites.mjs рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ import рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдб рдХреЗ рд▓рд┐рдП .mjs рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рд╕рд┐рдиреЙрди рдХреЗ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░рддрд╛ рд╣реИред

FYI рдХрд░реЗрдВ рд╕реНрдЯрдм рдпрд╣рд╛рдБ [email protected]+ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

@ fatso83 рд╡рд╣ рдкреБрд░рд╛рдирд╛ рдореБрджреНрджрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИ (рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдпрд╣ рдирд╣реАрдВ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рдХрд┐рдпрд╛ рдерд╛)ред

рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐, рдИрдПрд╕рдПрдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╕рдордп рд╕рд┐рдиреЙрди рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдж рдореЗрдВ рдХреЛрдб Object.defineProperty(object, property, methodDesc) рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ TypeError: Cannot assign to read only property 'default' ред рд╣рд╛рд▓рд╛рдВрдХрд┐, __defineGetter__ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛:

object.__defineGetter__(property, methodDesc.value);

Buuuut, рдЬрдм рдореИрдВрдиреЗ рд╕рд┐рдиреЙрди рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ __defineGetter__ (рд╢рд╛рдпрдж рдПрдХ рд╕рдЦреНрдд рдореЛрдб рдпрд╛ рдХреБрдЫ?) рдкрд░ рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред

рддреЛ рдореИрдВ рд╢рд╛рдпрдж рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рд╡рд╕реНрддреБ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ (рдирдП рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде) рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХрдо рд╕реЗ рдХрдо рдХрд░рдиреЗ рдпреЛрдЧреНрдпред

FYI рдХрд░реЗрдВ рд╕реНрдЯрдм рдпрд╣рд╛рдБ [email protected]+ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдкрд┐рдЫрд▓реЗ рд╡рд░реНрдХрд┐рдВрдЧ рд╡рд░реНрдЬрди 3.8.3 . рдореЗрдВ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ

@zorji рдФрд░ @aelbore : рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХреНрдпреЛрдВ рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдирдП рдореБрджреНрджреЗ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдмрдирд╛рдПрдВ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ (рдХреИрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб, рд╕рдВрд╕реНрдХрд░рдг, рдЖрджрд┐)ред рд╣рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рдХрд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡рд┐рд╡рд░рдг рдЖрдкрдХреЗ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдЪрд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ред

рддреЛ рдореИрдВ рд╢рд╛рдпрдж рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рд╡рд╕реНрддреБ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ (рдирдП рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде) рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХрдо рд╕реЗ рдХрдо рдХрд░рдиреЗ рдпреЛрдЧреНрдпред

рдХреНрдпрд╛ рдпрд╣? рдПрдХ ES рдореЙрдбреНрдпреВрд▓ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рд░рдирдЯрд╛рдЗрдо, AFAIK рдкрд░ рдмрдВрдзреА рд╣реЛрддреА рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

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

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules

рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╣реАрдВ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдиреЗ (рдпрд╛ рдХрд┐рд╕реА рдиреЗ!) рдХрд┐рдпрд╛ред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЦрд░рд╛рдм рдмреЙрдЯред рдХреНрдпрд╛ рдЗрд╕ рдмреЗрд╡рдХреВрдлреА рдХреЛ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

@OmgImAlexis рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреБрд▓рд╛ рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ?

рджреЛрд╕реНрддреЛрдВ, рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрд┐рдВрджреБ рдкрд░ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдореВрд▓ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЬреЛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВред

рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдореБрджреНрджреЗ рдореЗрдВ рдСрд░реНрдереЛрдЧреЛрдирд▓ рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛, рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЕрд╡реИрддрдирд┐рдХ рдЦрд╛рд▓реА рд╕рдордп рдХреЛ рдЦрд░реНрдЪ рдХрд░рдирд╛ рдХрд╛рдлреА рдЪреБрдиреМрддреАрдкреВрд░реНрдг рд╣реИред

рд╣рдореЗрдВ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдореБрджрд╛рдп рдореЗрдВ рд╕рд┐рдиреЙрди (рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреВрд▓) рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕реЗ @ fatso83 рдиреЗ рдХрд╣рд╛, рд╣рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ ред

рдЗрд╕ рдЕрдВрдХ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдФрд░ рд╡рд┐рд╖рдп-рд╡рд╕реНрддреБ рд╕реЗ рдкрд░реЗ рдЯрд┐рдкреНрдкрдгреА рд╣рдЯрд╛ рджреА рдЬрд╛рдПрдЧреАред

рдЗрд╕ рдЕрдВрдХ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдФрд░ рд╡рд┐рд╖рдп-рд╡рд╕реНрддреБ рд╕реЗ рдкрд░реЗ рдЯрд┐рдкреНрдкрдгреА рд╣рдЯрд╛ рджреА рдЬрд╛рдПрдЧреАред

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЖрдк "рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм" рдмрдЯрди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдЖрд╕рд╛рди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред :)

рдПрдХреЗ рд╕реЙрд░реА, рдореИрдВ рдХрд╛рдо рдореЗрдВ рдмрд╣реБрдд рд╡реНрдпрд╕реНрдд рд╣реЛ рдЧрдпрд╛ред рдореИрдВ рдХреБрдЫ рд╣рдлрд╝реНрддреЗ рдореЗрдВ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ЁЯШБ

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЖрдк "рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм" рдмрдЯрди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░ рдЖрд╕рд╛рди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред :)

рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЕрдиреБрд░рдХреНрд╖рдХ рд╣реВрдВ, рдФрд░ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред

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

рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЖрдкрдХреА рдФрд░ рдмрд╛рдХреА рд╕рдореБрджрд╛рдп рдХреА рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЦрд░рд╛рдм рдмреЙрдЯред

@jshado1 рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдЦреБрд▓рд╛ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ @ jshado1 рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдиреЗ рдХрднреА рд╡реИрдирд┐рд▓рд╛ рдЕрди-рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реНрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдмреИрдмреЗрд▓/рд╡реЗрдмрдкреИрдХ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рджреМрд░рд╛рди рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ (рдХреМрди рд╕реЗ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ)ред рдереНрд░реЛ рдХреНрд▓реЙрдЬ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ _рдЕрдиреНрдпрдерд╛ рдереНрд░реЛ_ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЬрдм рдЖрдкрдиреЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рд░рдирдЯрд╛рдЗрдо/рдореЙрдбреНрдпреВрд▓ рд▓реЛрдбрд░ рдЬреИрд╕реЗ esm рдлрд╝реАрд▓реНрдб рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ред

рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд▓рдд рд╣реИ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ node_modules/sinon/lib/sinon/spy.js рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдереНрд░реЛ рдХреНрд▓реЙрдЬ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рд╡рд╛рдкрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВред рдмреБрд░рд╛ рди рдорд╛рдиреЛред рд╡рд╛рджрд╛: рдЧреЗрдВрдбрд╛: :рдЗрдВрджреНрд░рдзрдиреБрд╖:

@RyanCavanaugh (https://github.com/microsoft/TypeScript/issues/38568#issuecomment-628860591) рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

рдпрджрд┐ рдЖрдк commonjs рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди ES рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд/рдирд┐рд░реНрдпрд╛рдд рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ TS рдЕрднреА рднреА рдЖрдкрдХреЛ ES рдореЙрдбреНрдпреВрд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рдХреЛрдб рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдХрд╛рдиреВрдиреА ES рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ sinon.stub рдорд╛рдзреНрдпрдо рд╕реЗ) рдПрдХ рдкрдардиреАрдп рд╕рдВрдкрддреНрддрд┐ ( import * as name рд╕рд╛рде рдЖрдпрд╛рддрд┐рдд рдХрд┐рд╕реА рдЪреАрдЬ рдХреЗ рдЧреБрдг рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдирд╣реАрдВ рд╣реИрдВ)ред рдЗрд╕реЗ рдХрднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред

рдЬреЛ рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рдмрдВрдж рдХрд░рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ рдХрд┐ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдЪрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдЙрд╕ рдЪрд░рдг рдХреЛ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ, рдЖрджрд┐ред рдпрджрд┐ рдпрд╣ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рдИрдПрд╕рдПрдо рд╕реНрдкреЗрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реИ, рддреЛ _it рдХреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП_ рдЬреИрд╕рд╛ рдХрд┐ ES рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрди рдирд┐рд░реНрдпрд╛рддреЛрдВ рд╕реЗ рдмрдВрдзреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБрдПрдВ рдирд╣реАрдВ)ред

@mroderick @ fatso83 рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рд╡рд╣ рд╕рдордп рдХрднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рдФрд░ рддрдм рд╕реЗ рдХрд╛рдо рдкрд░ рдкрдЯрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрдИ рдорд╣реАрдиреЗ рд╣реЛ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╕реНрдореГрддрд┐ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ, рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ _very_ рдЕрд▓реНрдкрд╡рд┐рдХрд╕рд┐рдд (рдФрд░ рдЧрдВрджрд╛ AF) рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдерд╛, рдлрд┐рд░ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _probably_ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ: рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдИрдПрдордПрд╕ рд▓реЛрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛: https://github.com/nodejs/node/blob/master/doc/api/esm .рдПрдордбреА#рд▓реЛрдбрд░

рдпреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрд╕реНрдерд┐рд░ рд╣реИрдВ (рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬрд▓реНрдж рд╣реА рдмрджрд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ), рдЗрд╕рд▓рд┐рдП рд╕рдВрднрд╡рдд: рддрдм рддрдХ рд░реЛрдХреЗрдВ рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рди рд╣реЛ рдЬрд╛рдПрдВред рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдЬрдм рд╡реЗ рдРрд╕рд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣реА рд░рд╛рд╕реНрддрд╛ рд╣реИред

рдЕрджреНрдпрддрди: рдЗрд╕ рдкрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдиреЛрдбрдЬ/рдиреЛрдб#36396 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред

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

// const mocksMap = { 'serviceA.js': 'serviceA.mock.js' };

const mock = mocksMap[importPath]; // note: it's not called `importPath` in the loader hooks
if (mock) // тАж

рдФрд░/рдпрд╛, esm рд▓реЛрдбрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо (рддреНрд╡рд░рд┐рдд n рдЧрдВрджрд╛ рдЙрджрд╛рд╣рд░рдг) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдХрд▓реА рдорд┐рд▓рд╛рди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

const ext = path.ext(importPath);
const filename = path.basename(importPath, ext);
const mockFile = await import(`${filename}.mock${ext}`);

if (mockFile) // тАж

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

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

kbirger picture kbirger  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

JakobJingleheimer picture JakobJingleheimer  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

optimatex picture optimatex  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

byohay picture byohay  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

akdor1154 picture akdor1154  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ