Jest: рдореЗрдЯрд╛: ES рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕рдорд░реНрдерди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдЬрдире░ 2020  ┬╖  131рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/jest

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛: https://jestjs.io/docs/en/ecmascript-modules

рдИрдПрд╕рдПрдо рд╕рдорд░реНрдерди рдиреЛрдб 12 рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╢рд╛рдпрдж рдЕрдкреНрд░реИрд▓ рд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ https://github.com/nodejs/node/pull/29866#issuecomment-574055057) рдФрд░ рдпрд╣ рдиреЛрдб 13.2 рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реИ рдпрд╣ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рд╣рдо рдЬреЗрд╕реНрдЯ рдореЗрдВ рдореВрд▓ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЬреЗрд╕реНрдЯ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреМрди рд╕реА рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдИрдПрд╕рдПрдо рд╕рдорд░реНрдерди рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╣рд▓/рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ # 4842 рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЪрд░реНрдЪрд╛ рдХрд╛ рдореБрджреНрджрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА _not_ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдХрд┐ рд╣рдо рдиреАрдЪреЗ рджреА рдЧрдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдкреИрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдХреГрдкрдпрд╛ рдХрд┐рд╕реА рднреА рд╕рдорд╛рдзрд╛рди/рдЪрд░реНрдЪрд╛ рдХреЛ рдЕрд▓рдЧ рдореБрджреНрджреЛрдВ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВред рдпрд╣ рднреА рдмреЗрдЭрд┐рдЭрдХ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдИрдПрд╕рдПрдо рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рднреА рд╕реВрдЪреА рд╕реЗ рдЧрд╛рдпрдм рд╣реИ!

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬреЗрд╕реНрдЯ vm рдПрдкреАрдЖрдИ (https://nodejs.org/api/vm.html) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рд▓реЗрдЦрди рдХреЗ рд╕рдордп (рдиреЛрдб v13.6) рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рдИрдПрд╕рдПрдо рднрд╛рдЧреЛрдВ рдХреЛ рдЕрднреА рднреА рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ( --experimental-vm-modules )ред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ ESM рдХреЛ рдлрд╝реНрд▓реИрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рд╕рдордп рдереЛрдбрд╝рд╛ рдорд┐рдереНрдпрд╛ рдирд╛рдо рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдбрдмреНрд▓реНрдпреВрдЬреА рдХреЛ рдлреАрдбрдмреИрдХ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

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


  • [x] рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рд╣реА рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪрд▓рд╛рдирд╛

рд╣рдо рдХрд┐рд╕реА рджрд┐рдП рдЧрдП vm.Context (рдЬреЗрдПрд╕рдбреАрдУрдПрдо рдпрд╛ рдиреЛрдб рдХреЛрд░ рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП) рдХреЗ рднреАрддрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдХрд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ ESM рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди context рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рди рдХрд┐ рдХреЗрд╡рд▓ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордпред рдореИрдВрдиреЗ #9428 рдЦреЛрд▓рд╛ рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ API рдХреЛ JestEnvironment рдЬреЛрдбрд╝рддрд╛ рд╣реИред

  • [x] рдЧреНрд▓реЛрдмрд▓реНрд╕

expect , test , beforeEach рдЖрджрд┐ рдЕрднреА рднреА рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗ, рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред jasmine рд╡реИрд╢реНрд╡рд┐рдХ рднреА рдпрд╣рд╛рдВ рд░рд╣реЗрдЧрд╛ред

  • [x] jest "рд╡реИрд╢реНрд╡рд┐рдХ" рд╕рдВрдкрддреНрддрд┐

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╣реАрдВ рд╣реИ - рдЗрд╕реЗ рдореЙрдбреНрдпреВрд▓ рд╕реНрдХреЛрдк рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдИрдПрд╕рдПрдо рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рджрд╛рдпрд░рд╛ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЗрд╕реЗ import.meta рдЬреЛрдбрд╝рдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИ - initializeImportMeta рдирд╛рдордХ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣рд╛рдВ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ import {jest} from '@jest/globals' рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдпрд╛ рдЬрд╛рдПред рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдЕрднреА рднреА import.meta рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

  • [ ] jest.(do|un)mock

рдЪреВрдВрдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп ESM рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ "рдЪрд░рдг" рд╣реЛрддреЗ рд╣реИрдВ, рд╕реНрдерд┐рд░ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП jest.mock рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВред

jest.mock рдХреЙрд▓ рдлрд╣рд░рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ ESM рдореЗрдВ рдХреЛрдИ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред рд╣рдо import 'thing' рдХреЛ import('thing') рдмрджрд▓рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЙрддреНрдерд╛рдкрди рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ async рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖-рд╕реНрддрд░ await рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢рд╛рдпрдж рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдХрд▓реНрдк рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЖрдХреНрд░рд╛рдордХ рд╣реИред рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ - рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ jest.mock рд╣рд░ рдЪреАрдЬ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

  • [ ] jest.requireActual

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдИрдПрд╕рдПрдо рдореЗрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рд╣рдореЗрдВ jest.importActual рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ requireActual CJS рд╣рдореЗрд╢рд╛

  • [рдПрдХреНрд╕] import.meta

рдиреЛрдб рдХреА рдПрдХрдорд╛рддреНрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ url рд╣реИ (рдЕрднреА рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо)ред рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреЗрд╕реНрдЯ рдореЗрдВ рднреА рдЖрдмрд╛рдж рд╣реИред рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп identifier рдмрдЬрд╛рдп filename рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди url рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ filename рдкрд╛рд░рд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ pathToFileURL ред

import.meta.resolve рд▓рд┐рдП рдПрдХ рдЦреБрд▓рд╛ рдкреАрдЖрд░ рднреА рд╣реИ: https://github.com/nodejs/node/pull/31032

  • [рдПрдХреНрд╕] import thing from 'thing'

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

  • [рдПрдХреНрд╕] import('thing')

рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдКрдкрд░ рдЬреИрд╕рд╛ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп importModuleDynamically рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред jest.mock , jest.resetModules рдЖрджрд┐ рдХрд╛ рднреА рдЕрдзрд┐рдХ рд╕рдлрд╛рдИ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдХрд╛рдлреА рд╣рдж рддрдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рдпрд╣ рдЙрд╕реА рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ vm.Script рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  • [ ] рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рджреМрд░рд╛рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛

рдЕрднреА рдпрд╣ рдПрдХ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рдорд┐рд▓рд╛), рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ ESM рдХреЗ рд╕рд╛рде рд╕рд╣реА рд╣реЛред рдХреНрдпрд╛ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ? рд╣рдореЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЕрднреА рднреА рдЕрдЪреНрдЫреА рджрд┐рдЦ рд░рд╣реА рд╣реИрдВред

  • [рдПрдХреНрд╕] module.createRequire

рдИрдПрд╕рдПрдо рд╕реЗ рд╕реАрдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП #9426 рдЦреЛрд▓ рджрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ESM рд╕рдорд░реНрдерди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: #9469 . рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛

  • [ ] module.syncBuiltinESMExports

https://nodejs.org/api/modules.html#modules_module_syncbuiltinesmexports. рдХреНрдпрд╛ рд╣рдо рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдиреЛ-рдСрдк рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ? рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬреЗрд╕реНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдмрд┐рд▓реНрдЯрд┐рди рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реИрдВрдбрдмреЙрдХреНрд╕ рддреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: # 9469 рдиреЗ рдЗрд╕реЗ рдиреЛ-рдСрдк рдмрдирд╛ рджрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИ?

  • [ ] рдкрддрд╛ рд▓рдЧрд╛рдПрдБ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ ESM рдпрд╛ CJS рдореЛрдб рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ

рдореЙрдбреНрдпреВрд▓ рдХреЗ package.json type рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ: https://nodejs.org/api/esm.html#esm_enblingред рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдХреЙрдиреНрдлрд┐рдЧ рдлреНрд▓реИрдЧ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

https://github.com/nodejs/modules/issues/393

  • [рдПрдХреНрд╕] moduleNameMapper

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣ рд╕рднреА рд╕рдВрдХрд▓реНрдк рддрд░реНрдХ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реИред

  • [рдПрдХреНрд╕] jest.config.mjs

#9291 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо jest.config.cjs рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ - рдХреНрдпрд╛ рд╣рдореЗрдВ .mjs рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рд╢рд╛рдпрдж import('path/to/configFile.mjs') рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрд╕рд┐рдВрдХ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рд╣реИ? рдЬреЗрд╕реНрдЯ 25 рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди async рдмрдирд╛рдиреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЬреЗрд╕реНрдЯ 25 рдореЗрдВ рдИрдПрд╕рдПрдо рдХреЗ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реЛрдзрдХ рдирд╣реАрдВ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: #9431

  • [ ] рдкреИрдХреЗрдЬ рдирд┐рд░реНрдпрд╛рдд

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

  • [ ] JSON/WASM рдореЙрдбреНрдпреВрд▓

https://nodejs.org/api/esm.html#esm_experimental_json_modulesред рдХреНрдпрд╛ рд╣рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ? рд╢рд╛рдпрдж, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ json ред рд╣рдорд╛рд░реЗ рд▓рд┐рдП import thing from './package.json' рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рддреБрдЪреНрдЫ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд▓рд┐рдВрдХрд┐рдВрдЧ рдЪрд░рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдиреЛрдб рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рд╣рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

  • [x] рдХреЛрдб рдХрд╡рд░реЗрдЬ

рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ рдХреНрдпрд╛? рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрднреА рднреА рд╕реНрд░реЛрдд рдХреЛ рдмреЗрдмрд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рд╢рд╛рдпрдж рдпрд╣ import рдХрдердиреЛрдВ рд╕реЗ рднреНрд░рдорд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд╢рд╛рдпрдж рдирд╣реАрдВ) рдФрд░ V8 рдХрд╡рд░реЗрдЬ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдореЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

  • [ ] рдПрд╕рд┐рдВрдХреНрд╕ рдХреЛрдб рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди

рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдХреЛрдИ рдЕрд╡рд░реЛрдзрдХ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рдВрдХ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо _can_ async рд░реЗрдЬреЛрд▓реНрдпреВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ npm рдХреЗ resolve рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА async рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред #9505 рджреЗрдЦреЗрдВред

  • [] рдПрд╕рд┐рдВрдХ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди

рдКрдкрд░ рдХреЗ рд╕рдорд╛рди, рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред @jest/transformer рдХреЛ рдЕрдиреНрдп рдкрд░рд┐рд╡реЗрд╢реЛрдВ рдореЗрдВ рднреА рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред #9504 рджреЗрдЦреЗрдВред

  • [ ] рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди

#5163 рдХреЗ рдХрд╛рд░рдг рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ extraGlobals рд╡рд┐рдХрд▓реНрдк рд╣реИ - рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЕрдм ESM рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдиреЛрдб рдХреЗ рд╕рд╛рде рдЦреЛрд▓ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ: https://github.com/nodejs/node/issues/31658

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

рдореБрдЭреЗ #9772 рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╣реА рдмреБрдирд┐рдпрд╛рджреА рд╕рдорд░реНрдерди рдорд┐рд▓рд╛ рд╣реИред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдХрдИ рдЬреНрдЮрд╛рдд рд╕реАрдорд╛рдПрдБ рд╣реИрдВ (рд╕рдмрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЛрдИ jest рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдорд░реНрдерди рдФрд░ CJS рдФрд░ ESM рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╕рдордп рдЯреВрдЯреЗ рд╢рдмреНрджрд╛рд░реНрде рдирд╣реАрдВ), рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ _something_ рд╣реИред рдпрд╣ рдЬреЗрд╕реНрдЯ рдХреА рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдЧреА (рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА, рдХреЗрд╡рд▓ #9806 рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз)

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

рдореБрдЭреЗ #9772 рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╣реА рдмреБрдирд┐рдпрд╛рджреА рд╕рдорд░реНрдерди рдорд┐рд▓рд╛ рд╣реИред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдХрдИ рдЬреНрдЮрд╛рдд рд╕реАрдорд╛рдПрдБ рд╣реИрдВ (рд╕рдмрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЛрдИ jest рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдорд░реНрдерди рдФрд░ CJS рдФрд░ ESM рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╕рдордп рдЯреВрдЯреЗ рд╢рдмреНрджрд╛рд░реНрде рдирд╣реАрдВ), рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ _something_ рд╣реИред рдпрд╣ рдЬреЗрд╕реНрдЯ рдХреА рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдЧреА (рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА, рдХреЗрд╡рд▓ #9806 рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз)

25.4.0 рдХреЛ рдкрд╣рд▓реЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдКрдкрд░ рдмрддрд╛рдП рдЧрдП #9772 рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ #9842 рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред _theory_ рдореЗрдВ CJS рдФрд░ ESM рдХреЛ рдорд┐рд▓рд╛рдиреЗ рд╕реЗ рдЕрдм рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (ЁЯдЮ)ред

рдПрдХ рдореБрдЦреНрдп рд▓рд╛рдкрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ jest рд╡рд╕реНрддреБ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣реА рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ import.meta рд╕реЗ рдЪрд┐рдкрдХрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕реЗ import {jest} from '@jest/globals' рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА!

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

  1. рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк import рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ transform: {} рд╕реЗрдЯ рдХрд░реЗрдВ рдпрд╛ рдЕрдиреНрдпрдерд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ babel рдлрд╝рд╛рдЗрд▓ рдХреЛ CJS рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ modules рд╕реЗ рдмрдЪрдирд╛
  2. node@^12.16.0 || >=13.2.0 --experimental-vm-modules рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдБ
  3. jest-environment-node рдпрд╛ jest-environment-jsdom-sixteen рд╕рд╛рде рдЕрдкрдирд╛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ

рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдВ! рдпрджрд┐ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдпрд╣ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╛рди рдХреЛрдб (рдХрд┐рд╕реА рднреА рдкрд░реАрдХреНрд╖рдг рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдХреЛ рдШрдЯрд╛рдХрд░) Node. рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдореЗрдВ https://nodejs.org/api/esm.html _alot_ рдкрдврд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореБрдЭрд╕реЗ рдХреБрдЫ рдЫреВрдЯ рдЧрдпрд╛ рд╣реИред

рдПрдХ рдореБрдЦреНрдп рд▓рд╛рдкрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЗрд╕реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣реА рд╣реИред рдореИрдВрдиреЗ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ import.meta рд╕реЗ рдЪрд┐рдкрдХрд╛ рджреЗрдВ рдпрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕реЗ '@jest/globals' рд╕реЗ рдЖрдпрд╛рдд {jest} рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рд╣рд╛рдБ, рдореИрдВрдиреЗ рдПрдХ @jest/globals рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рд╛ рд╣реИ (рдФрд░ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдЬреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ _also_ рдЗрд╕реЗ import.meta рдкрд░ рдмреЗрдирдХрд╛рдм рдХрд░реЗрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдУрд░ рдЭреБрдХрд╛рд╡ рд╣реИ, рдореБрдЦреНрдпрддрдГ рдЪреВрдВрдХрд┐ рдмрд╛рдж рдореЗрдВ рд╣рдЯрд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ (рдФрд░ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ)

рд╕реНрдкрд╖реНрдЯ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП +1, рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╡рд░реНрдмреЛрдЬрд╝ рд╣реИ рд▓реЗрдХрд┐рди рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ

рдореБрдЭреЗ рдпрд╣ рдиреЛрдб 13.2 рдФрд░ рдЬреЗрд╕реНрдЯ 25.4 рдореЗрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ: ES Modules are only supported if your test environment has the getVmContext function рдореБрдЭреЗ рдХреНрдпрд╛ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ?

@zandaqo рдУрд╣ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЙрд╕ рдмрд┐рдВрджреБ рдХреЛ рднреВрд▓ рдЧрдпрд╛ред рдКрдкрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ

jest-environment-node рдпрд╛ jest-environment-jsdom-sixteen рд╕рд╛рде рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ

ReferenceError: jest is not defined рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ @jest/globals . рдХреЗ рд▓рд╛рдкрддрд╛ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реИ

рд╣рд╛рдВ, рдЬреИрд╕рд╛ рдХрд┐ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рдЖрдк jest рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдореЛрдХреНрд╕ рднреА рд╢рд╛рдпрдж рдЯреВрдЯреЗ рд╣реБрдП рд╣реИрдВ, рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ

рдореИрдВрдиреЗ e2e рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ ( e2e/native-esm/__tests__/native-esm.test.js ) рдФрд░ рдЗрд╕ рдЕрдВрдХ рдореЗрдВ рдЬреЛ рджреЗрдЦрд╛ рдЙрд╕рд╕реЗ рдПрдХ рдмрд╣реБрдд рд╣реА рдмреБрдирд┐рдпрд╛рджреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрдХрд▓рд┐рдд рдХреА рд╣реИред рдФрд░ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ ЁЯЩГрдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдореМрдХреЗ рд╕реЗ рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рд╣реИ?

https://drive.google.com/file/d/1vyDZjsVKOTu6j55QA11GjO9E7kM5WX8_/view?usp=sharing

  • [x] рдордЬрд╝рд╛рдХ рд╕рдВрд╕реНрдХрд░рдг 25.4.0
  • [x] рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг v13.12.0
  • [x] package.json рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдЬреЗрд╕реНрдЯ рд╡рд┐рдХрд▓реНрдк рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдХреЛрдИ рднреА рдмреЗрдмреЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ

рдирдореВрдирд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдирд╛ (рдХреЗрд╡рд▓ double рдлрд╝рдВрдХреНрд╢рди рдЖрдпрд╛рдд рдХрд░рдирд╛ рдФрд░ double(2) рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛):

npm run main

> [email protected] main /Users/ilya/Projects/jest-esm
> node src/main.js

(node:16961) ExperimentalWarning: The ESM module loader is experimental.
4

рдбрдмрд▓ рдлрдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдЯреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд░рдирд┐рдВрдЧ рдЬреЗрд╕реНрдЯ:

npm run test

> [email protected] test /Users/ilya/Projects/jest-esm
> jest

 FAIL  __tests__/native-esm.test.js
  тЧП Test suite failed to run

    Jest encountered an unexpected token

    This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.

    By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".

    Here's what you can do:
     тАв To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
     тАв If you need a custom transformation specify a "transform" option in your config.
     тАв If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.

    You'll find more details and examples of these config options in the docs:
    https://jestjs.io/docs/en/configuration.html

    Details:

    /Users/ilya/Projects/jest-esm/__tests__/native-esm.test.js:8
    import {double} from '../src/index.js';
    ^^^^^^

    SyntaxError: Cannot use import statement outside a module

      at Runtime._execModule (node_modules/jest-runtime/build/index.js:1074:58)

Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        0.542s
Ran all test suites.

рдЖрдкрдХреЛ --experimental-vm-modules рд╕рд╛рде рдиреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдпрд╛ рддреЛ рдЖрдк .mjs рдпрд╛ "type": "module" рдореЗрдВ package.json рдлрд╛рдЗрд▓ рдХрд░реЗрдВред

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

@SimenB рдУрд╣ рд╡рд╛рд╣ --experimental-vm-modules рдФрд░ --experimental-modules ред рдореИрдВ рдЗрд╕ рддрдереНрдп рд╕реЗ рднреНрд░рдорд┐рдд рдерд╛ рдХрд┐ --experimental-modules рдХреБрдЫ рдиреЛрдб 13 рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

TLDR: node --experimental-vm-modules node_modules/jest/bin/jest.js рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рд╣рд╛рдБ, OP . рд╕реЗ

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬреЗрд╕реНрдЯ vm рдПрдкреАрдЖрдИ (https://nodejs.org/api/vm.html) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рд▓реЗрдЦрди рдХреЗ рд╕рдордп (рдиреЛрдб v13.6) рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рдИрдПрд╕рдПрдо рднрд╛рдЧреЛрдВ рдХреЛ рдЕрднреА рднреА рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ( --experimental-vm-modules )ред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ ESM рдХреЛ рдлрд╝реНрд▓реИрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рд╕рдордп рдереЛрдбрд╝рд╛ рдорд┐рдереНрдпрд╛ рдирд╛рдо рд╣реИред

рдмрдврд╝рд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрджреНрдпрдкрд┐!

(рдореИрдВ рдЗрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реВрдВрдЧрд╛)

@SimenB рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЕрдм рддрдХ рджреЛ рдореБрджреНрджреЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред

рдЕрдВрдХ 1

  • ESM рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ ESM рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрдпрд╛рдд рдХрд░рддреА рд╣реИ (fn рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ)
  • рдкрд░реАрдХреНрд╖рдг рдХреА рдЬрд╛ рд░рд╣реА ESM рдлрд╝рд╛рдЗрд▓ рдПрдХ рдкреИрдХреЗрдЬ рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрдпрд╛рдд рдХрд░рддреА рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ CJS рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ
  • рддреНрд░реБрдЯрд┐ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо: ReferenceError: module is not defined CJS рдкреИрдХреЗрдЬ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ

рддреЛ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдПрдХ рдЖрдпрд╛рдд рд╡рд┐рд╡рд░рдг рдПрдХ ES рдореЙрдбреНрдпреВрд▓ рдпрд╛ рдПрдХ CommonJS рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗ рд╕рдХрддрд╛ рд╣реИ

рдРрдк рдЪрд▓рд╛рддреЗ рд╕рдордп рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред CJS рд╕реЗ рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рдд рдХреЗрд╡рд▓ createRequire рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдХреЗрд╡рд▓ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдВрдХ 2

рдЬрдм рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд╛рд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдорд╛рд░ рд░рд╣рд╛ рд╣реВрдВ:

TypeError: _vm(...).SyntheticModule is not a constructor

      at Runtime._importCoreModule (node_modules/jest-runtime/build/index.js:1198:12)

рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рд╡рд░рдг

  • рдиреЛрдб 12.14.1
  • рдЬреЗрд╕реНрдЯ рдФрд░ рдмреЗрдмреЗрд▓-рдЬреЗрд╕реНрдЯ 25.4.0
  • targets: { node: 12 } рдФрд░ 2 рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдирд╡реАрдирддрдо рдмреИрдмреЗрд▓: babel-plugin-transform-import-meta рдФрд░ rewire-exports ред ( import-meta рдкреНрд▓рдЧрдЗрди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред)
  • testEnvironment: "node" рдХрд╛рдлреА рд╣рдж рддрдХ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ
  • node --experimental-vm-modules node_modules/jest/bin/jest.js

рдЕрдЧрд░ рдПрдХ рдкреНрд░рдЬрдирди рд░реЗрдкреЛ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

рдзрдиреНрдпрд╡рд╛рдж @aldeed!

рдореИрдВ рдЕрдВрдХ 1 рдХреЛ рджреЗрдЦреВрдВрдЧрд╛, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрдЧ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: #9850 . рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЕрдВрдХ 2 рдХреЛ рдиреЛрдб 12.16.0 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: https://nodejs.org/docs/latest-v12.x/api/vm.html#vm_class_vm_syntheticmodule

рдореИрдВ рдЬреЗрд╕реНрдЯ рдореЗрдВ рдЪреЗрдХ рдмрджрд▓ рджреВрдВрдЧрд╛ (рдЕрднреА рдпрд╣ vm.SourceTextModule рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ SyntheticModule рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред

рдкреБрд╖реНрдЯрд┐ рдХреА рдХрд┐ 12.16.0 рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рд╕реЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ 2 рдареАрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдлрд┐рдХреНрд╕ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╢реНрдпреВ 1 рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ред рдЕрдиреНрдпрдерд╛ рдЖрдЧреЗ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП jest рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо, @SimenB! рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдЖрдЬрдорд╛ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде рдореБрджреНрджреЛрдВ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдпрд╣ рд╡рд╣ рддреНрд░реБрдЯрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ:

Module status must not be unlinked or linkingError [ERR_VM_MODULE_STATUS]: Module status must not be unlinked or linking

рдЕрдЧрд░ рдореИрдВ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ рддреЛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓реЗрдЧрд╛ (рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЕрд╕рдлрд▓)ред рд╡рд╣реА рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЛрдЪрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЬрд┐рд╕рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдИрдПрд╕рдПрдо рд╕рдорд░реНрдерди рд╢рд┐рдк рдХрд┐рдпрд╛ рд╣реИ)ред

рдпрджрд┐ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/beejunk/firn.js/blob/switch-to-jest/lib/renderPage.js#L43 -L55

рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдпрд╣рд╛рдБ рд╣реИ: https://github.com/beejunk/firn.js/blob/switch-to-jest/test/build.test.jsред рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдореЛрдЪрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬреЛ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛред

рдзрдиреНрдпрд╡рд╛рдж @рдмреАрдЬрдВрдХ! рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ import s рдХреЗ рдмреАрдЪ рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрд╕реА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреА рд╣реИред рдпрд╣ _рд▓рдЧрддрд╛ рд╣реИ_ рдХрд┐ рдЖрдк рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд╛рд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдЖрдЬ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджреВрдВрдЧрд╛, рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: # 9858 рдореЗрдВ рдлрд┐рдХреНрд╕реНрдбред рдлрд┐рдХреНрд╕ рдХреЛ рдЕрдкрдиреЗ рд░реЗрдкреЛ рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛:
image

рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд╣реИ? node --experimental-vm-modules node_modules/jest/bin/jest.js рд╡рд╣реА SyntaxError: Cannot use import statement outside a module node --experimental-vm-modules node_modules/jest/bin/jest.js рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдореЗрд░реЗ package.json рдореЗрдВ "type": "module" ред

рдмреЗрдмрд▓.config.cjs

module.exports = {
  presets: [
    '@babel/preset-typescript',
  ],
};

jest.config.cjs

module.exports = {
  testEnvironment: 'jest-environment-node',
  transform: {},
};

@dandv рдЖрдк рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ https://github.com/facebook/jest/pull/9772/files#r407255029

рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдЧреИрд░-рдЬреЗрдПрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ

@ рд╕рд┐рдореЗрдирдмреА : #9860ред рдирд┐рдЧрд╛рд╣ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@aldeed @beejunk 25.5.0 рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдЖрддреЗ рд░рд╣реЗрдВ

рдУрд╣, рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрд╕рдореЗрдВ рдЖрдк рдореЗрдВ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП import { jest } from '@jest/globals' рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдЙрд╕ . рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рдЗрд╕ рд╕рдм рдкрд░ рддреНрд╡рд░рд┐рдд рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @SimenB! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдФрд░ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рд╣реВрдВред

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

Cannot find module '/path/to/project/components/BasePage.js?cache=0' from 'renderPage.js'

рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ: https://github.com/beejunk/firn.js/blob/switch-to-jest/lib/renderPage.js#L55 -L56

рдЕрдЧрд░ рдореИрдВ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ рддреЛ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд▓рдЧрд╛рддрд╛рд░ рдирд╣реАрдВред рдпрджрд┐ рдореИрдВ рдПрдХ рдПрдХрд▓ рд╕реВрдЯ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, npm test -- test/build.test.js ) рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдореИрдВ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рд╡реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдЕрд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдореИрдВ рдЕрднреА рднреА рдЕрд╕рдВрдЧрдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЦреБрджрд╛рдИ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рдХреНрд╡реЗрд░реА рдкрд░рдо рд╕рдорд╕реНрдпрд╛ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реВрдВрдЧрд╛ред

@beejunk рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред #6282 рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдФрд░ рд╕рд╛рдорд╛рди рдХреЛ рдХреНрд╡реЗрд░реА рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рддреЛ рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреНрд╡реЗрд░реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдФрд░ # 6282 рдХреЛ рдЙрд╕ рдХреНрд╡реЗрд░реА рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рджреЗрдВред

рдореИрдВрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреИрд╢ рдХреЛ рдХреНрд╡реЗрд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдХреЛрдб рдЬреЛрдбрд╝рд╛ рд╣реИ: https://github.com/facebook/jest/blob/d425a49bd575e7167bc786f3c4f2833589091fa1/packages/jest-runtime/src/index.ts#L330 -L334

рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдХреЛрдб рдХрднреА рднреА рдЗрд╕реЗ рдХрд┐рд╕реА рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ resolvePath.split('?') рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рднреА рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

@beejunk рдХреНрд╡реЗрд░реА рдЪреАрдЬрд╝ 25.5.1 рдореЗрдВ рддрдп рдХреА рдЧрдИред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рджреВрд╕рд░реЗ рдореБрджреНрджреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ

рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ рд╣рд╛рд▓рд╛рдВрдХрд┐ 25.X рдореЗрдВ рдареАрдХ рдирд╣реАрдВ рд╣реБрдЖред

рдореИрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛:

  • рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реЗрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╣реИ
  • рдЙрд╕ рд╕реЗрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреИрд╕реЗ рдХрд┐:
    { default: generator } = require(path.resolve(f))
  • f рдЕрдВрджрд░ рд╕рдм рдХреБрдЫ "рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЖрдпрд╛рдд рддреНрд░реБрдЯрд┐" рдХреЗ рдХрд╛рд░рдг рдкрд╛рд░рджрд░реНрд╢реА рдирд╣реАрдВ рд╣реИред

рдпрд╣ рддрдм рднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореИрдВ рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ ()

рдЪреВрдВрдХрд┐ рдЖрдк рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реИрдВ; рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реЗрдЯрдЕрдк рд╣реИ рдЬреЛ import рд╕реЗ require рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╕рд╣реА рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдореВрд▓ рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред


рдЙрд╕ рдиреЗ рдХрд╣рд╛ - рдЖрдк require ESM рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рдЕрднреА рддрдХ CJS рд╕реЗ import() рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдиреЛрдб рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдиреЛрдб рдорд╛рд╕реНрдЯрд░ рдкрд░ рдЖ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/nodejs/node/pull/32985ред рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рдВрдХреНрдб рд░рд┐рд▓реАрдЬрд╝ рдкреАрдЖрд░ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ 13.14.0 рдФрд░ 14.1.0 рдореЗрдВ рдЖрдПрдЧрд╛ред рдЙрд╕ рд╕рдордп рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд░реВрдВрдЧрд╛

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреЛ .mjs рд╕реЗрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@SimenB рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рдХрдИ рдкрд░реАрдХреНрд╖рдг рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ! рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмреИрдмреЗрд▓ рдФрд░ рдиреЛрдб рдЖрдпрд╛рдд рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ, рдЬреЗрд╕реНрдЯ рдЖрдпрд╛рдд рдЖрджрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдореИрдВ рд╕реИрдХрдбрд╝реЛрдВ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдФрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖ рд╕рдХрддреА рд╣реИрдВред

рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЬреЛ рдЕрдзрд┐рдХ рдкреНрд░рд╢реНрди рд╣реИрдВ:

  • рдЖрдкрдиреЗ cjs рд╕реЗ import() рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЬреЛ рдХрд╣рд╛ рдерд╛, рдХреНрдпрд╛ рд╡рд╣ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ jest.config.js рдирд╛рдо рджреЗрдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛? рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЗрд╕рдХрд╛ рдирд╛рдо jest.config.cjs рдФрд░ module.exports = (рддреНрд░реБрдЯрд┐ TypeError [ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING]: A dynamic import callback was not specified ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реЛред
  • package-lock рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдкреИрдХреЗрдЬ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг "@jest/globals" рдирд╛рдо рдПрд╕реНрд▓рд┐рдВрдЯ рдирд┐рдпрдо node/no-extraneous-import рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рдирд╛рдордХрд░рдг рдкрд░рдВрдкрд░рд╛ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ? рдХреНрдпрд╛ jest рдмрд┐рдирд╛ @ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдирд┐рдпрдо рдХреЛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБред
  • рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрди, jest рд╡реИрд╢реНрд╡рд┐рдХ рдЬрд╛рджреБрдИ fns рдЬреИрд╕реЗ test , describe , before , рдЖрджрд┐ рд╕реЗ рдЕрд▓рдЧ рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпрд╛ рдЙрди рд╕рднреА рдХреЛ рднреА рдЕрдм рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
  • рдЬрдм рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддреЛ рдХреНрдпрд╛ рдЬреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП --experimental-vm-modules рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рдЕрдЧрд░ рдпрд╣ рдХреЗрд╡рд▓ jest рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЧреИрд░-рдорд╛рдирдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ рдлрд╝реНрд▓реИрдЧ рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рддрдГ рдЖрдк NODE_OPTIONS env рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд╕реЗрдЯ/рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
  • рдкреБрд░рд╛рдиреЗ рдиреЛрдб рдкрд░ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдЕрдм тАЛтАЛрдореБрдЭреЗ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝реА рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рди рддреЛ рддреНрд░реБрдЯрд┐ рд╕реНрдкрд╖реНрдЯ рдереА рдХрд┐ рдиреНрдпреВрдирддрдо рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╕реНрдпрд╛ рдереАред рдХреНрдпрд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ?

рдХреНрдпрд╛ рд╡рд╣ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ jest.config.js рдирд╛рдо рджреЗрдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛?

рдЗрд╕реЗ .js рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕рдХреЗ рдирд┐рдХрдЯрддрдо package.json рдореЗрдВ type: 'module' ред рдЕрдиреНрдпрдерд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ ESM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ .mjs рдирд╛рдо рджреЗрдирд╛ рд╣реЛрдЧрд╛ред рджреЗрдЦреЗрдВ https://nodejs.org/api/esm.html#esm_enblingред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреЙрдиреНрдлрд┐рдЧ рдлрд╛рдЗрд▓ рдЬреЗрд╕реНрдЯ рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреНрдпрд╛рджрд╛ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдо рдПрд╕рд┐рдВрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди await рдПрдХ рдирд┐рд░реНрдпрд╛рддрд┐рдд рд╡рд╛рджрд╛ рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛, рдкреАрдЖрд░ рд╕реНрд╡рд╛рдЧрдд #8357 рдардк рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдореИрдВ рдмрд╣реБрдд рд╣реИрд░рд╛рди рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЛ A dynamic import callback was not specified рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдХреЙрдиреНрдлрд┐рдЧ рдлрд╛рдЗрд▓ рдХреЛ vm рдореЗрдВ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ... рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ?

package-lock рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдкреИрдХреЗрдЬ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг "@jest/globals" рдирд╛рдо рдПрд╕реНрд▓рд┐рдВрдЯ рдирд┐рдпрдо node/no-extraneous-import рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рдирд╛рдордХрд░рдг рдкрд░рдВрдкрд░рд╛ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ? рдХреНрдпрд╛ jest рдмрд┐рдирд╛ @ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдирд┐рдпрдо рдХреЛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБред

рдЖрдкрдХреЛ devDependency рдкрд░ @jest/globals рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреИрдХреЗрдЬ рд╣реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рд╣реИрдВред рдпрд╣ jest рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рд╣реИ рддрд╛рдХрд┐ рдЯрд╛рдЗрдк рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЬреЗрд╕реНрдЯ рд░рдирдЯрд╛рдЗрдо рдХреЗ рдмрд╛рд╣рд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВред

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

рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрди, jest рд╡реИрд╢реНрд╡рд┐рдХ рдЬрд╛рджреБрдИ fns рдЬреИрд╕реЗ test , describe , before , рдЖрджрд┐ рд╕реЗ рдЕрд▓рдЧ рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпрд╛ рдЙрди рд╕рднреА рдХреЛ рднреА рдЕрдм рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

jest рд╕реАрдЬреЗрдПрд╕ рд╕реЗ require рдпрд╛ module рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рддрд░рд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╣реАрдВ рд╣реИ (рдпрд╛рдиреА globalThis.jest === undefined )ред рдпрд╣ jest.mock('../../file.js') рдЖрджрд┐ рдХреЛ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХреЛ рднреА рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрднреА рднреА globalThis.expect рдЖрджрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдЬрдм рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддреЛ рдХреНрдпрд╛ рдЬреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП --experimental-vm-modules рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЪреБрдкрдЪрд╛рдк рдЙрдиреНрд╣реЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рдЕрдирдлреНрд▓реИрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдб рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ - рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдлрд╝реНрд▓реИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдкреАрдЖрдИ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ NODE_OPTIONS рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рд░рдирдЯрд╛рдЗрдо рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ? рдмрд╛рд╡рдЬреВрдж рдЗрд╕рдХреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдореМрдЬреВрджрд╛ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИред

рдкреБрд░рд╛рдиреЗ рдиреЛрдб рдкрд░ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдЕрдм тАЛтАЛрдореБрдЭреЗ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝реА рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рди рддреЛ рддреНрд░реБрдЯрд┐ рд╕реНрдкрд╖реНрдЯ рдереА рдХрд┐ рдиреНрдпреВрдирддрдо рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╕реНрдпрд╛ рдереАред рдХреНрдпрд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ?

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

@SimenB , рдореИрдВрдиреЗ рдЬреЗрд╕реНрдЯ рдХреЛ 25.5.2 рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдо рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдЖрдВрддрд░рд╛рдпрд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдореИрдВ рдкрд╣рд▓реЗ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ рд╡рд╣ рдЕрдм рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИрдВред рдЖрдкрдХреЗ рд╕рднреА рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж!

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

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рддрдд рддрд░реАрдХрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╡рд╣ рд╢рд╛рдЦрд╛ рд╣реИ рдЬрд╣рд╛рдБ рд╕реЗ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдБ: https://github.com/beejunk/firn.js/tree/switch-to-jest

рдкреНрд░рдЬрдирди рдХрд░рдирд╛:

  1. рдЕрдЧрд░ рдЬреЗрд╕реНрдЯ рдХреИрд╢ рдореМрдЬреВрдж рд╣реИ рддреЛ рдЙрд╕реЗ рд╣рдЯрд╛ рджреЗрдВред рдореИрдВрдиреЗ рдЕрднреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ /tmp/jest_rs рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИред
  2. npm test рддреАрди рдмрд╛рд░ рдЪрд▓рд╛рдПрдБред рдкрд╣рд▓реЗ рджреЛ рд░рди рд╕рдлрд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рддреАрд╕рд░рд╛ рд░рди рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬрдм рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ рддреЛ рдпрд╣ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ:

    Error: 
        at invariant (/home/brian/Projects/firn.js/node_modules/jest-runtime/build/index.js:1866:11)
        at Runtime.loadEsmModule (/home/brian/Projects/firn.js/node_modules/jest-runtime/build/index.js:480:7)
        at Runtime.linkModules (/home/brian/Projects/firn.js/node_modules/jest-runtime/build/index.js:548:19)
        at importModuleDynamicallyWrapper (internal/vm/module.js:397:21)
        at htmPreactPath (internal/process/esm_loader.js:31:14)
        at renderPage (/home/brian/Projects/firn.js/lib/renderPage.js:53:15)
        at map (/home/brian/Projects/firn.js/lib/build.js:43:12)
        at Array.map (<anonymous>)
        at build (/home/brian/Projects/firn.js/lib/build.js:36:43)
        at Object.<anonymous> (/home/brian/Projects/firn.js/test/build.test.js:57:5)

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рд╣реЛ рд░рд╣реА рд╣реИред рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдиреЛрдЯ: рдпрджрд┐ рдореИрдВ рдЬреЗрд╕реНрдЯ рдХреИрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддрд╛ рд╣реВрдБ рдФрд░ --no-cache рдЬреЛрдбрд╝рдХрд░ рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рддрд╛ рд╣реВрдБ, рддреЛ рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдБред

рд╣реЗ, рдореИрдВ рд╡рд╣рд╛рдБ рдЖрд▓рд╕реА рдерд╛ рдФрд░ рдПрдХ рдЙрдЪрд┐рдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рд╣реМрд▓ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╣реАрдВ рдЧреБрдо await рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрдХрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдХреБрдЫ рдФрд░ рдЦреЛрджрдирд╛ рд╣реЛрдЧрд╛

@SimenB рдпрд╣рд╛рдБ рдЙрд╕ ESM рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреБрдирд░реБрддреНрдкрд╛рджрди рд╣реИ: https://github.com/facebook/jest/issues/9935

@SimenB рдореИрдВрдиреЗ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЬреЗрд╕реНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рд╣реИ:

https://github.com/beejunk/jest-esm-dynamic-import-error

рдорд╣рд╛рди рдкреНрд░рдЬрдирди @beejunk рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ рдФрд░ рдЕрдзрд┐рдХ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдпрд╣рд╛рдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдордЭреЗ рдмрд┐рдирд╛ рдХрд┐ рдпрд╣ рдЬреЗрд╕реНрдЯ рдореЗрдВ рдмрдЧ рд╣реИ рдпрд╛ Node. рдореИрдВрдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдиреЛрдб рдХреЛрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреА рд╕реВрдЪрдирд╛ рджреА рд╣реИ, рддреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд╣рддреЗ рд╣реИрдВ: https://github.com/nodejs/node/issues/3216

рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @SimenBред рдпрджрд┐ рдореИрдВ --no-cache рдзреНрд╡рдЬ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рдЬреЛ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИ, рддреЛ рдкрд░реАрдХреНрд╖рдг рд▓рдЧрд╛рддрд╛рд░ рдкрд╛рд╕ рд╣реЛрддреЗ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВред рдореИрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ!

рд╣рд╛рдБ, рдореИрдВрдиреЗ рдпрд╣ рднреА рджреЗрдЦрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдордп рдореБрджреНрджрд╛ рд╣реИ - рдмрд┐рдирд╛ рдХреИрд╢ рдЪреАрдЬреЗрдВ рдЗрддрдиреА рдзреАрдореА рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИред

@SimenB # 9935 рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ рдПрдХ рджреВрд╕рд░реА рдЪрд┐рдВрддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рднреА рдорд╛рдиреНрдп рд╣реИред рдЬрдм type: "module" , jest --init рдЕрднреА рднреА module.exports рд╕рд╛рде рдХреЙрдиреНрдлрд┐рдЧ рдлрд╛рдЗрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдорд╛рдореВрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдИрдПрд╕рдПрдо рдиреЛрдб рдореЗрдВ рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдИрдПрд╕рдПрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рднреНрд░рдорд┐рдд рдмрдЧ рдХреА рддрд░рд╣ рджрд┐рдЦрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рдпрд╛рдиреА, рдЦреБрд╢ рдкрде jest --init && jest рдПрдХ рдирдИ рдИрдПрд╕рдПрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧрд╛)ред рдХреНрдпрд╛ рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ init рддрд░реНрдХ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

@aldeed рдХреНрдпрд╛ рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ? рдЕрднреА рдкрд░реАрдХреНрд╖рдг рдореБрдЭреЗ mjs рдлрд╝рд╛рдЗрд▓ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ export default рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо js рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ mjs , рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреАред рдпрд╣ ESM рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ

@SimenB рдареАрдХ рд╣реИ рдЬрдм рддрдХ рдЖрдкрдиреЗ рдкреВрдЫрд╛ рддрдм рддрдХ рдореБрдЭреЗ рдпрдХреАрди рдерд╛ред рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рддреБрдо рд╕рд╣реА рд╣реЛред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрд╕реЗ рдиреЛрдб рдпрд╛ рдЬреЗрд╕реНрдЯ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рд╣реЛ? рдЕрд╡рд╣реЗрд▓рдирд╛ред

рдпрд╣ рдХрдорд╛рд▓ рдХрд╛ рд╣реИ! ES рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдмреЗрдмреЗрд▓ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж @ рд╕рд┐рдореЗрдирдмреА!

рдкрддрд╛ рд▓рдЧрд╛рдПрдБ рдХрд┐ рдХреНрдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ ESM рдпрд╛ CJS рдореЛрдб рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЛрд▓рддреЗ рд╣реБрдП, рдЙрдирдХреЗ ES рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрдпрд╛рдд рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП "module":"<path to es module>" рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░/рдмрдВрдбрд▓рд░-рдЙрдиреНрдореБрдЦ рдкреИрдХреЗрдЬ рд╣реИрдВред рдкреИрдХреЗрдЬ рдХреА рдЕрдкрдиреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рд╕рдордЭрджрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред moduleNameMapper рдЬреИрд╕рд╛ рдХреБрдЫ рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╕реАрдЬреЗрдПрд╕ рдпрд╛ рдИрдПрд╕рдПрдо рд╣реИ рдпрд╛ рдирд╣реАрдВред

рд╣рд╛рдп @SimenB , рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ ts-jest рднреА commonjs рд╣реИ? рдХреНрдпрд╛ рдИрдПрд╕рдПрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдХреА рддрд░рдл рд╕реЗ рдлрд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдм ts-jest ts рд╕реЗ js рд▓рд┐рдП commonjs рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрдпрд╛ esm рд╕реЗ рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди mjs рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ts рд╕реЗ js ?

@zandaqo рд╣рдо modules рдлрд╝реАрд▓реНрдб рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдиреЛрдб рдХреА рдХрд▓реНрдкрдирд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВрдЧреЗ рдФрд░ exports : #9771 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ modules рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ рдореЗрдВ рдкреНрд▓рдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐: https://jestjs.io/docs/en/configuration#resolver -stringред рд╣рдо рдХреБрдЫ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ ( mainFields , рдЬреИрд╕реЗ рд╡реЗрдмрдкреИрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?), рд▓реЗрдХрд┐рди рдЬрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдо рдЕрдЬреНрдЮрд╛рдд рдЕрдЬреНрдЮрд╛рдд рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдФрд░ рдиреАрдЪреЗ рдЖ рдЬрд╛рдПрдЧрд╛


@ahpnl #9860

рд╕рд┐рдпрд╛рдУ рджреЛрд╕реНрддреЛрдВ!
рдмрд╕ рдПрдХ рдкреНрд░рд╢реНрди: рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐, рдЪреВрдВрдХрд┐ ES6 рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд┐рд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХрд╛ рдордЬрд╛рдХ рдирд╣реАрдВ рдЙрдбрд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рддреЛ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, ES6 рдореЗрдВ рдореЙрдбреНрдпреВрд▓ B рджреНрд╡рд╛рд░рд╛ рдЖрдпрд╛рддрд┐рдд рдореЙрдбреНрдпреВрд▓ A рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ?

@gabrieledarrigo рдореИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП moduleNameMapper рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

    "moduleNameMapper": {
      "moduleA": "<rootDir>/test/moduleA-mock.js"
    },

@gabrieledarrigo рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

jest.mock('the-thing-i-want-to-mock', () => /* do whatever in here */);

let importedThing;

beforeAll(async () => {
  importedThing = await import('thing-that-imports-mocked-module');
});

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

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

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

рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдерд╛, рддрдм рд╣рдо рдЗрд╕реЗ рдмреЗрдмреЗрд▓ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рдереЗред

@SimenB рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣рд╛рдВ рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж :)

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрдм рдореИрдВ jest-environment-node рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд customEnvironment рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд╡рд╣рд╛рдВ рдЕрдкрдирд╛ рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ esm рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ cjs рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред
рдореЗрд░рд╛ рдкреНрд░рд╢реНрди рд╣реИ, рдХреНрдпрд╛ рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдкрд░реАрдХреНрд╖рдг рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ esm рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИ? рдХрд┐рд╕реА рднреА рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@ рдХреБрдХрд╛-рд░рд╛рдбреЛрд╡рди рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдлреАрдЪрд░ рдЕрдиреБрд░реЛрдз рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ?

рдЕрджреНрдпрддрди: рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдм https://github.com/facebook/jest/issues/10025 рдореЗрдВ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

@SimenB рдЙрдкрд░реЛрдХреНрдд jest.mock рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЬреИрд╕рд╛ рдХрд┐ рд╣реЛрддрд╛ рд╣реИ рдореИрдВ рдХреБрдЫ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рдирдХреА рдЖрдЬ рдЬрд░реВрд░рдд рд╣реИред рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдирдХрд▓реА рдореЙрдбреНрдпреВрд▓ node_modules рдкреИрдХреЗрдЬ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЙрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рддреЗ рд╣реБрдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

// main.js
import secondary from "./secondary.js";

export default function main() {
  return secondary();
}

// secondary.js
export default function secondary() {
  return true;
}

// test.js
import { jest } from "@jest/globals";

jest.mock("./secondary.js");

let main;
let secondary;
beforeAll(async () => {
  ({ default: main } = await import("./main.js"));
  ({ default: secondary } = await import("./secondary.js"));
});

test("works", () => {
  secondary.mockReturnValueOnce(false); // TypeError: Cannot read property 'mockReturnValueOnce' of undefined
  expect(main()).toBe(false);
});

рдареАрдХ рдЙрд╕реА рдкреИрдЯрд░реНрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм "./secondary.js" рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдкреИрдХреЗрдЬ рдирд╛рдо рд╣реИред (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреИрдХреЗрдЬ рдореИрдВрдиреЗ рдирд┐рд░реНрдпрд╛рдд рдХреЙрдордирдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЕрдЧрд░ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред)

рдЬреЗрд╕реНрдЯ 26.0.1 рдбрдмреНрд▓реНрдпреВ / рдиреЛрдб 12.16.3

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░, рдпрд╛ рдореБрдЭреЗ рдПрдХ рдкреВрд░реНрдг рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ transform: {} , рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдмреЗрдмреЗрд▓ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ 2: рдпрд╣ рдпрд╛ рддреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

jest.mock("./secondary.js", () => ({
  default: jest.fn()
}));

рдЗрд╕ рдкрд░ рдЕрджреНрднреБрдд рдХрд╛рдоред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рддрдХ рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддрдм рддрдХ рд╕реАрдЬреЗрдПрд╕ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ import() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ node --experimental-vm-modules node_modules/jest/bin/jest.js рд╕рд╛рде рдЬреЗрд╕реНрдЯ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ testEnvironment: 'node', transform: {} рдореЗрдВ jest.config.js ред рдпрд╣ рдиреЛрдб 14.2.0 рдкрд░ рд╣реИред

рдЖрдпрд╛рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ:

TypeError [ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING]:
A dynamic import callback was not specified.

рдХреНрдпрд╛ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдЬреНрдЮрд╛рдд рд╕реАрдорд╛ рд╣реИ? рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ https://github.com/nodejs/node/pull/32985 рдЕрдм рдиреЛрдб 14.1.0 рдореЗрдВ рдЖ рдЧрдпрд╛ рд╣реИред

рд╣рд╛рдБ, рдореИрдВ рдЕрднреА рддрдХ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ рд╣реВрдБред рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕реЗ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЙрддрд░реВрдВрдЧрд╛ред

@aldeed рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдирдХрд▓реА рд╕рдВрдХрд▓реНрдк рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ, рдФрд░ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдЕрдЪреНрдЫреЗ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ

@SimenB рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЗрд╕ рдкрд░ рдирдЬрд░ рд░рдЦреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХрдм рдЙрддрд░реЗрдЧрд╛ред

рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рдХреЗ рдХрд╛рд░рдг рд▓рд┐рдкрд┐рдпреЛрдВ рдореЗрдВ import рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (https://github.com/nodejs/node/issues/33166), рдЪрд▓реЛ рдЗрд╕реЗ рддрдм рддрдХ рд░реЛрдХреЗрдВ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╕реБрд▓рдЭ рди рдЬрд╛рдП

рдореБрдЭреЗ .mjs рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖ рд░рд╣реА рд╣реИрдВред рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ __tests__/my-test.mjs , рддреЛ рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ

$ yarn test
yarn run v1.22.4
$ node --experimental-vm-modules node_modules/jest/bin/jest.js
No tests found, exiting with code 1
Run with `--passWithNoTests` to exit with code 0
In C:\Users\Domenic\Dropbox\Programming\WIP\remember-to-eat
  1 file checked.
  testMatch: **/__tests__/**/*.[jt]s?(x), **/?(*.)+(spec|test).[tj]s?(x) - 0 matches
  testPathIgnorePatterns: \\node_modules\\ - 1 match
  testRegex:  - 0 matches
Pattern:  - 0 matches
error Command failed with exit code 1.

рдЕрдЧрд░ рдореИрдВ рдЬреЛрдбрд╝реВрдБ

"testMatch": ["**/__tests__/**/*.mjs"]

рдореЗрд░реЗ package.json рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ

$ yarn test
yarn run v1.22.4
$ node --experimental-vm-modules node_modules/jest/bin/jest.js
No tests found, exiting with code 1
Run with `--passWithNoTests` to exit with code 0
In C:\Users\Domenic\Dropbox\Programming\WIP\remember-to-eat
  1 file checked.
  testMatch: **/__tests__/**/*.mjs - 0 matches
  testPathIgnorePatterns: \\node_modules\\ - 1 match
  testRegex:  - 0 matches
Pattern:  - 0 matches
error Command failed with exit code 1.

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рдореИрдВ "testMatch" рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ __tests__/my-test.js рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ .mjs рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдпрд╣ рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реИ?

@domenic рдореИрдВ рднреА рдЗрд╕рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рд╕рдорд╛рдзрд╛рди "moduleFileExtensions": ["js", "mjs"] ( "testMatch" ) рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рдирд╛ рд╣реИред

рдПрдХ рдмрд╛рд░ рджреЗрдЦ рд▓рд┐рдпрд╛, рдФрд░ moduleFileExtensions рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЬреЗрд╕реНрдЯ рдХреЛ рдпрд╣рд╛рдВ hasteFS.getAllFiles() рдЪрд▓рд╛рдХрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИ:

https://github.com/facebook/jest/blob/2460c059ad1dbf124466ac25c8d5ccfd74ae9f25/packages/jest-core/src/SearchSource.ts#L159 -L164

hasteFS рдХреЛ HasteMap рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд extensions рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

https://github.com/facebook/jest/blob/2460c059ad1dbf124466ac25c8d5ccfd74ae9f25/packages/jest-runtime/src/index.ts#L291


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ moduleFileExtensions рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА .snap рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рд╣рдореЗрдВ рдкреНрд░рд╕рд┐рджреНрдз рдЬреЗрдПрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рднреА рдордЬрдмреВрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рд╡реЗ (рдореЗрд░реЗ рд╕рд┐рд░ рдХреЗ рдКрдкрд░ рд╕реЗ) js , mjs , cjs , jsx , ts рдФрд░ tsx ? рдпрд╣ рдХреНрд░реЙрд▓ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рднрд╛рд╡ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ? рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдмрд╣реБрдд рдзреАрдорд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ cjs рдФрд░ mjs рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрдЯрд░реНрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рдкреИрдЯрд░реНрди рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдзреАрдорд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рд╣рд╛рдБ, рдпрд╣ рдЖрджрд░реНрд╢ рд╣реЛрдЧрд╛ рдпрджрд┐, рдХрдо рд╕реЗ рдХрдо ES рдореЙрдбреНрдпреВрд▓ рдореЛрдб рдореЗрдВ, .mjs рдиреЗ рд╕рд┐рд░реНрдл рдореЙрдбреНрдпреВрд▓рдлрд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреЗрд╕реНрдЯрдореИрдЪ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред

рдпрд╣ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВ .js рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ; рдЬрдм рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдореБрдЭреЗ рдорд┐рд▓ рдЧрдпрд╛

 Validation Error:

  moduleFileExtensions must include 'js':
  but instead received:
    ["mjs"]
  Please change your configuration to include 'js'.

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХреБрдЫ "рдИрдПрд╕рдПрдо рдореЛрдб" рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬреЛ рдиреЛрдб рдИрдПрд╕рдПрдо рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝ рджреЗрдЧрд╛ рдФрд░ рдИрдПрд╕рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ (# 9860) рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди-рд╕реЗ-рдЬреЗрдПрд╕ рдореЗрдВ рднреА рдорджрдж рдХрд░реЗрдЧрд╛ред


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

рдзреАрдорд╛ рдХрд░рдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд╛рдлреА рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдЗрддрдирд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдПрдордЬреЗ рдФрд░ рд╕реАрдЬреЗ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред moduleFileExtensions: ['js'] рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЧрддрд┐ рджреЗрдЧрд╛, рд╣реИ рдирд╛? рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд░реНрдл рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░реЗрдВред

рдЗрд╕ рд╕рд╛рд░реЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИред рдореИрдВ 3 рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ ( "type": "module" рдореЗрд░реА package.json рдкрд░, "testEnvironment": "jest-environment-node" рдореЗрд░реА рд╣рдВрд╕реА config рдореЗрдВ рдФрд░ --experimental-vm-modules CLI рдкрд░) рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд▓рдЧрддрд╛ рд╣реИ ЁЯОЙ

рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВ import.meta рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреИрд╕рд╛ рдХрд┐ Node.js рдбреЙрдХреНрд╕ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ (рдФрд░ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪреЗрдХрдмреЙрдХреНрд╕ рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП __dirname , рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ import.meta рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ:

console.log(import.meta);

SyntaxError: [PATH]/files.test.js: Support for the experimental syntax 'importMeta' isn't currently enabled (31:20):
    Add @babel/plugin-syntax-import-meta (https://git.io/vbKK6) to the 'plugins' section of your Babel config to enable parsing.

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

Node.js v14.3.0, рдЬреЗрд╕реНрдЯ v25.5.4

рдореБрдЭреЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИред рдЪреВрдБрдХрд┐ рдореИрдВ рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдБ рдЬрд╣рд╛рдБ рдореЗрд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╣реИ , рдореИрдВ рдмрд╕ рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ:

const __dirname = process.cwd();
const __filename = __dirname + "/files.test.js";

рдЕрдЧрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕ рд░реЗрдкреЛ рдХрд╛ рдкрд╛рд▓рди рдХрд░реВрдВрдЧрд╛, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж!

рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ transform: {} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмреЗрдмреЗрд▓ рд╕реЗ рдСрдкреНрдЯ-рдЖрдЙрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

@SimenB рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ transform: {} рдЬреЛрдбрд╝рдирд╛ рдХрд╛рдо рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ рдЙрд╕ рдмрд┐рдВрджреБ рдХреЛ "рд░реВрдкрд╛рдВрддрд░рдг рди рдЬреЛрдбрд╝реЗрдВ" рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд▓рдд рд╕рдордЭрд╛ рдФрд░ рди рдХрд┐ "рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреВрд░ рд▓реЗ рдЬрд╛рдирд╛" рдЬреИрд╕рд╛ рдХрд┐ рдЗрд░рд╛рджрд╛ рдерд╛ред

BTW, рдкрд░реАрдХреНрд╖рдг 2.4 рд╕реЗрдХрдВрдб рд╕реЗ рдХреЗрд╡рд▓ 1.3 рд╕реЗрдХрдВрдб рддрдХ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡реЗ рд▓рдЧрд╛рддрд╛рд░ рддреЗрдЬ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВред

рдиреЛрдб 12 рдХреЛ рдмрд┐рдирд╛ рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдИрдПрд╕рдПрдо (https://nodejs.org/en/blog/release/v12.17.0/) рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдУрдкреА рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдкреАрдЖрдИ рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ _not_ unflaggered рд╣реИ

@SimenB рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдХрдИ рдмрд╛рд░ рдЧрдпрд╛ рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдЕрдЯрдХрд╛ рд╣реБрдЖ рд╣реВрдВ (рдиреЛрдб 12.17 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред

рдЬреЗрд╕реНрдЯ 26.0.1 рдЪрд▓рд╛рддреЗ рд╕рдордп рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /app/tests/setup.js
require() of ES modules is not supported.
require() of /app/tests/setup.js from /app/node_modules/@jest/transform/build/ScriptTransformer.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename setup.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from /app/package.json.

рдореЗрд░реЗ рдкрд╛рд╕ transform: {}, рдФрд░ node --experimental-vm-modules node_modules/jest/bin/jest.js рд╕рд╛рде рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рдХрд┐рд╕рдХреА рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ?

@aldarund рдпрдХреАрди рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдПрдХ рд╕рд╛рде рдиреНрдпреВрдирддрдо рдкреНрд░рдЬрдирди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@SimenB рдпрд╣рд╛рдВ рд░реЗрдкреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреНрдпреВрдирддрдо рд░реЗрдкреЛ рд╣реИ, рдмрд╕ yarn test https://github.com/aledalgrande/jest-example рдЪрд▓рд╛рдПрдВ - рдореИрдВрдиреЗ рдиреЛрдб 13/14 рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рд╣реИред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдИрдПрд╕рдПрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрдЕрдк рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЕрджреНрдпрддрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдиреЗ рдХрд┐рд╕реА рдФрд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ

~рдирд╣реАрдВ @simenB , рд▓реЗрдХрд┐рди @aledalgrande рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдЙрд╕рд╕реЗ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдИрдПрд╕рдПрдо рдкрд░ рдЪрд▓ рд░рд╣реА рд╣реИ ( package.json рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди )ред ~

~ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЗрд╕реЗ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЗ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ _only_ рдореЗрдВ рджреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЧреБрдг рд╣реИрдВ, рд╢рд╛рдпрдж рдкрд╣рд▓реЗ package.json ред рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреНрдп рдЧреБрдг рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рджреЗрдЦрдирд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ/рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред~

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

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

рд╣рд╛рдп @SimenB , рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗред рдХреНрдпрд╛ рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рдд рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ? Node.js рдХреЗ рд╕рд╛рде рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреИрдХреЗрдЬ рдХрд╛ рдЖрдпрд╛рдд рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

import { customAlphabet } from "nanoid";

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рд╡рд╣реА рдХреЛрдб рдпрд╣ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ:

SyntaxError: The requested module 'nanoid' does not provide an export named 'customAlphabet'

рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕рдореЗрдВ рдХреЛрдб рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

import nanoid from "nanoid";
const { customAlphabet } = nanoid;

рд▓реЗрдХрд┐рди рддрдм Node.js рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЦреЗрд▓ рдирд╣реАрдВ рд╣реИ (рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ):

SyntaxError: The requested module 'nanoid' does not provide an export named 'default'

рдкреНрд░рдХрд╛рд╢рд┐рдд (рд░реЗрдкреЛ рдЕрднреА рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ рд╣реИ) nanoid рдХреЛрдб рдЗрд╕ рддрд░рд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ:

export { nanoid, customAlphabet, customRandom, urlAlphabet, random }

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

рдЖрд╣, рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, package.json рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИ:

  "main": "index.cjs",
  "module": "index.js",
  "exports": {
    "./package.json": "./package.json",
    ".": {
      "require": "./index.cjs",
      "import": "./index.js",
      "browser": "./index.browser.js"
    },
    ...
  }
  ...

рддреЛ рд╢рд╛рдпрдж рдиреЛрдб.рдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдвреВрдВрдв рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЬреЗрд╕реНрдЯ рдХреЙрдордирдЬреЗрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛?

рдореИрдВ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реВрдБрдЧрд╛ рдЬрдм рддрдХ Package Exports рдХреА рдЬрд╛рдБрдЪ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреА рдФрд░ рдлрд┐рд░ рдЙрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЗрди 2 рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рддрдм рддрдХ рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЬрд┐рд╕ рдкрд░реАрдХреНрд╖рдг рдХреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ ред

рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ - рдЬреЗрд╕реНрдЯ 26.0.1 рдФрд░ рдиреЛрдб 14.4 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ред package.json рдХреЛ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рдХрд╛рд░ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ, рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХреЛ {} , env рд╕реЗ jest-environment-node рдФрд░ node --experimental-vm-modules рд╕рд╛рде рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЕрдм рдореБрдЭреЗ рдпрд╣ рдирдИ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

ES Modules are only supported if your test environment has the `getVmContext` function

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

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ package.json рдХреГрдкрдпрд╛ @cyberwombat рдХреЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рднрд╛рдЧреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЬреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЖрдк рдЬрд┐рд╕ рд▓реЙрдиреНрдЪрд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

{
  ...
  "type": "module",
  "scripts": {
    ...
    "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
  },
  "jest": {
    "transform": {},
    "testEnvironment": "jest-environment-node"
  },
  ...

рдлрд┐рд░ рдЗрд╕реЗ npm test рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ

@franciscop рдореЗрд░рд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд╣реА рд╣реИред рдиреЛрдб 14.4.0ред рдореИрдВ рддреБрдореНрд╣рд╛рд░рд╛ рдЕрдЪреНрдЫрд╛ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдБред рдореИрдВ рдЕрдВрддрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдКрдВрдЧрд╛ред
рдкреИрдХреЗрдЬ.рдЬреЗрд╕рди

{
  "type": "module",
  "devDependencies": {
    "jest": "^26.0.1",
  },
}

jest.config.js

export default {
  testEnvironment: 'jest-environment-node',
  setupFilesAfterEnv: ['./test/bootstrap.js'],
  testPathIgnorePatterns: ['<rootDir>/node_modules/', '<rootDir>/config/', '/<rootDir>/src/'],
  testRegex: '(\\.|/)(test|spec)\\.[jt]sx?$',
  transform: {
//    '^.+\\.jsx?$': 'babel-jest' // esm someday
  },
  transformIgnorePatterns: [],
  modulePaths: [
    '<rootDir>/test',
    '<rootDir>/src',
    '<rootDir>'
  ]
}

рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
node --experimental-vm-modules node_modules/jest/bin/jest.js

рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рджреВрд╕рд░реА рддрд░рдл рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред transform: {} рдФрд░ testEnvironment: 'jest-environment-node' рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛ рджреЗрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЛ рддрдм рддрдХ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдпрд╣ рди рджреЗрдЦ рд▓реЗрдВ рдХрд┐ рдХреМрди рд╕реА рдкрд┐рдЫрд▓реА рддреНрд░реБрдЯрд┐ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ transformIgnorePatterns _might_ transform рд╕рд╛рде рд╡рд┐рд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЬреЗрд╕реНрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореИрдВ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдБ ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ/рдпрд╣рд╛рдВ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ: рд░реЛрд▓_рдЖрдИрдЬрд╝:

@ x80486 рдореБрдЭреЗ рдХрд▓ рдареАрдХ рдЙрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рдордЭ рд╕реЗ рд▓рдВрдмреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде StackOverflow рдореЗрдВ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рд╣реИ ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ "exports" рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд╣рд╛рдЗрдмреНрд░рд┐рдб рдкреИрдХреЗрдЬ рдкрд░ рдЗрд╕ рдЖрд▓реЗрдЦ рд╕реЗ рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛

exports рдХреЛ #9771 . рдореЗрдВ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

@franciscop рдареАрдХ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ - рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдВрдХреБрд▓ рдореЗрдВ рдПрдХ рд╕рдВрдШрд░реНрд╖ рд╣реИ - рдореЗрд░реЗ рдкрд╛рд╕ serverless-bundle рд╕реНрдерд╛рдкрд┐рдд рдерд╛ рдЬреЛ ES Modules are only supported if your test environment has the getVmContext function рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣реЗ рд╕рдВрдШрд░реНрд╖ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред

@franciscop рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ pkg.exports рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдХрд╛ рдЕрдм рд╕рд╛рдордиреЗ рдЖрдирд╛ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ Node.js 14.x рдореЗрдВ рдЕрдирдлрд╝реНрд▓реИрдЧ рдХреА рдЧрдИ рдереА рдФрд░ рдХреБрдЫ рдкреИрдХреЗрдЬ рдореЗрдВрдЯреЗрдирд░ (рдЬреИрд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП uuid ) рд╢реБрд░реВ рд╣реЛ рдЧрдП рдереЗ pkg.exports рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдирд╛ред рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдкрдХреЛ Node.js 12.x рдореЗрдВ рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рдзреНрд╡рдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╡рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдм рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИред

рдкреВрд░реЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЙрд╕ рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

exports рдмрд╛рд░реЗ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рдВрдмреЗ рдзрд╛рдЧреЗ рдореЗрдВ рдЦреЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рдмрдВрдж рдореБрджреНрджреЗ (https://github.com/facebook/jest/issues/9565) рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЗрд╕рдореЗрдВ moduleNameMapper рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ред

рдордИ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЧрдИ globalSetup рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рд╣реИ (Jest 26.1.0)? рдЙрджрд╛рд╣рд░рдг рд░реЗрдкреЛ @aledalgrande рдХреЗ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

$ git clone [email protected]:aledalgrande/jest-example.git
$ cd jest-example
$ npm test

> @ test /Users/asko/Temp/jest-example
> node --experimental-vm-modules node_modules/jest/bin/jest.js --config=./jest.config.js

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/asko/Temp/jest-example/tests/setup.js
require() of ES modules is not supported.
require() of /Users/asko/Temp/jest-example/tests/setup.js from /Users/asko/Temp/jest-example/node_modules/@jest/transform/build/ScriptTransformer.js 

рдХреЛрдИ рдЬрд▓реНрджреА рдирд╣реАрдВред CHANGELOG рдФрд░ рдЗрд╕рдиреЗ ES6 рдХреЗ рд╕рд╛рде GlobalSetup/globalTeardown рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

Node.js 14.4.0, рдЬреЗрд╕реНрдЯ 26.1.0


рдЕрдкрдбреЗрдЯ (13-рдЕрдЧрд╕реНрдд-20):

рдЕрднреА рднреА рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, Node.js 14.7.0, рдЬреЗрд╕реНрдЯ 26.4.0

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

ES рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдкрд░реАрдХреНрд╖рдг рд░рд┐рдкреЛрд░реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? ...
рдирд╡реАрдирддрдо рдЬреЗрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХрд╣рддреА рд╣реИ рдХрд┐ рдЯреЗрд╕реНрдЯрд╢реЗрдбреНрдпреВрд▓рд░ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрд╕реНрдЯрдо рд░рд┐рдкреЛрд░реНрдЯрд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред


рддреНрд░реБрдЯрд┐ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП

~/projects/esw-ts/lib/dist/test/testReporter.js:1
'рдУрдПрд╕' рд╕реЗ рдЖрдпрд╛рдд рдУрдПрд╕;
^^^^^^

рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐: рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд╣рд░ рдЖрдпрд╛рдд рд╡рд┐рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛
рд░реИрдкрд╕реЗрдл рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:1116:16)
рдореЙрдбреНрдпреВрд▓._рдХрдВрдкрд╛рдЗрд▓ рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:1164:27)
Object.Module._extensions..js рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:1220:10)
рдореЙрдбреНрдпреВрд▓.рд▓реЛрдб рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:1049:32)
Function.Module._load рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:937:14)
рдореЙрдбреНрдпреВрд▓.require рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/рд╕реАрдЬреЗ/рд▓реЛрдбрд░.рдЬреЗрдПрд╕:1089:19)
рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/helpers.js:73:18)
/Users/manish.gowardipe/Desktop/projects/esw-ts/lib/node_modules/@jest/core/build/TestScheduler.js:418:65 рдкрд░
Array.forEach рдкрд░ ()
TestScheduler._addCustomReporters (/Users/manish.gowardipe/Desktop/projects/esw-ts/lib/node_modules/@jest/core/build/TestScheduler.js:411:15) рдкрд░

рдирдорд╕реНрддреЗ, рдореИрдВ рдЕрдкрдиреА рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ ES рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕рдорд░реНрдерди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ NodeJS рдореЗрдВ рдирдпрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЦреЛ рдЧрдпрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдХреГрдкрдпрд╛ рдХреБрдЫ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдкрд╕рдВрдж рдЖрдПрдЧрд╛ред

  • node --version : v14.5.0
  • yarn jest --version : 26.1.0
  • рдореИрдВ рдЗрд╕ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
  • рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реА рдлрд╛рдЗрд▓реЗрдВ рдЗрд╕ рддрд░рд╣ рд╣реИрдВ:

рдкреИрдХреЗрдЬ.рдЬреЗрд╕рди

{
"jest": {
    "transform": {},
    "testEnvironment": "jest-environment-node"
  }
}

рдорд╛рд░реНрдХреЛрд╡.рдЯреЗрд╕реНрдЯ.рдЬреЗрдПрд╕

const fs = require("fs");
const Markov = require("./markov.mjs");
// import fs from "fs";
// import Markov from "./markov.mjs";

const file = fs.readFileSync("text.txt", "utf8");
const markov = new Markov(file.toString());

test("Generates sentence with especified words", () => {
  expect(markov.makeSentence(8).length).toBe(8);
});
  • рдореИрдВ yarn jest . рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ:
    imagen

  • рдореИрдВрдиреЗ node node_modules/jest/bin/jest.js . рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИред

@pepetorres1998 рдпрд╣ рдзрд╛рдЧрд╛ рджреЗрд╢реА рдИрдПрд╕рдПрдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЬреЗрд╕реНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдЭрдВрдбреЗ/рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдЪреАрдЬреЗрдВ рдЪрд▓рд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ - рдКрдкрд░ рджреА рдЧрдИ рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ (рдФрд░ "рдЯрд╛рдЗрдк": "рдореЙрдбреНрдпреВрд▓" рдХреЛ package.json рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ)ред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рд╕рдордп рдпрд╣ рдкреНрд░рд╛рдЗрдо рдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдмреИрдмреЗрд▓ рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХрддрд╛ рд╣реВрдВред рдРрд╕реЗ рдХрдИ рдЕрдирдЪреЗрдХ рдореБрджреНрджреЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢реЛ рд╕реНрдЯреЙрдкрд░ рд╣реИрдВред рдореИрдВрдиреЗ рдЦреБрд╢реА-рдЦреБрд╢реА рдХреБрдЫ рд╣рдлрд╝реНрддреЗ рдкрд╣рд▓реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рд░реЛрддреЗ рд╣реБрдП рдмрд╛рдмреЗрд▓ рдХреЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЖрдпрд╛ред

рдХреНрдпрд╛ рдЗрд╕ рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ jest.setTimeout(...) рдЬреИрд╕реА рдЪреАрдЬрд╝реЗрдВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рдФрд░ рдХреЛ ReferenceError: jest is not defined рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ? рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдкрд░реНрдпрд╛рд╡рд░рдг, рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг, рдЬреЗрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг, рдпрд╛ рдЙрди рдЪреАрдЬреЛрдВ рдХреЗ рдХреБрдЫ рд╕рдВрдпреЛрдЬрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдиреЛрдб v14.5.0, рдЬреЗрд╕реНрдЯ 26.1.0, рдкрд░реНрдпрд╛рд╡рд░рдг рдЬреЗрд╕реНрдЯ-рдкрд░реНрдпрд╛рд╡рд░рдг-рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░)

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рдЕрдм рдореБрдЭреЗ рдЬреЗрд╕реНрдЯ 'рд╡реИрд╢реНрд╡рд┐рдХ' рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЕрдирдЪреЗрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдореИрдВ

@bdentino рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ import {jest} from '@jest/globals'; рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

25.4.0 рдХреЛ рдкрд╣рд▓реЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдКрдкрд░ рдмрддрд╛рдП рдЧрдП #9772 рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ #9842 рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред _theory_ рдореЗрдВ CJS рдФрд░ ESM рдХреЛ рдорд┐рд▓рд╛рдиреЗ рд╕реЗ рдЕрдм рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (ЁЯдЮ)ред

рдПрдХ рдореБрдЦреНрдп рд▓рд╛рдкрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ jest рд╡рд╕реНрддреБ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣реА рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ import.meta рд╕реЗ рдЪрд┐рдкрдХрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕реЗ import {jest} from '@jest/globals' рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА!

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

  1. рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк import рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ transform: {} рд╕реЗрдЯ рдХрд░реЗрдВ рдпрд╛ рдЕрдиреНрдпрдерд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ babel рдлрд╝рд╛рдЗрд▓ рдХреЛ CJS рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ modules рд╕реЗ рдмрдЪрдирд╛
  2. node@^12.16.0 || >=13.2.0 --experimental-vm-modules рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдБ
  3. jest-environment-node рдпрд╛ jest-environment-jsdom-sixteen рд╕рд╛рде рдЕрдкрдирд╛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ

рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдВ! рдпрджрд┐ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдпрд╣ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╛рди рдХреЛрдб (рдХрд┐рд╕реА рднреА рдкрд░реАрдХреНрд╖рдг рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдХреЛ рдШрдЯрд╛рдХрд░) Node. рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдореЗрдВ https://nodejs.org/api/esm.html _alot_ рдкрдврд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореБрдЭрд╕реЗ рдХреБрдЫ рдЫреВрдЯ рдЧрдпрд╛ рд╣реИред

@ рд╕рд┐рдореЗрдирдмреА
рдпрд╣ рдзрд╛рдЧрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реЛ рдЧрдпрд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рд▓реЛрдЧ рдЬреЗрд╕реНрдЯ / рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛрдЧреАред
рдХреНрдпрд╛ рдИрдПрд╕-рдореЙрдбреНрдпреВрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдпрд╛ рдХреБрдЫ 'рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд') рдореЗрдВ рдЬреЗрд╕реНрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИ?

@aldeed рдЙрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ

(рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рд╣рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдгрд┐рдЬреНрдп рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрд╕ рд╣рд╛рд╣рд╛ рдХреЛ рдЪреАрдпрд░реНрд╕)

@guilhermetelles рдирд╣реАрдВ, рдФрд░ рдЗрд╕реЗ рдЕрдм https://github.com/facebook/jest/issues/10025 рдореЗрдВ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореИрдВ рдЬреЗрд╕реНрдЯ 26.1.0 рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, node рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде 14.6.0 --experimental-vm-modules , рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп import() CommonJS рдХреЗ рдЕрдВрджрд░ . рдХреНрдпрд╛ рдореБрдЭреЗ рдиреНрдпреВрдирддрдо рд░реЗрдкреЛ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдФрд░ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП?

рдПрдХ рддрд░рдл рдХреЗ рд░реВрдк рдореЗрдВ, рдХреНрдпрд╛ рдЬреЗрд╕реНрдЯ рдпрд╛рд░реНрди рдмреЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЕрдм рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ yarn link jest рдкреИрдХреЗрдЬ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ? рдореИрдВ рдирд╡реАрдирддрдо master рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдмрд╕ рдЕрдЧрд░ рдЗрд╕реЗ рдЕрднреА рддрдХ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВ path/to/facebook/jest/.yarn/releases/yarn-sources.cjs link --all path/to/jest рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ cd node_modules; for p in jest*; do if [[ -d path/to/jest/packages/$p ]]; then rm -rf $p; ln -s path/to/jest/packages/$p; fi; done рдЬреИрд╕рд╛ рдХреБрдЫ рдЪрд▓рд╛рдирд╛ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВред

@vvanpo import() CJS рдореЗрдВ рдиреЛрдб рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЖрдк https://github.com/nodejs/node/issues/31860 рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рд╕реНрдерд╛рдиреАрдп рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдЙрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ jest рд╕реНрдерд╛рдкрдирд╛ рд░рджреНрдж рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ ../jest/jest рдХрд░рддрд╛ рд╣реВрдВред рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ nose ../jest/packages/jest/bin/jest.js ред рдмрд╕ рдкрд╣рд▓реЗ yarn рдФрд░ yarn build:js рдЪрд▓рд╛рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рдпрджрд┐ рдпреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдореИрдВ рдПрдХ рд╡рд┐рдорд╛рди рдореЗрдВ рдПрдХ рдлреЛрди рдкрд░ рдореЗрдореЛрд░реА рд╕реЗ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ) рдХреГрдкрдпрд╛ рдПрдХ рдореБрджреНрджрд╛ (рдпрд╛ рдкреАрдЖрд░) рдЦреЛрд▓реЗрдВ рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реЗ CONTRIBUTING.md рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдареАрдХ рд╕реЗ рд▓рд┐рдЦ рд╕рдХреЗрдВ

рдХреНрдпрд╛ рдЖрдк рдЪрдХреНрд░реАрдп рдЖрдпрд╛рдд рдХреЛ рд╕рдорд░реНрдерди рджреЗрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ?

рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдбрдореА рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рджреЛ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЖрдпрд╛рдд рдХрд░рддреА рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреА рд╣реИ, рддреЛ рдореБрдЭреЗ RangeError: Maximum call stack size exceeded ред рдЕрдЧрд░ рдореИрдВ рдХрд┐рд╕реА рдПрдХ рдЖрдпрд╛рдд рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд░реЗрдкреЛ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ ред

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

ES Modules are only supported if your test environment has the 'getVmContext' function

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдкрд╣рд▓реЗ рдХреЗ рдЙрддреНрддрд░ рдореЗрдВ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ ( @cyberwombat рджреНрд╡рд╛рд░рд╛), рд▓реЗрдХрд┐рди рдЬрд┐рд╕ рдкреИрдХреЗрдЬ рдХреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрд░рд╛рдзреА рдкрд╛рдпрд╛ рд╡рд╣ рд╣рдорд╛рд░реА package.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ (рдпрд╛ рд╕реЗрдЯрд┐рдВрдЧ) рдХреЛ рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реИ? рдореИрдВрдиреЗ рд╣рд░ рдЬреЗрд╕реНрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдЬреЛ рдЗрд╕ рдХрд╛рдо рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЛрдИ рд╕рдлрд▓рддрд╛ рдирд╣реАрдВ рдорд┐рд▓реАред

рдЕрджреНрдпрддрди : рдореИрдВ jest-runtime рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдХреЗ рдкреНрд░рдЧрддрд┐ рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЙрд╕ рд▓рд╛рдЗрди рдкрд░ рдбреАрдмрдЧрд░ рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ рдЬреЛ рд╡реАрдПрдо рд╕рдВрджрд░реНрдн рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрдмрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, this.context (рдЬрд┐рд╕реЗ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП) рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрд╕ рд▓рд╛рдЗрди рдХреЛ рд╕реАрдзреЗ рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рджрд┐рдпрд╛ред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж @SimenB рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдЕрдВрджрд╛рдЬрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рдХрд┐рд╕реА рднреА рдорджрдж рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢реБрдХреНрд░рд┐рдпрд╛

рдХреНрдпрд╛ рдЖрдк рдЪрдХреНрд░реАрдп рдЖрдпрд╛рдд рдХреЛ рд╕рдорд░реНрдерди рджреЗрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ?

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ! рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ?


@zsombro рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЖрдк рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдХреБрдЫ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдЪрд▓рд╛рддреЗ рд╣реИрдВ jest --show-config , рдХреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ testEnvironment ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рд╡реЗрд╢ рдХрд╛ рдХреЛрдИ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдЪрд▓рд╛рддреЗ рд╣реИрдВ jest --show-config , рдХреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ testEnvironment ?

@SimenB рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╣рддрд╛ рд╣реИ:

"testEnvironment": "/Users/zberki/git/project-name/node_modules/jest-environment-node/build/index.js",
"testEnvironmentOptions": {},

рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реЗ рдЕрднреА jest-environment-node рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ

рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ yarn add jest@latest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЗрд╕реНрдЯ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ред рдХреНрдпрд╛ рдореБрдЭреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛?

рдЕрджреНрдпрддрди: рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХрд░рдирд╛ рдерд╛ред рдореИрдВрдиреЗ рдХреНрд▓реАрди рдЗрдВрд╕реНрдЯрд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП node_modules рдФрд░ yarn.lock рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ yarn add -D jest-environment-node рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ? рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЛрдбрдмреЗрд╕ рдкрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдиреНрдпреВрдирддрдо рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдереА рдФрд░ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА

yarn list jest-environemnt-node (рдпрд╛ npm list jest-environemnt-node ) рд╢рд╛рдпрдж рдПрдХрд╛рдзрд┐рдХ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдЧрд╛, рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ

тФЬтФА [email protected]
тФВ  тФФтФА [email protected]
тФФтФА [email protected]

26.2.0 рд╕рдВрд╕реНрдХрд░рдг рд╢рд╛рдпрдж рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо package.json рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ jest-config рдиреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдирд╛ рд╣реИ?

рдЖрдкрдХреЗ рдкрд╛рд╕ jest-config ( react-scripts рд╢рд╛рдпрдж ( create-react-app рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛) рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреБрдЫ рдФрд░ рдЦреАрдВрдЪ рд░рд╣рд╛ рд╣реИ?) рдпрд╣ рдореБрджреНрджрд╛ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП

рдореЗрд░реЗ globalSetup рдореЗрдВ ES рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рд╕реЗ рдЪреЛрдЯ рд▓рдЧрдиреЗ рд▓рдЧреА рд╣реИред

рджреЛ рдмрд┐рдВрджреБ:

  • рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)?
  • рдЕрдЧрд░ рдХреЛрдИ рдЕрд▓реНрдлрд╛/рдмреАрдЯрд╛ рд╣реИ рддреЛ рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ

рдореИрдВ:

  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдирд╡реАрдирддрдо рдЬреЗрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдБ (26.4.0)
  • рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЗрд╕реНрдЯ-рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ-рдиреЛрдб рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд▓реЙрдХрдлрд╛рдЗрд▓ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдХреЗ рдЗрд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  • Jest.config.json рдореЗрдВ "testEnvironment": "jest-environment-node", рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • import { jest } from '@jest/globals'; рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдЬрд╣рд╛рдВ рднреА рдордЬрд╛рдХ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
  • --experimental-vm-modules рд╕рд╛рде рдЪрд▓рд╛рдХрд░ рдкрд░реАрдХреНрд╖рдг рдХрдорд╛рдВрдб рд╕реЗрдЯрд┐рдВрдЧ NODE_OPTIONS='--experimental-vm-modules' yarn jest

рдФрд░ рдпрд╣ рдирд┐рдореНрди рдХреЛрдб рдкрд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

jest.mock('../../some/other/path', () => ({
  someOtherMethod: jest.fn().mockImplementation(тАж),
}));

рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде (рд╕рдВрдХреНрд╖рд┐рдкреНрдд - "рдЕрдиреБрдордд рдСрдмреНрдЬреЗрдХреНрдЯ" рдиреЛрдЯ рдХрд░реЗрдВ!):

ReferenceError: src/foo/bar.spec.js: The module factory of `jest.mock()` is not allowed to reference any out-of-scope variables.
Invalid variable access: jest
Allowed objects: Array, тАж, jest, тАж, unescape.
Note: This is a precaution to guard against uninitialized mock variables. If it is ensured that the mock is required lazily, variable names prefixed with `mock` (case insensitive) are permitted.

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

-import { map } from 'lodash';
+import lodash from 'lodash';
+const { map } = lodash;

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ @babel/preset-env рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк TypeError: Cannot destructure property 'map' of '_lodash.default' as it is undefined. ред

рдХреНрдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк _can_ рджреЗрд╢реА рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдЬреЗрд╕реНрдЯ + рдмреЗрдмреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ-рдХреЙрдордирдЬреЗрдПрд╕ рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдЧрдд рдХреЛрдб рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдШреГрдгрд┐рдд рдлрд┐рдХреНрд╕ рдХрд░рдХреЗ:

jest.mock('common-js-module', () => ({
  __esModule: false,
  ...jest.requireActual('common-js-module'),
}));

рддрд░рд╣ рд╕реЗ,

import lodash from 'lodash';
const { map } = lodash;

рдиреЛрдб 14 рджреНрд╡рд╛рд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЛрдб рдЬреЗрд╕реНрдЯ + рдмреЗрдмреЗрд▓ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ,

var _lodash = _interopRequireDefault(require("lodash"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const {
  map
} = _lodash.default;

рднреА рдЪрд▓рддрд╛ рд╣реИред

рд╣рдордиреЗ рдЕрдкрдиреЗ ES6 рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рднреА рдЬреЗрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдХреБрдЫ рдкреИрдХреЗрдЬреЛрдВ рдкрд░ рдЕрдЯрдХ рдЧрдП рд╣реИрдВ: рдЕрд░реНрдерд╛рддреН puppeteer рдФрд░ uuid

рдРрдк рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ (рдЬреИрд╕реЗ import uuid from 'uuid' ) рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЪрд▓реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рд╣рдо рдЗрд╕ рдЖрдпрд╛рдд рдХреЛ рдбрд┐рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдЬреИрд╕реЗ import { v4 } from 'uuid' рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ: рдкрд░реАрдХреНрд╖рдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрдк рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред

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

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рд╣рдо рдЗрд╕ рдЖрдпрд╛рдд рдХреЛ рдбреАрдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдЬреИрд╕реЗ 'рдпреВрдпреВрдЖрдИрдбреА' рд╕реЗ рдЖрдпрд╛рдд {v4} рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ: рдкрд░реАрдХреНрд╖рдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрдк рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдРрдк рдХреЙрдордирдЬреЗрдПрд╕ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред "рдЕрд╕рд▓реА" рд╕реЗ ESM import uuid from 'uuid' рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ uuid рдХрд╛ рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ ESM рдмрд┐рд▓реНрдб рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ ред

рдЕрд░реЗ @SimenB , рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛?

@grantcarthew рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ! рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рд╕рдордп рдмрд┐рддрд╛ рд╕рдХреВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЬреЗрд╕реНрдЯ 27 рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдХрд░ рд╕рдХреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдРрд╕рд╛ рдХрд░ рдкрд╛рдКрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдм рдХреНрдпрд╛ рд╣реИ (рдФрд░ рдпрд╣ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╣реИ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреГрд╖реНрда рд▓рд┐рдЦрдирд╛ рдПрдХ рдЕрдЪреНрдЫреЗ рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ

@SimenB рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЕрдЧрд░ рдЬреЗрд╕реНрдЯ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдЖрдкрдХреА рдХрд┐рд╕реА рддрд░рд╣ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдПрдХ рдИрдПрд╕рдПрдо-рдХреЗрд╡рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЙрдирдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реАрдЬреЗрдПрд╕ рд╣реИ рд▓реЗрдХрд┐рди рдкреНрд░рдХрд╛рд░ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдФрд░ рдиреЛрдб рдЗрд╕рдХреЗ рд╕рд╛рде рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ) рд▓реЗрдХрд┐рди рдЬреЗрд╕реНрдЯ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдареАрдХ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

    C:\dev\codemirror-next-repro-cra\test-in-jest-esm\node_modules\style-mod\dist\style-mod.cjs:15
    export var StyleModule = function StyleModule(spec, options) {

рдпрд╣рд╛рдБ рдореБрджреНрджрд╛ рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ https://github.com/codemirror/codemirror.next/issues/310 рдЦреЛрд▓рд╛ https://github.com/dubzzz/codemirror-next-repro-cra/tree/main/test-in-jest-esm

@dubzzz рдЖрдкрдХреЗ рдкрд╛рд╕ cjs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ ESM рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдиреЛрдб рднреА рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

$ node node_modules/style-mod/dist/style-mod.cjs
(node:48829) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
/Users/simen/repos/codemirror-next-repro-cra/test-in-jest-esm/node_modules/style-mod/dist/style-mod.cjs:15
export var StyleModule = function StyleModule(spec, options) {
^^^^^^

SyntaxError: Unexpected token 'export'
    at wrapSafe (internal/modules/cjs/loader.js:1172:16)
    at Module._compile (internal/modules/cjs/loader.js:1220:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1277:10)
    at Module.load (internal/modules/cjs/loader.js:1105:32)
    at Function.Module._load (internal/modules/cjs/loader.js:967:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
    at internal/main/run_main_module.js:17:47

рдУрд╣ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдиреЛрдб рдкрдХреНрд╖ рдкрд░ рдмрд╣реБрдд рдЬрд▓реНрджреА рдХреЛрд╢рд┐рд╢ рдХреАред @ nicolo-ribaudo рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦрдХ рдХреЛ lib рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред
рдЖрдкрдХреЗ рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдХреБрдЫ (рдХрд╛рдлреА рдЬреНрдпрд╛рджрд╛ рдареВрдВрда) рдбреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓рд╛: #10611ред рдореИрдВрдиреЗ рд▓рд╛рдкрддрд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ/рдмрдЧреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЬрд╣рдордд рдирд╣реАрдВ рдЙрдард╛рдИ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рддрд╛рд▓рдореЗрд▓ рдмрд┐рдард╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛, рдФрд░ рдЬреАрдердм рдореБрджреНрджреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ (рдЙрдореНрдореАрдж рд╣реИ ...) рдЕрдк рдЯреВ рдбреЗрдЯ рд╣реИрдВред

@Pomax рдПрдХ рдирдП рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдХреГрдкрдпрд╛

рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА #10620 рдЦреЛрд▓рд╛ рд╣реИ рдЬреЛ CJS рд╕реЗ import() рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдХреБрдЫ рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреИрд╕реЗ https://github.com/facebook/jest/issues/9430#issuecomment -626054595

рдирдорд╕реНрдХрд╛рд░ред рдИрдПрд╕рдПрдо рдХреЗ рдкреАрдЫреЗ рдХреА рдкреВрд░реА рдХрд╣рд╛рдиреА рдХреЛ рдиреЛрдб/рдЬреЗрд╕реНрдЯ рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдЧрд▓реЗ рд▓рдЧрд╛рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдХрдард┐рди рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╢рд╛рдпрдж, рдореИрдВ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ рдкрд╣рд▓реЗ рд╣реА рдЙрддреНрддрд░ рджреЗ рдЪреБрдХрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓рд╛ рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ? рдпрд╛, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ, рдореИрдВ рдХреБрдЫ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ? рдореИрдВ рдЗрд╕реЗ import x from 'x' рдХрд╛рдореЛрдВ рдХреА рддрд░рд╣ рдЕрдиреБрднрд╡ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди import { sub } from 'x' рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред

рдкреИрдХреЗрдЬ.рдЬреЗрд╕рди:

{
  "name": "jest-uuid",
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "test": "node --experimental-vm-modules node_modules/.bin/jest"
  },
  "devDependencies": {
    "jest": "26.5.2"
  },
  "dependencies": {
    "uuid": "8.3.1"
  }
}

f.spec.js

import { v4 } from 'uuid';
test('', () => {});

рдПрдирдкреАрдПрдо рдкрд░реАрдХреНрд╖рдг

> npm test

> [email protected] test /Users/igoro/p/tmp/jest-uuid
> node --experimental-vm-modules node_modules/.bin/jest

 FAIL  ./f.spec.js
  тЧП Test suite failed to run

    SyntaxError: The requested module 'uuid' does not provide an export named 'v4'

      at jasmine2 (node_modules/jest-jasmine2/build/index.js:228:5)

Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        0.879 s
Ran all test suites.
(node:94492) ExperimentalWarning: VM Modules is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
npm ERR! Test failed.  See above for more details.

рдЖрдк #9771 рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ. рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЬреЗрд╕реНрдЯ рдХреЛ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ uuid рдХреЛ ESM рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ (рдпрд╛ рдпреЛрдВ рдХрд╣реЗрдВ рдХрд┐ рдХрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рд▓реЛрдб рдХрд░рдирд╛ рд╣реИ, рдЙрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдпрд╣ ESM рд╣реИ)

рдХреНрдпрд╛ рдпрд╣ рдиреЛрдб рдХреЗ рдЕрдкрдиреЗ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛, рдЬрд╣рд╛рдВ рд╕реАрдЬреЗрдПрд╕ рдХреЛ рдХреЗрд╡рд▓ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рдЙрд╕ рдкрд░ "рд╕реБрдзрд╛рд░" рдХрд░реЗрдЧрд╛ рдЬреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдиреЛрдб рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдиреЛрдб import { readdirSync } from "fs-extra" рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╕реАрдЬреЗрдПрд╕ рдкреИрдХреЗрдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ import fs from "fs-extra"; рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ const { readdirSync } = fs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдирдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

(рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдиреЛрдб "child_process" рд╕реЗ рдЖрдпрд╛рдд {рд╕реНрдкреЙрди} рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╕реАрдЬреЗрдПрд╕ рдкреИрдХреЗрдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ "child_process" рд╕реЗ рдЪрд╛рдЗрд▓реНрдб_рдкреНрд░реЛрд╕реЗрд╕ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ; рдЬрд┐рд╕реЗ рддрдм рдХреЙрдиреНрд╕реНрдЯ {рд╕реНрдкреЙрди} = рдЪрд╛рдЗрд▓реНрдб_рдкреНрд░реЛрд╕реЗрд╕; рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдирдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рдпрд╣ рдПрдХ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдиреЛрдб "child_process" рдХреЛ "рдмрд┐рд▓реНрдЯрд┐рди" (рдФрд░ CJS рдирд╣реАрдВ) рдореЙрдбреНрдпреВрд▓ рдорд╛рдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рдд рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдирд╡реАрдирддрдо рдиреЛрдбрдЬ рднреА рдХрдИ рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рддреЛрдВ рдХреЛ рд╕реАрдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдорд╛рдиреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдиреЛрдб рдХреЛрд░ рдореЙрдбреНрдпреВрд▓ рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рдд рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ, "рд╕рд╛рдорд╛рдиреНрдп" рд╕реАрдЬреЗрдПрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

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

рдкреАрдЖрд░ рдпрд╣рд╛рдБ рд╣реИ: https://github.com/nodejs/node/pull/35249

рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХрд╛ рдЕрдиреБрдорд╛рди cjs-module-lexer (https://github.com/guybedford/cjs-module-lexer) рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди @guybedford рдХрд┐рд╕реА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдЪрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддрд╛ рд╣реИред

рдмрд╕ рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реА рдФрд░ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ fs-extra рдПрдХ рдирд┐рд░реНрдпрд╛рдд рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ:

module.exports = {
  // Export promiseified graceful-fs:
  ...require('./fs'),
  // Export extra methods:
  ...require('./copy-sync'),
  ...require('./copy'),
  ...require('./empty'),
  ...require('./ensure'),
  ...require('./json'),
  ...require('./mkdirs'),
  ...require('./move-sync'),
  ...require('./move'),
  ...require('./output'),
  ...require('./path-exists'),
  ...require('./remove')
}

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

рдзрдиреНрдпрд╡рд╛рдж @jkrems рдФрд░ @guybedford! рдореИрдВрдиреЗ рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдм рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓рд╛ рд╣реИ: #10673

https://github.com/facebook/jest/issues/9430#issuecomment -713204282 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдЯреАрдХ fs-рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдорд░реНрдерди рдЕрдм https://github рдкрд░ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдЯреНрд░реИрдХрд┐рдВрдЧ [email protected] рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдХреЙрдо/рдиреЛрдбрдЬ/рдиреЛрдб/рдкреБрд▓/35745.

_рдЕрдкрдбреЗрдЯ: рдЗрд╕ рдмрд┐рд▓реНрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рд╕рднреА fs-рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ Node.js рдореВрд▓ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдкреЙрдкреНрдпреБрд▓реЗрдЯ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВред_

рдХрд░рддрдм: рд╕реАрдЬреЗрдПрд╕ рд╕реЗ рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рдд рдХреЛ рдИрдПрд╕рдПрдо рдЖрдпрд╛рдд рдХреЗ рдирд╛рдо рд╕реЗ рд╕рдорд░реНрдерди #10673

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рджреЗрд╢реА рдИрдПрд╕рдПрдо рдХреЗрд╡рд▓ рдХреЙрдордирдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ exports рдХреЛ default рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ?

@trusktr рдЕрдм рдФрд░ рдирд╣реАрдВ: https://github.com/nodejs/node/pull/35249

рдирдорд╕реНрдХрд╛рд░ред рдИрдПрд╕рдПрдо рдХреЗ рдкреАрдЫреЗ рдХреА рдкреВрд░реА рдХрд╣рд╛рдиреА рдХреЛ рдиреЛрдб/рдЬреЗрд╕реНрдЯ рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдЧрд▓реЗ рд▓рдЧрд╛рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдХрдард┐рди рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╢рд╛рдпрдж, рдореИрдВ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ рдкрд╣рд▓реЗ рд╣реА рдЙрддреНрддрд░ рджреЗ рдЪреБрдХрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓рд╛ рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ? рдпрд╛, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ, рдореИрдВ рдХреБрдЫ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ? рдореИрдВ рдЗрд╕реЗ import x from 'x' рдХрд╛рдореЛрдВ рдХреА рддрд░рд╣ рдЕрдиреБрднрд╡ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди import { sub } from 'x' рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред

...
рдЖрдпрд╛рдд {v4} 'uuid' рд╕реЗ;

рдИрдПрд╕рдПрдо рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдЖрдпрд╛рдд рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 'рдирд┐рд░реНрдпрд╛рдд v4' рдХреА рдЬрд░реВрд░рдд рд╣реИред 'рдирд┐рд░реНрдпрд╛рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ' рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рдПрдЧрд╛ред

https://kentcdodds.com/blog/рдЧрд▓рддрдлрд╣рдореА-es6-modules-upgrading-babel-tears-and-a-solution

@sdwlig uuid рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рдд рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд▓реЗрдХрд┐рди "рдирд┐рд░реНрдпрд╛рдд" рдлрд╝реАрд▓реНрдб рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬ рд╕реЗ рдИрдПрд╕рдПрдо рд▓реЛрдб рдХрд░рдирд╛ рдЕрднреА рддрдХ рдЬреЗрд╕реНрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЙрдордирдЬ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИред
https://github.com/uuidjs/uuid/blob/master/src/index.js

рдХреНрдпрд╛ рд╣рдо рдЗрд╕рдореЗрдВ рдкреИрдХреЗрдЬ рд╕реЗрд▓реНрдл-рд░реЗрдлрд░реЗрдВрд╕ рд╕рдкреЛрд░реНрдЯ (#10883) рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ?

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

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

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

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

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

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

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