Mocha: рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ ES6 рд╢реИрд▓реА рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рд╕рд┐рддре░ 2017  ┬╖  75рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mochajs/mocha

рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ

  • [x] common mistake рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде рдХреНрд░реЙрд╕ рд░реЗрдлрд╝рд░реЗрдВрд╕рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдХрд┐ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рджрд░реНрдЬ рдирд╣реАрдВ рд╣реИ
  • [x] рдореЛрдЪрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╣реА рдкрд░реНрдпрд╛рд╡рд░рдг рдФрд░/рдпрд╛ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдЧрд▓реА-рдЬреЗрди рдИрдПрд╕ рдореБрджреНрджреЛрдВ рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ рдпрд╛ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ .
  • [x] 'рд╕реНрдореЛрдХ рдЯреЗрд╕реНрдЯреЗрдб' рдХреЛрдб рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓рд╛рдХрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭ рд╕рдХреЗ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд╣рдд рдХреЛрдб рдореЗрдВ рд╣реИ, рдореЛрдЪрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ, рдпрд╛ рдореЛрдЪрд╛ рд╕реНрд╡рдпрдВ
  • [x] рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдореЛрдЪрд╛ рдХреЗ рд╕реНрдерд╛рдиреАрдп рдФрд░ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рд╡рд┐рд╕рдВрдЧрддрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
    node node_modules/.bin/mocha --version (рд╕реНрдерд╛рдиреАрдп) рдФрд░ mocha --version (рд╡реИрд╢реНрд╡рд┐рдХ)ред рд╣рдо рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдореЛрдЪрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред

рд╡рд┐рд╡рд░рдг

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

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

рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рд╣реИ

describe('Test', function () {
});

рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ test.js рдФрд░ test.mjs рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рд╣реИ

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░: рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рджреЛрдиреЛрдВ рдкрд░реАрдХреНрд╖рдг рджрд┐рдЦрд╛рдП рдЬрд╛рдПрдВ

- test/test.js 
  0 passing (1ms)
(node:70422) ExperimentalWarning: The ESM module loader is experimental.

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░: рдЬрдмрдХрд┐ js рдкрд░реАрдХреНрд╖рдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, mjs рдкрд░реАрдХреНрд╖рдг рдореБрдЭреЗ рджреЗрддрд╛ рд╣реИ

- test/test.mjs 
module.js:658
    throw new errors.Error('ERR_REQUIRE_ESM', filename);
    ^

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/dgehl/Repositories/LOreal/code/ecom-lora/test/frontend/components/global/test.mjs

рдХрд┐рддрдиреА рдмрд╛рд░ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ: 100%

рд╕рдВрд╕реНрдХрд░рдгреЛрдВ

node --version - v8.5.0
mocha --version - 3.5.3

рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА

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

рдХреГрдкрдпрд╛ "рдПрдХ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдХреЗ рд╕рд╛рде рдЙрддреНрддрд░ рди рджреЗрдВ, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдореИрдВрдиреЗ рдЧрд▓рддреА рд╕реЗ mjs рдХреЗ рдмрдЬрд╛рдп jsx рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред

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

рд╣рдордиреЗ рдореЛрдЪрд╛ v7.1.0.1 рдореЗрдВ рдиреЛрдб рдХреЗ рдореВрд▓ рдИрдПрд╕рдПрдо рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред

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

рдХреЛрдИ рдФрд░ рд╢реЛрдз рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореЗрд░реЗ рд╕рд┐рд░ рдХреЗ рдКрдкрд░ рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдЪрд╛рд░:

  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреЛрдб рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЙрдордирдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдкрд╢реНрдЪ рд╕рдВрдЧрддрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдЕрдЧрд░ рдпрд╣ (рдЕрднреА рднреА?) рд╕рдЪ рд╣реИ, рддреЛ рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдВрддрддрдГ рдореЛрдЪрд╛ рдХреЗ рд╕рд╛рде/рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред (рдФрд░ "рдЖрдЦрд┐рд░рдХрд╛рд░" рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ "рд╕рдВрднрд╡рддрдГ рдореЛрдЪрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рднреА рддреЗрдЬ", рдиреЛрдб рдХреЗ рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдХреА рджрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП; рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЬреЛрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред)
  • рдХреНрдпрд╛ рдореИрдВ рдорд╛рди рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ node --experimental-modules node_modules/mocha/bin/_mocha рдЬреИрд╕рд╛ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛?
  • .jsx рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИ? рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рддреНрд░реБрдЯрд┐ рдЙрджрд╛рд╣рд░рдг .mjs рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ jsx рд╣реИред
  • рдореБрдЭреЗ .mjs рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдиреЛрдб рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕реБрдирд╡рд╛рдИ рднреА рдЕрд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛рдж рд╣реИ; рдпрджрд┐ рд╡рд╣ (рдЕрднреА рднреА?) рд╕рддреНрдп рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк import / export рдХрд╛ рдЙрдкрдпреЛрдЧ .jsx рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдпрд╛ рддреЛ import рдПрдХ .jsx рдореЗрдВ .mjs рдлрд╝рд╛рдЗрд▓ рдпрд╛ .jsx рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ import / export рд╢рд╛рдорд┐рд▓ рд╣реИ), рдХреНрдпрд╛ рдпрд╣ рдореЛрдЪрд╛ рдХреЗ рдмрдЬрд╛рдп рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
  • рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдореЛрдЪрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд░ рдореЗрдЬрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреА - рдЕрдиреНрдпрдерд╛ рдЖрдк рдареАрдХ рдЙрд╕реА рдЬрдЧрд╣ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЕрднреА рд╣реИрдВ, рдХреЗрд╡рд▓ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ (рдЪреВрдВрдХрд┐ рдореЛрдЪрд╛ рдХрд╛ рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдиреЛрдб рдХреА рддрд░рд╣ рд╕рд╛рд▓ рдореЗрдВ рджреЛ рдмрд╛рд░ рд▓реЙрдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)ред
  • рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдореЗрд░реА рдЕрдкрдиреА рд░рд╛рдп рд╕реЗ рдФрд░ рдЯреАрдо рдХреА рдУрд░ рд╕реЗ рдирд╣реАрдВ, рдпрджрд┐ рдирдпрд╛ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рд╛рд░реВрдк рдкреБрд░рд╛рдиреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдореМрдЬреВрджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕рдВрд╢реЛрдзрди рдХрд┐рдП рдмрд┐рдирд╛ рдкреБрд░рд╛рдиреЗ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдкрд░реЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдирдпрд╛ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рд╛рд░реВрдк рдЕрднреА рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ ред

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

рдореЗрд░реЗ (рдЫреЛрдЯреЗ) рд╢реЛрдз рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдЕрднреА рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рд╕реЗ require рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдХреЙрдордирдЬ рдореЙрдбреНрдпреВрд▓ рд╕реЗ import рдирд╣реАрдВред

рдХреНрдпрд╛ рдореИрдВ рдорд╛рди рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдиреЛрдб --рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ-рдореЙрдбреНрдпреВрд▓ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓/рдореЛрдЪрд╛/рдмрд┐рди/_рдореЛрдЪрд╛ рдХреА рддрд░рд╣ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛?
.jsx рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИ? рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рддреНрд░реБрдЯрд┐ рдЙрджрд╛рд╣рд░рдг .mjs рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЬреЛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЬреЗрдПрд╕рдПрдХреНрд╕ рд╣реИред

рд╣рд╛рдВ, рдЗрд╕реЗ --experimental-modules рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред jsx рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ mjs , рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреЛрд╕реНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛ред

рдореИрдВ .mjs рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдиреЛрдб рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕реБрдирд╡рд╛рдИ рдХреЛ рднреА рдЕрд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛рдж рдХрд░рддрд╛ рд╣реВрдВ; рдпрджрд┐ рдпрд╣ (рдЕрднреА рднреА?) рд╕рддреНрдп рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк .jsx рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд/рдирд┐рд░реНрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдпрд╛ рддреЛ .jsx рдлрд╝рд╛рдЗрд▓ рдХреЛ .mjs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдЖрдпрд╛рдд/рдирд┐рд░реНрдпрд╛рдд рд╡рд╛рд▓реА .jsx рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ), рддреЛ рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдореЛрдЪрд╛ рдХреЗ рдмрдЬрд╛рдп рдореБрджреНрджрд╛ рд╣реЛ?

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

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

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

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореМрдЬреВрджрд╛ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЖрдпрд╛рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдбрдЬ рдЯреАрдо рдХреЗ рд░реЛрдбрдореИрдк рдкрд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдордпрд╕реАрдорд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред

рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ "рдкреБрд░рд╛рдиреЗ" (рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЧреИрд░-рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ) рд╡рд╛рддрд╛рд╡рд░рдг import рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐ рд╣реИ, рдЬрд┐рд╕реЗ рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЯрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдореЛрдЪрд╛ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ import рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд▓реНрдХрд┐ рдирдП рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ (рдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ) рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП require рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред

jsx рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ, рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ mjs , рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреЛрд╕реНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛ред

рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдХреЛрдг рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ!

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

рдореЛрдЪрд╛ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХреБрдЫ рдЕрдзрд┐рдХ рд░рд╣рд╕реНрдпрдордп рдЖрдВрддрд░рд┐рдХреЛрдВ рдХреЗ рд╡реНрдпрд╛рдкрдХ рдкреБрдирд░реНрд▓реЗрдЦрди рдХреЗ рдмрд┐рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ (рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрд╛ ЁЯШ┐); рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ JS рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдм "рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ" API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╡ рд╣реИ (рдЬреЛ рдкреБрд░рд╛рдиреЗ рд╡рд┐рдХреА рдкреГрд╖реНрда рдХреЗ рдмрд╛рд╣рд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ JSDoc рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИ):

// test.mjs
var Mocha = require('mocha'),
var mocha = new Mocha();

// your mission: create a file `example.mjs`
// in the `test` folder and have it `import` stuff
// as well as using `describe` and `it` to make tests
mocha.addFile("./test/example.mjs");

mocha.run(function(failures){
  process.on('exit', function () {
    process.exit(failures ? 1 : 0);
  });
});
node --experimental-modules test.mjs

рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ (рдкрд╣рд▓реЗ рдиреЛрдб рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ...

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

рдореИрдВрдиреЗ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА

// runner.mjs
import Mocha from 'mocha';
var mocha = new Mocha();

// your mission: create a file `example.mjs`
// in the `test` folder and have it `import` stuff
// as well as using `describe` and `it` to make tests
mocha.addFile('./test/frontend/components/global/test.mjs');

mocha.run(function (failures) {
    process.on('exit', function () {
        process.exit(failures ? 1 : 0);
    });
});

рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдиреЛрдб рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ рдХреЛ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛ рджрд┐рдпрд╛ред

рдореИрдВ рдЗрд╕реЗ node --experimental-modules --harmony ./runner.mjs . рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ

рдореБрдЭреЗ рдорд┐рд▓рд╛

(node:88620) ExperimentalWarning: The ESM module loader is experimental.
{ Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /.../test/frontend/components/global/test.mjs
    at Object.Module._extensions..mjs (module.js:658:11)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)

рдореЛрдЪрд╛ рдХреЛ import рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдирдП рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ (рдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ) рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдиреЛрдб рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдХреЗрд╡рд▓ require рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рд╣реИ import ред рдХреНрдпрд╛ mocha.addFile('./test/frontend/components/global/test.mjs'); рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкрд░реАрдХреНрд╖рдг рдЖрдпрд╛рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рдЖрдпрд╛рддрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ

import test from './test';
mocha.addTest(test);

?

рдЗрд╕ рд╕рдордп рдореЛрдЪрд╛ рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рд╕рдорд╛рд░реЛрд╣ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред addFile рдмрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдмрд╛рдж рдореЗрдВ run рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ require d рд╣реИред run рдлрд╝рдВрдХреНрд╢рди рдЙрдиреНрд╣реЗрдВ loadFiles рд╕реЗ require рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ:

https://github.com/mochajs/mocha/blob/1cc0fc0e6153bbd746b0c2da565363570432cdf7/lib/mocha.js#L220 -L235

рдЖрдк рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рд╕реЗ $#$7 require #$ рдХреЗ рдмрдЬрд╛рдп import рдПрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП d addFile рдкрд░ рдХреЙрд▓ рди рдХрд░реЗрдВ (рдЗрд╕рд▓рд┐рдП рдореЛрдЪрд╛ require рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ run рдкрд░) рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп run рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдХреЛрдб рдХреЙрд▓ рдХрд░реЗрдВ рдЬреЛ loadFiles рдореЗрдВ рд╣реИ рд▓реЗрдХрд┐рди require рдХреЗ рдмрдЬрд╛рдп import рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ require ред рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЗ рдКрдкрд░ рд╕реЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ import рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ рдЬреЛ рдЗрд╕реЗ рд░реЛрдХреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХрд░реАрдм рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

modules.forEach(function (file) {
  file = path.resolve(file);
  mocha.suite.emit('pre-require', global, file, mocha);
  import fileExport from file; // fileExport is used by the exports interface, not sure if anything else; most interfaces act as a side effect of running the file
  mocha.suite.emit('require', fileExport, file, mocha);
  mocha.suite.emit('post-require', global, file, mocha);
});

рдЖрдк рдпрд╣ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ https://github.com/mochajs/mocha/blob/master/bin/_mocha рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдФрд░ Mocha рдХреА рдлрд╝рд╛рдЗрд▓ рд▓реБрдХрдЕрдк рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреИрд╕реА рдЪреАрдЬрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП Mocha рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рд╡рд╣рд╛рдВ рд╣реИ (рдпрд╛ рддреЛ рд╕реАрдзреЗ рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореЛрдЪрд╛ рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдПрдкреАрдЖрдИ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╣реИ)ред

рдореИрдВ рдПрдХ рдХрджрдо рдЖрдЧреЗ рдЖ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЖрдпрд╛рддрд┐рдд рдкрд░реАрдХреНрд╖рдг рдЕрдм рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрдгрди ( ReferenceError: describe is not defined ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ? рдпрджрд┐ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдБ

import Mocha from 'mocha';
const describe = Mocha.describe;

рдпрд╣ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ TypeError: describe is not a function

рддреЛ, рдореЗрд░реЗ рдбрд┐рд╕реНрдЯреНрд░реЛ рдХреЛ рдЖрдЦрд┐рд░рдХрд╛рд░ NodeJS 8.5 рдорд┐рд▓ рдЧрдпрд╛, рдФрд░ рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдХреВрдмрдбрд╝ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдореИрдВ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░ рдкрд╛рддрд╛, рддрдм рддрдХ рдпрд╣ рдмрддрд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛:

  1. рдореБрдЭреЗ рдХрд┐рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ/рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрд╕рдХрд╛ рдирд╛рдо рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдП рдмрд┐рдирд╛ ES рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЛрдЪрд╛ рдЙрдиреНрд╣реЗрдВ рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЪрд╛рд╣реЗ рд╣рдо рдХреБрдЫ рднреА рдХрд░реЗрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдИрдПрд╕ рдмрдирд╛рдо рдХреЙрдордирдЬреЗрдПрд╕ рд╕реЗрдореЗрдиреНрдЯрд┐рдХреНрд╕ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ред рдЕрдЧрд░ рдФрд░ рдХрдм рдпрд╣ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред (рдпрджрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рдмрджрд▓рддрд╛ рд╣реИ рдХрд┐ ES рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рдЪрд░ require рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╢рд╛рдпрдж рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреИрд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред ред)
  2. рдЬрдмрдХрд┐ рдореЛрдЪрд╛ pre-require рдШрдЯрдирд╛ рдЙрддреНрд╕рд░реНрдЬрди рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдЬрдм рдореЙрдбреНрдпреВрд▓ рдкрд╣рд▓реА рдмрд╛рд░ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ; рдЪреБрдирд╛ рдЧрдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ new Mocha рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ), рдирдпрд╛ рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдкреЗрдбрд╝ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрди рдкрд░ рдирд┐рд░реНрднрд░ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд░реНрднрд░рддрд╛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╛рд░рдг describe рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореЛрдЪрд╛ рдкрд░реАрдХреНрд╖рдг рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рд╣реЛрдиреЗ рддрдХ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдХреБрдЫ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдлрд┐рд░ рд╕реЗ, рдЬрдм рддрдХ рдХрд┐ require(file) рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрди рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЕрдзрд┐рдорд╛рдирддрдГ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдЫ рдФрд░ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ )

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

https://gist.github.com/anonymous/caba0883254a2349c5615df8e9286665

node --experimental-modules ./run.mjs

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

рдЗрд╕реЗ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╕реЛрдЪреЗрдВ:

  • import рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИред
  • require рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред

рдЖрдк рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ import рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЖрдк рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, eval() ред

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

рдЬреИрд╕реЗ, рдореЛрдЪрд╛ рдХреЗ рд▓рд┐рдП .mjs рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм mocha рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реЛ, рд╢рд╛рдпрдж @std/esm рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдФрд░ require .mjs рд╕рд╛рде рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реЛред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдРрд╕рд╛ рдЬрд┐рд╕реЗ рд╣рдо рд╕рдорд░реНрдерди рджреЗрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЪрд░реНрдЪрд╛ (рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдкреАрдЖрд░) рдХреЛ рд╕рдореБрджрд╛рдп рд╕реЗ рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдХрдо рд╕реЗ рдХрдо рдЬрдм рддрдХ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдзреНрд╡рдЬ рдХреЗ рдкреАрдЫреЗ рди рд╣реЛред

import describe from 'mocha' рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реВрдЪреА рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдард┐рдирд╛рдИ рдХреЗ рдХрд╛рд░рдг (#956)ред node рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рдкрдХреЗ рд░рд╣реЗрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореЗрд░реЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ vm.runInContext рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдРрд╕реА рдЪреАрдЬ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред рдЪреВрдВрдХрд┐ рдиреЛрдб рдХрд╛ рд▓реЛрдбрд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ .mjs рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ vm.runInContext рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рди рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ- рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдХрд╣реАрдВ рдХреЛрдИ рдорд╕рд▓рд╛?

(рдлрд┐рд░ рдлрд┐рд░, рдпрд╣ рд╡рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ @std/esm рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдХрд░рддрд╛ рд╣реИ!)

рдореЗрд░реЗ рдкрд╛рд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдореЛрдЪрд╛ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВред рд╢рд╛рдпрдж рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдореЛрдЪрд╛ рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреАрдВрдЪ рд░рд╣реЗ рд╣реИрдВ ...

рдЦреЗрдж рд╣реИ рдХрд┐ рдореИрдВ рднреНрд░рдорд┐рдд рд╣реВрдБред рдпрд╣ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЕрд▓рдЧ рд╣реИред

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

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЦрдбрд╝рд╛ рд╣реИ, Node.js 9.5 рдПрдХ CommonJS рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ ES6 рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ () рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд╢рд╛рдпрдж рд╡реЗ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред

рдореИрдВрдиреЗ .mjs рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде ES6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрд╛ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рд▓реЛрдбрд░ рд╕реЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ mocha рдХрдорд╛рдВрдб рдХреЗ рдкрд░рд┐рдгрд╛рдо require() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред

.js рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░реЗрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП require() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рд╡рд╣ рднреА рд▓реЛрдбрд░ рд╕реЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ Node.js рджреБрдирд┐рдпрд╛ рдХреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╡реЗ ES6 рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреИрд╕реЗ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ рдФрд░ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗред рдЪреВрдВрдХрд┐ рдореЛрдЪрд╛ рдЗрд╕ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рдЙрдкрдХрд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЛрдЪрд╛ рдЯреАрдо рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ ES6 рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЕрдиреБрд╡рд░реНрддреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ... рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдЦреЛрдЬ рдХреЗ рдмрд╛рдж рдореИрдВ рдЗрд╕ рдХреНрд░рдо рдХреЛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ .js рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдирд╛рдо рджреЗрдВ (рдЗрд╕реЗ рдХреЙрдордирдЬреЗрдПрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рддреЗ рд╣реБрдП)

рдлрд┐рд░ рдЗрд╕реЗ рдЯреЗрд╕реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

require = require("@std/esm")(module,{"esm":"js"});

рддрдм рдореИрдВ require() рдПрдХ ES рдореЙрдбреНрдпреВрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

const model = require('../models/notes');

@robogeek рдпрд╛ рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рд╕реЗ @std/esm рдкреНрд░реАрд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ .mjs рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

mocha -r @std/esm spec.mjs

--harmony-dynamic-import рдзреНрд╡рдЬ рдХреЗ рдкреАрдЫреЗ рдиреЛрдб v9.6 рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдЬрд╣рд╛рдЬред рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдореЛрдЪрд╛ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ es6 рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

@harrysarson рдпрд╣ рд▓реАрдХ рд╕реЗ рд╣рдЯрдХрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдореЛрдЪрд╛ рд╕реАрдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдФрд░ require рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ $#$1 import #$ рдХреА рдПрд╕рд┐рдВрдХ рдкреНрд░рдХреГрддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреЛрдВрдж рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реАрдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдлрд╛рдЗрд▓реЗрдВ рд▓рд┐рдЦрдиреА рд╣реЛрдВрдЧреАред рдпрд╛ рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рди рдХреБрдЫ рднреВрд▓ рд░рд╣рд╛ рд╣реВрдВ?

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

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

рдореИрдВ рдмрд╕ рдЗрдзрд░-рдЙрдзрд░ рдЦреЗрд▓ рд░рд╣рд╛ рдерд╛, ESM/.mjs рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд░рд╣рд╛ рдерд╛ рдФрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреЗ рдЦрд┐рд▓реМрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЛрдЪрд╛ рдХреЛ рд╕рд╛рдХрд╛рд░ рдХрд░рдирд╛ рдЕрднреА рддрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ .mjs рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдПрдХ рд╕рд╛рде рдПрдХ рддреНрд╡рд░рд┐рдд рдЕрдВрддрд░рд┐рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ (рдЬрдм рддрдХ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдореЛрдЪрд╛ рдХреЛ рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ):

https://www.npmjs.com/package/mocha-esm
рдкреАрдЖрд░/рдореБрджреНрджреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ: https://github.com/stefanpenner/mocha-esm

рд╡рд╣рд╛рдБ рдХреБрдЫ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рде рд░рд╣рдиреЗ рдореЗрдВ рдордЬрд╝рд╛ рдЖрдпрд╛ред рддреЛ \o/

рдореИрдВрдиреЗ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mocha рдХреЛ рд╕реНрд╡рдпрдВ рдлреЛрд░реНрдХ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ (рдЙрдкрд░реЛрдХреНрдд рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓рд╛)ред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП node --experimental-modules --harmony-dynamic-import test.mjs . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ

рдлрд┐рд░ test.mjs рдореЗрдВ:

import 'should';
import Mocha from 'mocha';

const mocha = new Mocha();

mocha.addFile(() => import("./some-module.spec.mjs"));

mocha.run(failures => {
  process.on('exit', function () {
    process.exit(failures ? 1 : 0);
  });
});

рдореИрдВрдиреЗ рдЗрд╕ рдиреНрдпреВрдирддрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЛрдЪрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд░рдЦрд╛, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдВрднрд╛рд╡рд┐рдд рдкреАрдЖрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ рдФрд░ рди рд╣реА рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрдирдкреАрдПрдо рдореЙрдбреНрдпреВрд▓ рдЬреЛрдбрд╝рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рдХрд╛рдВрдЯрд╛ рдХреЛ рд╕реАрдзреЗ рдЬреАрдердм рд╕реЗ "mocha": "git+https://[email protected]/odolha/mocha" рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ .

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

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

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

// some-module.psec.mjs
export const test = ({ describe, it }) => {
  describe('Something', () => {
    it('works', () => {
      ...
}

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

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

@demurgos : no_mouth: рд╣рд╛рдБ ... рдореИрдВрдиреЗ рдЕрдкрдиреА рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдмрд╕ рдЙрд╕ рдкреАрдЖрд░ рдХреЛ рджреЗрдЦрд╛, рдбреА рдУрд╣ ред

@harrysarson @boneskull
esm рдкреИрдХреЗрдЬ (рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ @std/esm рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдиреЗ рдЗрд╕ рдХрдорд┐рдЯ рдореЗрдВ .mjs рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдм рдореЛрдЪрд╛ рдХреЗ рд╕рд╛рде .mjs рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред

рдореИрдВ рдЕрднреА рднреА ES рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдиреЛрдб рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЪрд▓рд╛ рд╕рдХреВрдВред

рд╡рд░реНрддрдорд╛рди рдореЙрдбреНрдпреВрд▓ рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЖрдо рд╕рд╣рдорддрд┐ рд╣реИ рдХрд┐ .mjs рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╢рд╛рдпрдж рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЙрдкрд▓рдмреНрдз рд╣реИ) рдФрд░ рдпрд╣ рдХрд┐ import("./foo.mjs") рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛ рд╕рдВрдмрдВрдзрд┐рдд ES рдирд╛рдорд╕реНрдерд╛рдиред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ CJS рдореЙрдбреНрдпреВрд▓ рдХреЛ default рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ $#$7 module.exports #$ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдмрд╣рд╕ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдзрд╛рд░рдгрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред

рдХреНрдпрд╛ рдореЛрдЪрд╛ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ import рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓ ES рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рдмреЗрд╣рддрд░ рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рдлреАрдЪрд░ рдлреНрд▓реИрдЧ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ --experimental-es-modules (#3253 рд╕реЗ) рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдиреЛрдб рдХреЗ рд╕рдорд░реНрдерди рдХреА рд╡рд░реНрддрдорд╛рди рдкреНрд░рдЧрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред
рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЕрдВрддрд┐рдо рдпреБрдХреНрддрд┐ рдиреЛрдб 12 рддрдХ рдирд╣реАрдВ рдЖрдПрдЧреА, рдЗрд╕рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡рд╣рд╛рдВ рд░рд╣реЗрдЧрд╛ (рдФрд░ рдЕрдВрддрд┐рдо рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕реБрд░рдХреНрд╖рд┐рдд рдЙрдкрд╕рдореБрдЪреНрдЪрдп рд╣реИ)ред

@demurgos рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореЛрдЪрд╛ рдкрд░ рдХрд┐рд╕реА рднреА рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдкрд░ рдереЛрдбрд╝рд╛ рдФрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж @boneskull рдпрд╛ @ScottFreeCode рдЕрд╕рд╣рдордд рд╣реИрдВ?

@demurgos

esm рдкреИрдХреЗрдЬ (рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ @std/esm рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдиреЗ рдЗрд╕ рдХрдорд┐рдЯ рдореЗрдВ .mjs рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред

esm рд▓реЛрдбрд░ рдиреЗ .mjs рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛ред рд╣рдо рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди --experimental-modules рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ .mjs рдХреЛ require $ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рднреА рдЕрдкрдиреА рдкрд░реАрдХреНрд╖рдг рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП .js рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ .mjs рдпрд╛ .js рдХреА рдмрд╛рдж рдХреА рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ESM рд╕рд┐рдВрдЯреИрдХреНрд╕ рдпрд╛ рдЧрддрд┐рд╢реАрд▓ import() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдмрд╣реБрдд рдХреБрдЫ рдЬреИрд╕реЗ esm рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред

рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЕрдВрддрд┐рдо рдпреБрдХреНрддрд┐ рдиреЛрдб 12 рддрдХ рдирд╣реАрдВ рдЖрдПрдЧреА, рдЗрд╕рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡рд╣реАрдВ рд░рд╣реЗрдЧрд╛

--experimental-modules рдХреЛ рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рди рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдордп рдирд╣реАрдВ рд╣реИред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдиреЛрдб 10 рдХреЗ рд╕рдорд░реНрдерди рдЪрдХреНрд░ рдореЗрдВ рдХрднреА рднреА рдЙрддрд░ рд╕рдХрддрд╛ рд╣реИ _(рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓реЗ 2 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдХреБрдЫ рд╕рдордп)_ рд▓реЗрдХрд┐рди рдкрддреНрдерд░ рдореЗрдВ рдХреБрдЫ рднреА рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред

(рдФрд░ рдЕрдВрддрд┐рдо рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕реБрд░рдХреНрд╖рд┐рдд рдЙрдкрд╕рдореБрдЪреНрдЪрдп рд╣реИ)ред

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

esm рд▓реЛрдбрд░ рдиреЗ .mjs рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛ред

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

рд╕рдордп рд╕реАрдорд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреЛрдб 11 рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдпрд╛рд╕ рдФрд░ рдиреЛрдб 12 рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдиреЛрдб 10 рдПрд▓рдЯреАрдПрд╕ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЬрд▓реНрджреА рд╣реЛ рдЬрд╛рдП, рдЕрдиреНрдп рдиреЗ рдЗрд╕реЗ рдЬрд▓реНрджреА рди рдХрд░рдиреЗ рдХреА рдЪреЗрддрд╛рд╡рдиреА рджреАред

рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ #3253 рдХрд╛ рд╡рд┐рд▓рдп рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП require $ рдХреЗ рдмрдЬрд╛рдп import(...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдкреНрдЯ-рдЗрди рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ .mjs рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ --experimental-modules рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред ( .mjs рдХрд╛ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдПрдХ рдирд╛рдорд╕реНрдерд╛рди рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рджреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рджрдмрд╛рд╡ рдбрд╛рд▓рдиреЗ рд╕реЗ рдмрдЪреЗрдВред

рдлрд┐рд░, рдЗрд╕ рдкреАрдЖрд░ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдЖрдк рдЕрдм рдореЛрдЪрд╛ рдХреА рдкрд░реАрдХреНрд╖рдг рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди @jdalton рджреНрд╡рд╛рд░рд╛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред ( .js рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рдЖрдпрд╛рдд)

рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ #3253 рдХрд╛ рд╡рд┐рд▓рдп рдХрд░рдирд╛ рд╣реИред

3253 рдореЗрдВ рдХреБрдЫ рдЦрд╛рдорд┐рдпрд╛рдВ рдереАрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред

@jdalton рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ esm рдкреИрдХреЗрдЬ (рд╢реБрджреНрдз рдиреЛрдб + рдореЛрдЪрд╛) рдХреЗ рдмрд┐рдирд╛ рджреЗрд╢реА рдИрдПрд╕рдПрдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИред
рдореИрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ ( --delay рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдФрд░ --experimental-modules рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, _mocha_ рдХреЗрд╡рд▓ CJS рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ CJS рдХреЗрд╡рд▓ рдЧрддрд┐рд╢реАрд▓ import() рдЫрджреНрдо-рдХрд╛рд░реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ESM рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рддреЛ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реАрдЬреЗрдПрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реВрдВ (рдЗрд╕рдХрд╛ рдирд╛рдо .js рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ) рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ:

test.esm.js :

(async () => {
  await import("./test/a.spec.mjs");
  await import("./test/b.spec.mjs");
  run();
})();

(рдореИрдВ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдЖрдпрд╛рдд рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╡рд╣рд╛рдВ glob рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред)

рдореИрдВ рдлрд┐рд░ рдЗрд╕реЗ рдирд┐рдореНрди рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:

NODE_OPTIONS="--experimental-modules" mocha --delay build/test/test.esm.js

рдореБрдЭреЗ NODE_OPTIONS рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЭрдВрдбрд╛ рдореЛрдЪрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдирд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред


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

@demurgos рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╛ рдХрд╛рдордХрд╛рдЬ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдкрд╛рдпрд╛ рд╣реИ: +1:ред

рдпрд╣ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдореЛрдЪрд╛ рдХреЗ рд╕рд╛рде рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрднрд╡ рд╣реИ (рдпрджрд┐ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ): рдореБрд╕реНрдХрд╛рди:ред

@demurgos рдпрд╣ рдореБрджреНрджрд╛ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ ES6 рд╢реИрд▓реА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред "рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо" рдХреНрдпрд╛ рд╣реИ? рд╡рд╣ рдХреЛрдб рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рд╣реИ , рдмрд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╣реИред

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

рдореЗрд░рд╛ рд╕рдВрджреЗрд╢ рджреЗрдЦреЗрдВ:

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

рдореИрдВрдиреЗ рдПрдХ рдмрд┐рд▓реНрдб рдЪрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдЖрдпрд╛рдд (1) рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдВ рдФрд░ (2) рд╕реВрдЪреА рдХреЛ рд╕реНрд╡рдпрдВ рдмрдирд╛рдП рд░рдЦреЗрдВред

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

рдпрджрд┐ рдЖрдк рд░рдирдЯрд╛рдЗрдо рдкрд░ рдПрдордЬреЗрдПрд╕ рд╕реНрдкреЗрдХ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдвреВрдВрдврддреЗ рд╣реБрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рдХреБрдЫ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

const {sync: globSync} = require("glob");

(async () => {
  const matches = globSync("**/*.spec.mjs");
  for (const match of matches) {
    await import(match);
  }
  run();
})();

рдЗрд╕реЗ NODE_OPTIONS="--experimental-modules" mocha --delay test.esm.js рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдВред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рдХреЛрдИ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХреЛрдб рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд╢реЛрд░ред

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

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдЧрд╛рдореА mocha@6 рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╢реНрд╡реЗрддрд╕реВрдЪреАрдмрджреНрдз --experimental-modules рдзреНрд╡рдЬ рд╣реЛрдЧрд╛ рдЬреЛ ES6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдХреНрдпрд╛ v6 рд╕реЗ рдкрд╣рд▓реЗ рдорд╛рдореВрд▓реА рдпрд╛ рдкреИрдЪ рд░рд┐рд▓реАрдЬ рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдирдП рдХрд╡рд░реЗрдЬ рдЯреВрд▓ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕реНрддрд╛рдВрдмреБрд▓ рдХреЗ рдмрдЬрд╛рдп рд╡реА 8 рдбреАрдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдореЛрдЪрд╛ рдФрд░ рдИрдПрд╕ 6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ (рдореЗрд░реЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдЧрд┐рдЯ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ред рдЬреЗрд╕рди)ред

@demurgos

рдЬрдм рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ ...

const {sync: globSync} = require("glob");
(async () => {
    const matches = globSync("**/*.spec.mjs");
    for (const match of matches) {
        await import(match);
    }
    run();
})();

рдореБрдЭреЗ рдорд┐рд▓рд╛

(node:4632) UnhandledPromiseRejectionWarning: Error: Cannot find module test/Sanity.spec.mjs

рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЗрд╕ рддрд░рд╣ рджреМрдбрд╝рддрд╛ рд╣реВрдВ ...

const {sync: globSync} = require("glob");
(async () => {
    await import("./Sanity.spec.mjs");
    run();
})();

рдпрд╣ рд╕рд╣реА рдЪрд▓рддрд╛ рд╣реИ рдореИрдВ рдХреНрдпрд╛ рдЦреЛ рд░рд╣рд╛ рд╣реВрдБ?

@demurgos рдЖрдкрдХреЛ @bcoe рдХреЗ рд╕рд╛рде рд╕рдордиреНрд╡рдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП; рджреЗрдЦреЗрдВ https://github.com/bcoe/c8

@demurgos рдПрдХ рдорд╛рдореВрд▓реА рд░рд┐рд▓реАрдЬ рдореЗрдВ рдХрдЯреМрддреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╢рд╛рдЦрд╛ рдореЗрдВ v5.2.0 рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рднреА рдЧреИрд░-рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЪреЗрд░реА рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЪреЗрдВрдЬрд▓реЙрдЧ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЕрдЧрд░ рдЖрдк рдпрд╛ рдХреЛрдИ рдФрд░ рдЙрд╕ рдХрд╛рдо рдХреЛ рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реИ, рддреЛ рд╣рдо рд░рд┐рд▓реАрдЬ рдореЗрдВ рдХрдЯреМрддреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

fwiw рдореИрдВ esm рдХреЛ --experimental-modules рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рддрдХ рдХрд┐ Node.js рдХреА рдХрд╣рд╛рдиреА рд╕реАрдзреА рди рд╣реЛред рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реЛрдЧрд╛ред

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

@jrgleason
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рдКрдкрд░ рдХреЛрдб рд▓рд┐рдЦрд╛ рдерд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ globSync рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ ./ рдпрд╛ ../ рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ ./ рдХреЗ рд╕рд╛рде рдкреНрд░реАрдкреЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ: рдЗрд╕реЗ рд╕рд░рд▓ рд╕рд╛рдкреЗрдХреНрд╖ рдкрдереЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдкрдХреЛ рдпрд╣ рднреА рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЖрдпрд╛рдд рд╕рд╛рдкреЗрдХреНрд╖ URL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: # , ? рдФрд░ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдгреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдареЛрд╕ рдареЛрд╕ рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреВрд░реНрдг рдкрде рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ URL рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд╡рд░реЗрдЬ рдкрд░ рдореЗрд░реЗ рдХрд╛рдо рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдкреВрд░реНрдг рдкрде рдФрд░ рдпреВрдЖрд░рдПрд▓ рдХреЗ рдмреАрдЪ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ lib рд▓рд┐рдЦрд╛ рдерд╛: рдЖрдк fromSysPath рд╕реЗ furi рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрде (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдиреЗрдорд╕реНрдкреЗрд╕ рдФрд░ рдпреВрдПрдирд╕реА рдкрде ...) рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдБ рдПрдХ рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

const {fromSysPath} = require("furi");
const {sync: globSync} = require("glob");
const {resolve} = require("path");

(async () => {
    const matches = globSync("**/*.spec.mjs");
    for (const match of matches) {
        await import(fromSysPath(resolve(match)).href);
    }
    run();
})();

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, mocha --require esm рдмрд╕ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд╣рдЪрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдУрд╡рд░рд╣реЗрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИ ...

@demurgos рдПрдХ рдорд╛рдореВрд▓реА рд░рд┐рд▓реАрдЬ рдореЗрдВ рдХрдЯреМрддреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╢рд╛рдЦрд╛ рдореЗрдВ v5.2.0 рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рднреА рдЧреИрд░-рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЪреЗрд░реА рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЪреЗрдВрдЬрд▓реЙрдЧ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЕрдЧрд░ рдЖрдк рдпрд╛ рдХреЛрдИ рдФрд░ рдЙрд╕ рдХрд╛рдо рдХреЛ рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реИ, рддреЛ рд╣рдо рд░рд┐рд▓реАрдЬ рдореЗрдВ рдХрдЯреМрддреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред --experimental-modules рдХреЗ рд╕рд╛рде NODE_OPTIONS рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдФрд░ рдпрд╣ рдЪреЗрд░реА-рдкрд┐рдХ рдХрдорд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯ рдЯреНрд░реА рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдЕрдЧрд░ рдореИрдВ рдЕрдиреНрдп рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдореБрджреНрджреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдирд╣реАрдВред рдЗрд╕ рдмреАрдЪ, рдореИрдВ рд╕рд┐рд░реНрдл v6 рдореАрд▓ рдХреЗ рдкрддреНрдерд░ рдкрд░ рдирдЬрд░ рд░рдЦрддрд╛ рд╣реВрдВред

fwiw рдореИрдВ esm рд╕реЗ рдЕрдзрд┐рдХ --experimental-modules рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рддрдХ рдХрд┐ Node.js рдХреА рдХрд╣рд╛рдиреА рд╕реАрдзреА рди рд╣реЛред рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реЛрдЧрд╛ред
рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдХреНрдпрд╛ рдореЛрдЪрд╛ --require esm рдмрд╕ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?

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

рдореЗрд░реЗ рд╣рд╛рд▓ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрджреЗрд╢ рдпрд╣ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВ рдХрд┐ рджреЗрд╢реА рдИрдПрд╕рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдХрд╛рд░реНрдп рд╣реИ рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрдм рдиреЛрдб рдХрд╛ рдИрдПрд╕рдПрдо рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рд▓рд╛рдн рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП esm рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рдореЗрд░реЗ рдХрд╛рд░рдг рд╣реИрдВ:

  • рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ (рдХрдо рдЬрдЯрд┐рд▓рддрд╛, рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╡рд┐рдиреНрдпрд╛рд╕)
  • рд╡рд╛рд╕реНрддрд╡рд┐рдХ ESM рдФрд░ esm рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмреАрдЪ рдХреБрдЫ рдЕрдВрддрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдореВрд▓реНрдпрд╛рдВрдХрди рддреНрд░реБрдЯрд┐рдпрд╛рдВ, рдЪрдХреНрд░, рд▓реЛрдб рддреНрд░реБрдЯрд┐рдпрд╛рдВ, async/рдЧрддрд┐рд╢реАрд▓ рдореЙрдбреНрдпреВрд▓, wasm, рдЖрджрд┐)ред рдЖрдЗрд╕реЛрдореЙрд░реНрдлрд┐рдХ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп, рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд┐рдЪрд▓рди рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрд░реЛрдд рдХреЛ рдХрдо рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдореВрд▓ рдХрд╡рд░реЗрдЬ рд╕реЗ рднреА рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ: esm рдХреЗ рд╕рд╛рде, V8 рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ (рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ c8 , рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдкреАрдЖрд░ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡реЗ c88 рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ)ред рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдиреНрдп рдЕрдВрддрд░ рднреА рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
  • рдпрд╣ рдХреЛрдб рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд╣рдЪрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдУрд╡рд░рд╣реЗрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИ ...

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд╣рдЪрд╛рди рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХреНрдпрд╛ рдпрд╣ рдЙрд╕ рдкреАрдЖрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рд╕рд╛рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛?


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдпрджрд┐ рдЖрдк рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдиреЛрдб рдЯреВрд▓рд┐рдВрдЧ рд╕реНрд▓реИрдХ (рдЬреНрдпрд╛рджрд╛рддрд░ #c8 рдЪреИрдирд▓ рдкрд░ рд╕рдХреНрд░рд┐рдп) рдкрд░ рднреА рд╣реВрдВред

@demurgos рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрди рдореЗрдВ рдерд╛ рдХрд┐ рд▓реЛрдЧ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╡реИрд╕реЗ рднреА...

рдпрджрд┐ NODE_OPTIONS=--experimental-modules рдореЛрдЪрд╛ v6.0.0 рдореЗрдВ --experimental-modules рд╕рдорд░реНрдерд┐рдд рд╣реЛрдиреЗ рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ? рдореБрдЭреЗ рддреЛ рдпрд╣реА рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рддрдм рддрдХ рдЦреБрд▓рд╛ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдореВрд▓ рдИрдПрд╕рдПрдо ("рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рдИрдПрд╕ 6 рд╢реИрд▓реА рдкрд░реАрдХреНрд╖рдг") рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ / рдЬрд┐рддрдиреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реАрдЬреЗрдПрд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ --delay рдФрд░ NODE_OPTIONS=--experimental-modules рдХреЗ рд╕рд╛рде рдЬреЛ рд╕рдорд╛рдзрд╛рди рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдЙрдЪрд┐рдд рд╕рдорд░реНрдерди рд╕реЗ рдЕрдзрд┐рдХ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк mocha **/*.spec.mjs рдЪрд▓рд╛рдиреЗ рдФрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рддреЛ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред

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


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдореИрдВ https://github.com/mochajs/mocha/pull/3253 рдХреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдИрдПрд╕рдПрдо (рдХреЛрдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд╣рдЪрд╛рди рдирд╣реАрдВ) рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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

рдиреЛрдб 12 рдореЗрдВ рдирдпрд╛ рдИрдПрд╕рдПрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдореЛрдЪрд╛ рдореЗрдВ рдИрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛрдЧрд╛ред

рдореЛрдЪрд╛ рдИрдПрд╕рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореИрдВрдиреЗ рдЬреАрд╕реА рдмрдЧ рдорд╛рд░рд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╕реВрдЪрдирд╛ рджреА рдЧрдИ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: https://github.com/nodejs/node/issues/27492ред

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

рд╣рд╛рдп рдореЛрдЪрд╛ рд▓реЛрдЧ, рдЕрдЪреНрдЫрд╛ рдЯреВрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдпрд╣ рд╕рд┐рд░реНрдл FYI рдЯрд┐рдкреНрдкрдгреА рд╣реИред рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рдорд╣реАрдиреЛрдВ рд╕реЗ рдореИрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдкреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЛрдЪрд╛ рдФрд░ * -test.mjs рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред mocha test/*.mjs (рдмрд┐рдирд╛ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдпрд╛ esm npm рдореЙрдбреНрдпреВрд▓ рдХреЗ) рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
https://gist.github.com/tadd/756d21bad38933c179f10e59bddee6b4

рдмреЗрд╢рдХ рдпрд╣ рдкреИрдЪ рдореЛрдЪрд╛ рдХрдорд┐рдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП "рдкреНрд░реЛрдбрдХреНрд╢рди-рд░реЗрдбреА" рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдореЛрдЪрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рд╣реИрдХ рд╣реИ рдЬреЛ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдореЗрдВ рдИрдПрд╕рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдореБрдЭреЗ --experimental-modules рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде Node.js v11 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ v12 рдХреЗ рд╕рд╛рде рд╣реВрдВ рдФрд░ рдХрд╛рдо рднреА рдХрд░рддрд╛ рд╣реВрдВред

рдпрд╣ рдПрдХ рдФрд░ рдХрд╣рд╛рдиреА рд╣реИ, рд▓реЗрдХрд┐рди рдиреЛрдб v12 рдиреЗ .cjs рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ "type" рдлрд╝реАрд▓реНрдб рдХреЛ package.json рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╣рд╛рдп рдореЛрдЪрд╛ рд▓реЛрдЧ, рдЕрдЪреНрдЫрд╛ рдЯреВрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдФрд░ рдореИрдВ рднреА рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛

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

https://gist.github.com/maxnordlund/a860dd67013beaf0f31ce776536f0a47

рдирдорд╕реНрдХрд╛рд░! рдпрд╣ рдХрд┐рд╕реА рднреА рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдореВрд▓ ES6 рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ lit-element ред рдЕрдиреНрдпрдерд╛, рдпрд╣ рдЗрд╕ рддрд░рд╣ рдлреЗрдВрдХрддрд╛ рд╣реИ:

node_modules/lit-element/lit-element.js:14
import { TemplateResult } from 'lit-html';
       ^

SyntaxError: Unexpected token {
    at Module._compile (internal/modules/cjs/loader.js:703:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
    at Module.load (internal/modules/cjs/loader.js:628:32)
    at Function.Module._load (internal/modules/cjs/loader.js:555:12)
    at Module.require (internal/modules/cjs/loader.js:666:19)
    at require (internal/modules/cjs/helpers.js:16:16)
    ...

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ ES6 рдореВрд▓ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдореЛрдЪрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИред

@heruan рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдиреЛрдб 8 рдХреЗ рдмрд╛рдж рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред рдпрд╣рд╛рдБ рдПрдХ рдЕрджреНрдпрддрди рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореВрд▓ рдлрд╝рд╛рдЗрд▓ URL рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП Node 10.12 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд test.esm.js рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:

const {pathToFileURL} = require("url");
const {sync: globSync} = require("glob");
const {resolve} = require("path");

(async () => {
    const matches = globSync("**/*.spec.mjs"); // Change the glob to match your test files
    for (const match of matches) {
        await import(pathToFileURL(resolve(match)).href);
    }
    run();
})();

рдлрд┐рд░ mocha --experimental-modules --delay test.esm.js рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВред

рдпрд╣ рдХреЛрдб рдИрдПрд╕рдПрдо рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдордирдЬ рдмреНрд░рд┐рдЬ рдХреЗ рд░реВрдк рдореЗрдВ test.esm.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдиреЛрдб 12 рдореЗрдВ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ IIAFE рдХреЛ рд╡реЗрдВ GC (рдиреЛрдбрдЬ/рдиреЛрдб#27492) рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЕрдЧрд▓реЗ рдЫреЛрдЯреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреБрдЫ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЙрди рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ)ред рдореИрдВ рдирд╡реАрдирддрдо рдиреЛрдб 10 рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдареАрдХ рди рд╣реЛ рдЬрд╛рдПред

рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ рддреЛ рдерд╛рд░ UnhandledPromiseRejectionWarning рдЪреЗрддрд╛рд╡рдиреА рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧрд╛ред console.error рдХреЛ рдЪреЗрди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдпрд╛ рдЕрдиреНрдпрдерд╛ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ред

import glob from "glob"
import { pathToFileURL } from "url"
import { resolve } from "path"
import { promisify } from "util"

const globAsync = promisify(glob)

async function main() {
  const matches = await glob("test/**/*.mjs")

  for (const match of matches) {
    await import(pathToFileURL(resolve(match)).href)
  }

  run()
}

main().catch(console.error)

_рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ import рд╕реЗ рдЕрдзрд┐рдХ require рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕рд╛рд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк ESM рднреВрдорд┐ рдореЗрдВ рд░рд╣реЗрдВ_

@demurgos рджрд╕ рджрд┐рди рдкрд╣рд▓реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдиреЛрдб 10.12 рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ рдиреЛрдб 12.1 рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдореЛрдЪрд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдиреЛрдб 12 рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ? рд╕рд╛рде рд╣реА, рдореИрдВ рдЗрд╕реЗ --watch рдореЛрдб рдореЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВ?

https://github.com/standard-things/esm --require esm рдХреЗ рд╕рд╛рде рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ :) рдзрдиреНрдпрд╡рд╛рджред

рдпрджрд┐ рдореЛрдЪрд╛ рдХреЛ рд╕реНрд░реЛрдд рдореЗрдВ ESM рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдерд╛, рддреЛ рд░реЛрд▓рдЕрдк рдПрдХ ESM рд╡рд┐рддрд░рдг рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ CommonJS рдФрд░/рдпрд╛ UMD рдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

рдХреЛрдИ рднреА рд░реЛрд▓рдЕрдк рдХреЗ рд▓рд┐рдП CSS рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА mocha.css рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ HTML рдЕрд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдФрд░ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред

рдХреНрдпрд╛ рдХреЛрдИ рдореЛрдЪрд╛ рдХреЛ ES6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ (рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: ~ рдЯреНрд░реИрд╡рд┐рд╕ ~) рдиреЛрдб> = 12.11.0?
12.10.0 рдкрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛:
рдореЛрдЪрд╛-рд░рди.рдЬреЗрдПрд╕

(async () => {
    await import("./tests.js");
    run();
})();

рдлрд┐рд░ mocha --experimental-modules --delay ./mocha-run.js рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдг рд╕реЗ, 12.11.0 рдХреЛ, рдпрд╣ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХреЛрдИ --delay рдкрд░рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛:

>  mocha --experimental-modules --delay ./mocha-run.js

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

internal/modules/cjs/loader.js:1007

      internalBinding('errors').triggerUncaughtException(

                                ^

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /home/travis/build/Palindrom/Palindrom/mocha-run.js

@tomalec рдореИрдВ рдиреЛрдб 12.11.1 рдкрд░ ES рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдореЛрдЪрд╛ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ:

__рдореЛрдЪрд╛-рд░рди.рдЬреЗрдПрд╕__

(async () => {
    await import("./tests.mjs");
    run();
})();

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡реЙрдЪ рдореЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореЛрдЪрд╛ рдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рд╛рдЗрд▓ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдИ рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдЪрд▓рд╛рддрд╛ рд╣реИред

@vanslly рд▓рдХреА рдпреВ;)
рдореЗрд░реЗ рд▓рд┐рдП рдиреЛрдб 12.12.0 (https://travis-ci.org/Palindrom/Palindrom/builds/597771311#L450) рдФрд░ mocha-run.js рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдКрдкрд░ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ (https://github.com/Palindrom/ рдкрд▓рд┐рдВрдбреНрд░реЛрдо/рдкреНрд░рддрд┐рдмрджреНрдз/49835962bdd61c849f115e271bbc6c3f82d30511#diff-24eabf03aee8844b2b4747aa95a6af7d),

mocha --experimental-modules --delay test/mocha-run.js https://travis-ci.org/Palindrom/Palindrom/builds/597771311#L643 , рдЕрднреА рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ

рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ рдкрд╛рдЧрд▓ рд╣реИ! ESM рдЕрдм --рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ-рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рднрд╡рд┐рд╖реНрдп рд╣реИред

рдЧрд▓рдд, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдШреЛрд╖рдгрд╛ рдЕрднреА рдХреБрдЫ рджрд┐рди рдкрд╣рд▓реЗ рдХреА рдЧрдИ рдереА...

рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИтАФрд╣рдо рд╕рднреА рдиреЗ рдЬреЗрд╕реНрдЯ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред

рдЕрд░реЗ рджреЛрд╕реНрддреЛрдВ, рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдЬреАрд╡рд┐рдд рд░рдЦрд╛ рдЬрд╛рдПред рдХреГрдкрдпрд╛ рдЗрд╕реЗ рд╕рд░реНрд╡реЛрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ рдФрд░ рд╕рднреА рдорд╣рд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@luijar рдЗрд╕ рдкрд░ #4038 . рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рд╣рдордиреЗ рдХрд▓ рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░рд┐рд▓реАрдЬрд╝ v7.0.0-esm1 рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреА: рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯ рджреЗрдЦреЗрдВред

рдпрд╣ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ!

рдХреНрдпрд╛ рдореИрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реВрдВ - рдХреНрдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдХреА рдХрдореА рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдИрдПрд╕рдПрдо рдЙрдкрдпреЛрдЧ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ рдпрд╛ рдХреЗрд╡рд▓ рдпрд╣ рдХрд┐ рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ Node. рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рд┐рд▓реАрдЬ рдиреЛрдЯ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдпрджрд┐ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдпреЛрдЬрдирд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ)ред

@ рдмреНрд░реЗрдЯреНрдЬрд╝9
NodeJs ESM рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдореЛрдЪрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд░реАрдХреНрд╖рдг NodeJs рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЕрдкрдиреЗ HTML рдХреЛрдб рдореЗрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдЧрд░ рдореБрдЭреЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рдпрд╛рдж рд╣реИ, рддреЛ рдЖрдкрдХреЛ <script> рдЯреИрдЧ рдХреЛ type="module" рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЛрдбрд┐рдВрдЧ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреА рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдореЛрдЪрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдПред ESM рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред

@juergba : рд╣рд╛рдБ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЛ рдПрдХ рдИрдПрд╕рдПрдо рдирд┐рд░реНрдпрд╛рдд рд╡рд┐рддрд░рдг рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЛрдИ рд╕рдВрдХрд▓рди рдХреЗ рдмрд┐рдирд╛ import mocha from '../node_modules/mocha/mocha-esm.js'; рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗ - рдФрд░ рд╕рдВрдХрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд╛рдХрд┐ рдХреЗрд╡рд▓ import mocha from 'mocha'; рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ) module рдореЗрдВ package.json рддрд╛рдХрд┐ рдмрдВрдбрд▓рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ ESM рдмрд┐рд▓реНрдб рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХреЗрдВред

рдореЛрдЪрд╛ рдХреЙрдордирдЬ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ; рд╣рдо package.json рдореЗрдВ "рдореЙрдбреНрдпреВрд▓" рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддреЗред рдореЛрдЪрд╛ рдИрдПрд╕рдПрдо рдореЗрдВ рд▓рд┐рдЦреЗ рдиреЛрдб рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ ESM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдлреИрдХреНрдЯрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрднреА рднреА рдЗрд╕рдХреЗ CommonJS рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рд░реЛрд▓рдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ module рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ESM рд▓рдХреНрд╖реНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреИрд╕реЗ рдХрд┐ рд╕рд┐рдиреЙрди рдСрдлрд╝рд░ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреИрдХреЗрдЬ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ, jQuery рдПрдХрдорд╛рддреНрд░ рдЕрдиреНрдп рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЕрдкрд╡рд╛рдж рд╣реИ рдФрд░ рд╡реЗ рдИрдПрд╕рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред

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

@concatime рдЬрдм рддрдХ nyc рдХреЛ рд╕рдВрдЧрдд рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛, рдЖрдк c8 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://www.npmjs.com/package/c8

c8 --all --include=lib/**/*.js --reporter=lcovonly node_modules/.bin/mocha --recursive

@cedx рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд░реЗрдкреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдл!

рд╣рдордиреЗ рдореЛрдЪрд╛ v7.1.0.1 рдореЗрдВ рдиреЛрдб рдХреЗ рдореВрд▓ рдИрдПрд╕рдПрдо рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред

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

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

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

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

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

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

jmiller-airfox picture jmiller-airfox  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ