рд╣рд╛рд▓ рд╣реА рдореЗрдВ , Node.js рдореЗрдВ ECMAScript рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ рдереА, рдФрд░ ES2020 рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдерд╛ред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдореИрдВ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдорд╛рдорд▓реЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ - рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЕрдЬреНрдЮрд╛рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рдеред

рд╕рдорд╕реНрдпрд╛рдУрдВ
рдЕрдХреНрд╕рд░ рдореИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ:
$ tree . тФЬтФАтФА modules тФВ тФЬтФАтФА a тФВ тФВ тФФтФАтФА index.ts тФВ тФЬтФАтФА b тФВ тФВ тФФтФАтФА index.ts тФВ тФФтФАтФА c тФВ тФФтФАтФА bobule.ts тФЬтФАтФА index.ts тФФтФАтФА package.json
рдФрд░ index.ts
рдХреА рд╕рд╛рдордЧреНрд░реА:
import a from './modules/a'; import b from './modules/b'; import c from './modules/c/bobule.ts'; export default { module: a, dopule: b, bobule: c };
рдФрд░ рдлрд┐рд░ рдХрд╣реАрдВ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдПрдХ рдФрд░ index.ts рд╣реИ рдЬреЛ рдЗрд╕ index.ts рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ ...
рдореИрдВ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп index.ts
рдЬреИрд╕рд╛ рдХреБрдЫ рд▓рд┐рдЦрдирд╛ index.ts
import modules from './modules/*/*'
рд▓реЗрдХрд┐рди рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рдпрд╣ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдореЗрд░реЗ рдкреЗрдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЗрдЪреНрдЫрд╛ рдЬрдЧрд╛рддрд╛ рд╣реИ рдмреИрд╕рд╛рдЦреА, рд╕рд╛рдЗрдХрд┐рд▓, рдврд╛рдВрдЪрд╛ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдЙрдкрдпреЛрдЧреА, рдореВрд▓ рдФрд░ рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХ рд╕рдорд╛рдзрд╛рди рд╣реИред
рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд
рд╕реНрдереИрддрд┐рдХ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╣реИ, рдЬреЛ рд╕реНрдерд┐рддрд┐ рд╕реЗ рд▓реЛрдбрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рддрджрдиреБрд╕рд╛рд░, рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдереЛрдбрд╝реА рд╕реА fs
рдЬреЛрдбрд╝рдХрд░, рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рд╕реЗ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
PHP рдиреЗ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛
рдСрдЯреЛрд▓реИрдб рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдирдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ PHP рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддреБ рдФрд░ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдореБрдЭреЗ рдЕрдкрдиреА рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡реАрд░рддрд╛ рд╕реЗ рдкрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ package.json рдореЗрдВ рдПрдХ рдСрдЯреЛрд▓реЙрдб рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдиреЗ рдФрд░ рдПрдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдорд╛рди рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдкрде:
// package.json { "autoload": { "modules": ["modules", "*", "index.ts"] "bobules": ["*", "*", "bobule.ts"], } }
рдЯрдВрдХрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рддрдереНрдп рд╕реЗ рдПрдХ рдХрд╖реНрдЯрдкреНрд░рдж рдХреНрд╖рдг рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдХреЗ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрддреЗ рд╣реИрдВ: ts|js|mjs|tsx
рддрд╛рдХрд┐ рдЖрдк рддреБрд░рдВрдд рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓реЗ рд╕рдХреЗрдВ, рдФрд░ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
// package.json { "autoload": { "modules": ["modules", "*", "index.ts|js"] "bobules": ["*", "*", "bobule.ts|js"], } }
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ:
f(projectRoot, ['modules', '*', 'index.js|ts'], moduleName = 'default')
// рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрде рдкрд░ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░реЗрдВf(projectRoot)
// package.json рд╕реЗ рд▓реЛрдбрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо f(projectRoot)
рд╕реЗрдХреНрд╢рди рдореЗрдВ рдХреАрдЬрд╝) рддреАрд╕рд░реЗ рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рд╣реВрдб рдХреЗ рддрд╣рдд" рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдкрде рдПрдХ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд╣реИ, рд╣рдо рд╕рд┐рд░реНрдл рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рддрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рд╕рд░рдгреА рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдПрдВ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рд░рдгреА рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВред рдирддреАрдЬрддрди, рд╢рд╛рдо рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛:

рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рд╣реИ?
рдпрд╣ рдореБрдЭреЗ рдкреНрд░рддреАрдд рд╣реБрдЖ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХрд╛ рдореБрджреНрджрд╛ рдмрд╣реБрдд рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдПрдирдкреАрдПрдо рдореЗрдВ рдРрд╕реА рд╕рднреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдереЛрдбрд╝реА рдЕрджреНрдпрддрди рдирд╣реАрдВ рд╣реИрдВ (рдпрд╛ рдореИрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рдерд╛?), рдФрд░ рддрдХрдиреАрдХ рдЖрдкрдХреЛ рдкрдВрдЬреАрдХрд░рдг рдФрд░ рдПрд╕рдПрдордПрд╕ рдХреЗ рдмрд┐рдирд╛ рдЕрдЪреНрдЫрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдЖрдкрдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдВрдЧреЗ, рдПрдХ рдирдпрд╛ рдкреЗрдВрдЪ рдХрд░рдХреЗ рдХреЛрдб рдХреЗ рджреЛрд╣рд░рд╛рд╡ рдХреЛ рдХрдо рдХрд░рдирд╛ рдмреИрд╕рд╛рдЦреА, рд╕рд╛рдЗрдХрд┐рд▓, рдврд╛рдВрдЪрд╛ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИред
рд▓рд┐рдВрдХ, рд╕рдмреВрдд, рдЕрдиреБрд╡рд╛рдж:
- ECMAScript рдореЙрдбреНрдпреВрд▓
- рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд:
рдЗрд╕ рдирд┐рд░реНрджреЛрд╖ рдХреЛрдб рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИ:
https://github.com/Melodyn/npm-dynamicimport/blob/master/lib/index.js#L93-L120
рдпрд╣рд╛рдВ рдЕрдореВрд▓реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
https://www.npmjs.com/package/@melodyn/dynamicimport
рдмрд┐рд▓реНрд▓реА рдпрд╣рд╛рдБ рд╣реИ:
(^ тЙЧ╧ЙтЙЧ ^)