рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдгреАрдп рдШрдЯрдХреЛрдВ рдХреЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдбрд╛рдВрддрд░рдг

рдХреЛрдгреАрдп рддрддреНрд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд▓реЗрдЦ рд▓рд┐рдЦреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдкрдврд╝рддреЗ рд╣реИрдВред рдЬреИрд╕реЗ, рдЕрдм рдЖрдкрдХреЛ рдХрдИ рдкреВрд░реНрдг рдХреЛрдгреАрдп рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдмрд╕ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдкреГрд╖реНрда рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

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

рдЫрд╡рд┐

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

рдореЙрдбреНрдпреВрд▓ рдХреА рддреИрдпрд╛рд░реА


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдпрд╛рдж рдХрд░реЗрдВ рдХрд┐ рдХреЛрдгреАрдп рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреНрдпрд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

@NgModule({ imports: [BrowserModule], entryComponents: [SomeComponent], }) export class AppModule { constructor(readonly injector: Injector) { const ngElement = createCustomElement(SomeComponent, { injector, }); customElements.define('some-component', ngElement); } ngDoBootstrap() {} } 

рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:

  1. рдПрдВрдЯреНрд░реАрдХреЙрдорд░реНрд╕ рдХреЗ рдШрдЯрдХ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╣рдо рдХреЛрдгреАрдп рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
  2. CreateCustomElement рдФрд░ рдЗрдВрдЬреЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдгреАрдп рддрддреНрд╡ рдмрдирд╛рдПрдВред
  3. рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХ рд╡реЗрдм рдШрдЯрдХ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ customElementsред
  4. рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ngDoBootstrap рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВред

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

 export abstract class MyElementModule { constructor(injector: Injector, component: InstanceType<any>, name: string) { const ngElement = createCustomElement(component, { injector, }); customElements.define(`${MY_PREFIX}-${name}`, ngElement); } ngDoBootstrap() {} } 

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

 @NgModule({ imports: [BrowserModule, MyButtonModule], entryComponents: [MyButtonComponent], }) export class ButtonModule extends MyElementModule { constructor(injector: Injector) { super(injector, MyButtonComponent, 'button'); } } 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдмрдЯрди рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ NgModule рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдВрдЯреНрд░реАрдХреЙрдореНрдкрд░реНрд╕ рдореЗрдВ рдШрдЯрдХ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреЛрдгреАрдп рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рддрдВрддреНрд░ рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯрд░ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдореЙрдбреНрдпреВрд▓ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рджреЗрдЧрд╛ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рд╡реЗрдм рдШрдЯрдХ рдореЗрдВ рддрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╣рдо рдХрдИ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреБрдЫ рдШрдЯрдХреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛


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

рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛрддреА рд╣реИ:

рдЫрд╡рд┐

рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╕рдВрдХрд▓рди рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

 enableProdMode(); platformBrowserDynamic() .bootstrapModule(ButtonModule) .catch(err => console.error(err)); 

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

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

 "outputPath": "projects/elements/dist/tmp" 

рдореЙрдбреНрдпреВрд▓ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдмрд╛рдж рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ред

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП, рдХреЛрдгреАрдп-рдХреНрд▓реА рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдмрд┐рд▓реНрдб рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 ng run elements:build:production --main='projects/elements/src/${project}/${component}/compile.ts' 

рдПрдХ рдЕрд▓рдЧ рддрддреНрд╡ рдЕрдВрддрд┐рдо рдЙрддреНрдкрд╛рдж рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрд╣реЗрдб-рдСрдл-рдЯрд╛рдЗрдо-рд╕рдВрдХрд▓рди рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджрди рдЭрдВрдбреЗ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдкрде рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдШрдЯрдХ рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИред

рдЕрдм рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХрддреНрд░ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╣рдорд╛рд░реЗ рдЕрд▓рдЧ рд╡реЗрдм рдШрдЯрдХ рдХрд╛ рдЕрдВрддрд┐рдо рдмрдВрдбрд▓ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рдмрд┐рд▓реНрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 cat dist/tmp/runtime.js dist/tmp/main.js > dist/tmp/my-${component}.js 

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

рд╣рдо рдкрд░рд┐рдгрд╛рдореА рдмрдВрдбрд▓ рдХреЛ рдЕрд╕реНрдерд╛рдпреА рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рднрдВрдбрд╛рд░рдг рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

 cp dist/tmp/my-${component}.js dist/components/ 

рдпрд╣ рдХреЗрд╡рд▓ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ - рдФрд░ рд╕рдВрдХрд▓рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреИрдпрд╛рд░ рд╣реИ:

 // compileComponents.js projects.forEach(project => { const components = fs.readdirSync(`src/${project}`); components.forEach(component => compileComponent(project, component)); }); function compileComponent(project, component) { const buildJsFiles = `ng run elements:build:production --aot --main='projects/elements/src/${project}/${component}/compile.ts'`; const bundleIntoSingleFile = `cat dist/tmp/runtime.js dist/tmp/main.js > dist/tmp/my-${component}.js`; const copyBundledComponent = `cp dist/tmp/my-${component}.js dist/components/`; execSync(`${buildJsFiles} && ${bundleIntoSingleFile} && ${copyBundledComponent}`); } 

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдл рдкрд┐рддрд╛ рд╣реИ:

рдЫрд╡рд┐

рдШрдЯрдХреЛрдВ рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдкреГрд╖реНрда рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ


рд╣рдорд╛рд░реЗ рдЗрдХрдЯреНрдареЗ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкреГрд╖реНрда рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрдирдХреЗ рдЬреЗрдПрд╕ рдмрдВрдбрд▓реЛрдВ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

 <my-elements-input id="input"> </<my-elements-input> <script src="my-input.js"></script> 

рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдкреВрд░реЗ рдЬрд╝реЛрди рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рд╣рдо рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдмрд╛рд░ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ:

 <script src="zone.min.js"></script> 

рдШрдЯрдХ рдкреГрд╖реНрда рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред

рдФрд░ рдПрдХ рдмрдЯрди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

 <my-elements-button size="l" onclick="onClick()"></my-elements-button> <script src="my-button.js"></script> 

рд╣рдо рдкреГрд╖реНрда рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ ...

рдЫрд╡рд┐

рдУрд╣, рдпрд╣ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ!

рдпрджрд┐ рд╣рдо рдмрдВрдбрд▓ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд╣рд╛рдВ рдРрд╕реА рдЕрд╕рдВрдЧрдд рд░реЗрдЦрд╛ рдкрд╛рддреЗ рд╣реИрдВ:

 window.webpackJsonp=window.webpackJsonp||[] 

рдЫрд╡рд┐

Webpack рдкреИрдЪ рд╡рд┐рдВрдбреЛ, рддрд╛рдХрд┐ рдПрдХ рд╣реА рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓реЛрдбрд┐рдВрдЧ рдХреА рдирдХрд▓ рди рдХрд░реЗрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ рдШрдЯрдХ рдХреЗрд╡рд▓ рдХрд╕реНрдЯрдо-рдмрд╕реНрддрд┐рдпреЛрдВ рдореЗрдВ рд╣реА рдЬреБрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд╕реНрдЯрдо-рд╡реЗрдмрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд╕реНрдЯрдо-рд╡реЗрдмрдкреИрдХ рдЬреЛрдбрд╝реЗрдВ:

    ng add @angular-builders/custom-webpack --project=elements

  2. рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдХреЛрдгреАрдп.рдЬреЙрди:

     "builder": "@angular-builders/custom-webpack:browser", "options": { "customWebpackConfig": { "path": "./projects/elements/elements-webpack.config.js" }, ... 

  3. рдПрдХ рдХрд╕реНрдЯрдо-рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

     module.exports = { output: { jsonpFunction: 'myElements-' + uuidv1(), library: 'elements', }, }; 

    рдЗрд╕рдореЗрдВ, рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ uid рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдпрд╛ред

рдЖрдк рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдирдП рдШрдЯрдХ рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВред

рд╕реБрдВрджрд░рддрд╛ рд▓рд╛рдирд╛


рд╣рдорд╛рд░реЗ рдШрдЯрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реАрдПрд╕рдПрд╕ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдШрдЯрдХреЛрдВ рдХреЗ рд░рдВрдЧ рд╡рд┐рд╖рдп рдФрд░ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред

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

 // compileHelpers.js compileMainTheme(); function compileMainTheme() { const pathFrom = `../../main-project/styles/themes`; const pathTo = `dist/helpers`; execSync( `lessc ${pathFrom}/theme-default-vars.less ${pathTo}/main-theme.css`,; ); } 

рд╣рдо рдХрдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмрд╕ рдЕрдкрдиреЗ рд▓реЛрдЕрд░ рдЪрд░ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣реЗрд▓реНрдкрд░реНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓реЗрдВред

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

рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ


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

 #!/bin/sh rm -r -f dist/ && mkdir -p dist/components && node compileElements.js && node compileHelpers.js && rm -r -f dist/tmp 

рдпрд╣ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдкреИрдХреЗрдЬ рд╕реЗ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдПрдХрд▓ рдХрдорд╛рдВрдб рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдгреАрдп-рдШрдЯрдХреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рднреА рд▓рд┐рдкрд┐рдпреЛрдВ, рд╕рд╛рде рд╣реА рдХреЛрдгреАрдп рдФрд░ рджреЗрд╢реА рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдореЛ, рдЬреАрдердм рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


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

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

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


All Articles