[X] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report <!-- Please search GitHub for a similar issue or PR before submitting -->
[ ] Performance issue
[ ] Feature request
[ ] Documentation issue or request
[ ] Support request => Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question
[ ] Other... Please describe:
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ skipTemplateCodegen
ΠΈ strictMetadataEmit
Π΄Π»Ρ true
ΠΈ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π²Π½ΡΡΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ° RouterModule.forChild([])
ngModule
decorate RouterModule.forChild([])
ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Function calls are not supported in decorators but 'RouterModule' was called.
ΠΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ fullTemplateTypeCheck
Π² true
ΠΎΡΠΈΠ±ΠΊΠ° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, @dynamic
ΠΏΠΎΡ
ΠΎΠΆΠ΅, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ° Π² ΡΡΠΎΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΡΠΈΠ±ΠΊΠ° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΈΠ»ΠΈ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π°Π²ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ @dynamic
.
Π― ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΆΠΈΠ΄Π°Ρ, ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° fullTemplateTypeCheck
Π·Π΄Π΅ΡΡ Π½Π΅ ΠΎΠΊΠ°ΠΆΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²Π»ΠΈΡΠ½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎΡ ΡΠ»Π°Π³ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ΅ Π² ΡΠ°Π±Π»ΠΎΠ½Π°Ρ
.
Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π°
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
@NgModule({
imports: [
RouterModule.forChild([])
]
})
export class LibModule { }
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ tsconfig ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ;
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true
}
ΠΡΠΈ ΡΡΠ°Π½ΡΠΏΠΈΠ»ΡΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΄Π°Π½Π° ΠΎΡΠΈΠ±ΠΊΠ°;
Error during template compile of 'LibModule' Function calls are not supported in decorators but 'RouterModule' was called.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ "fullTemplateTypeCheck": true
ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ. (Π₯ΠΎΡΡ ΡΡΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ°Π½Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ°)
Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΡΠ΅ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΈ: https://github.com/alan-agius4/angular-issue-23609
Π NG 5 ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π΅ Π±ΡΠ»ΠΎ
Angular version: 6.0.0-rc-6
<!-- Check whether this is still an issue in the most recent Angular version -->
Π‘Π²ΡΠ·Π°Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ:
https://github.com/dherges/ng-packagr/issues/822
https://github.com/dherges/ng-packagr/issues/778
https://github.com/dherges/ng-packagr/issues/727
https://github.com/dherges/ng-packagr/issues/765
https://github.com/dherges/ng-packagr/issues/767
https://github.com/dherges/ng-packagr/issues/885
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠ΅ΠΏΠΎ, Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ΅Π΅ ΡΡΠΎ.
Π‘ΡΠ΄Ρ ΠΏΠΎ ΠΌΠΎΠ΅ΠΉ Π±ΡΡΡΡΠΎΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠ΅, ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ static_reflector
statics
Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ members
/ statics
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, RouterModule
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π½ forChild
.
Π£ ΠΌΠ΅Π½Ρ ΡΠΎΠΆΠ΅ Π΅ΡΡΡ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. Π― ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π» fullTemplateTypeCheck
Π² lib/tsconfig.json
ΠΈ ΡΡΠΎ Π½Π΅ ΠΈΠΌΠ΅Π»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠΎΡ ΡΠ΅ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ:
git clone https://github.com/johnpapa/angular-ngrx-data.git ngrx-data-FAIL
cd ngrx-data-FAIL
git checkout ng-v6-FAIL
npm install
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ngrx-data
npm run build-lib
Π‘Π±ΠΎΡΠΊΠ° Π½Π΅ ΡΠ΄Π°Π»Π°ΡΡ. ΠΠΎΠ½ΡΠΎΠ»Ρ Π³ΠΎΠ²ΠΎΡΠΈΡ
BUILD ERROR
Error during template compile of 'NgrxDataModule'
Function calls are not supported in decorators but 'StoreModule' was called.
...
ΠΠ°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ Π΄Π²Π° ΠΈΠΌΠΏΠΎΡΡΠ° ngrx Π² NgrxDataModule
(ΠΎΡΡΠ°Π²ΠΈΠ² FooModule
) ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠ½ΠΎΠ²Π°.
ΠΠ° ΡΡΠΎΡ ΡΠ°Π· ΡΠ±ΠΎΡΠΊΠ° Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΠ°ΠΊΠ΅Ρ Π² dist
.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ FooModule
Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΡΠ΅ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΈ Π£ΠΎΡΠ΄Π°: @wardbell
Π‘Π±ΠΎΡΠΊΠ° Π±ΡΠ΄Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ / Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠΉ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ angularCompilerOptions
. ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ Π² ΡΡΠΎΠΌ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΈ
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true
"skipTemplateCodegen": false,
"strictMetadataEmit": false
"skipTemplateCodegen": false,
"strictMetadataEmit": true,
// fullTemplateTypeCheck omitted (= default value)
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
// fullTemplateTypeCheck omitted (= default value)
"skipTemplateCodegen": true,
"strictMetadataEmit": false
// fullTemplateTypeCheck omitted (= default value)
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π£ΠΎΡΠ΄Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° "skipTemplateCodegen": true
ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ "fullTemplateTypeCheck": true
ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ» Π²ΠΊΠ»ΡΡΠ΅Π½ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΡ ngc.
ΠΠΎ ΠΌΠΎΠ΅ΠΌΡ ΠΎΠΏΡΡΡ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Β«Π²ΡΠ΅ΠΌΡ, ΡΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π΄Π»Ρ AoTΒ» (ΡΠΌ. Β«ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉΒ» Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ). Imo, ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΎΠΏΡΠΈΠ΅ΠΉ strictMetadataEmit
ΠΈΠ»ΠΈ ΠΌΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ ΡΠΆΠ°ΡΠ½ΠΎ Π½Π°ΡΡΡΠ΅Π½ΠΎ π
ΠΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ ΠΎΠΏΡΡΡ ΠΌΠΎΠ³Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π² static forRoot(): ModuleWithProviders
, ΠΈΠ½ΠΎΠ³Π΄Π° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΈΠ»ΠΈ Π½Π΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Β«ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌΠΎΠΉΒ». ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π½Π°Π΄Π΅ΠΆΠ½ΡΡ
ΡΠ΅ΠΏΡΠΎ, ΠΈ Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ Ρ
ΠΎΡΡ ΡΡΡΠΎΠΈΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠΌΡΡΠ½ΡΡ
Π²ΠΎΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡΡ
ΠΎ ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Ρ Π²ΠΈΠ΄Π΅Π» ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ / Π½Π΅ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ.
Π§ΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ, ΡΡΠΎ ngc ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΡΠ²Π°Π΅Ρ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ, @dherges , Π·Π° ΡΠΎ, ΡΡΠΎ
ΠΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ ΠΎΡΠΊΡΡΡΡΠΌ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Angular Π½Π΅ ΡΠ΄Π΅Π»Π°Π΅Ρ ΡΡΠΎΡ Π²ΡΠ±ΠΎΡ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π΅ Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ.
ΠΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΌΠ½Π΅ ΡΠ΅ΠΉΡΠ°Ρ Π΄Π΅Π»Π°ΡΡ, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ?
ng build --prod
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ngx-progressbar
ΠΈ Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ: Β«ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π² Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ°Ρ
, Π½ΠΎ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ NgProgressModuleΒ».
ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ angular cli Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ tsconfig? ΠΡΠ»ΠΈ Π½Π΅ Ρ
ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Π»ΠΈΠ±ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ, Π»ΠΈΠ±ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΄ΠΎ ng-packagr v3.0.0-rc.3
Π ΡΡΠ΅Π΄Ρ, 9 ΠΌΠ°Ρ 2018 Π³., Π² 15:47, iamimbohacker [email protected]
Π½Π°ΠΏΠΈΡΠ°Π»:
ΠΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΌΠ½Π΅ ΡΠ΅ΠΉΡΠ°Ρ Π΄Π΅Π»Π°ΡΡ, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ?
ΠΠΎΠ»ΡΡΠ°Ρ ΠΊΠΎΠ³Π΄Π° ng build --prod
Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ngx-progressbar
ΠΈ Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ: "ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π² Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ°Ρ , Π½ΠΎ
ΠΡΠ» Π²ΡΠ·Π²Π°Π½ Β«NgProgressModuleΒ». "-
ΠΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΡΡΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Ρ ΡΠ²Π»ΡΠ΅ΡΠ΅ΡΡ Π°Π²ΡΠΎΡΠΎΠΌ ΡΠ΅ΠΌΡ.
ΠΡΠ²Π΅ΡΡΡΠ΅ Π½Π° ΡΡΠΎ ΠΏΠΈΡΡΠΌΠΎ Π½Π°ΠΏΡΡΠΌΡΡ, ΠΏΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Π½Π° GitHub
https://github.com/angular/angular/issues/23609#issuecomment-387743732 ,
ΠΈΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΠΎΠΊ
https://github.com/notifications/unsubscribe-auth/AQv-WtOWkvdrrvf6luk2S0wYaFWeLaejks5twvNugaJpZM4TsqoI
.
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Angular CLI 6.0.0. Π― Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ng-packagr
@dherges Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΡΠΈ
Π½ΠΎ Ρ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π² AOT
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΎΠΏΡΡΠ΅Π½Ρ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠ½ΠΈΠΌΠΊΠ΅ ΡΠΊΡΠ°Π½Π° @ alan-agius4, Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° dherges / ng-packagr # 860.
ΠΠ»Ρ Π·Π°ΠΏΠΈΡΠΈ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ angular ΠΈ ng-packagr (3.0.0), ΠΈ Π΄Π»Ρ ΡΡΠ΅Ρ
Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true (ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ angular-cl).
Π’Π°ΠΊ ΡΡΠΎ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΠΏΠΈΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΠ΄Π΅Π»Π°Π»ΠΈ @JoostK, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ
ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°Π½ΠΎΠ·Π° Π² Π·Π°Π΄Π½ΠΈΡΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅Ρ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠΎΠ½ΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ-ΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠ»ΠΈ Π½Π΅Ρ (Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ Ρ Π·Π°ΡΡΠ°Π²ΠΈΠ» ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½ΠΎ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ Π·Π½Π°ΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΈ ΠΊΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ Π²Π΅ΡΠ½ΡΡΡΡΡ Π² ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅), Ρ Π²ΡΠΎΡΠΎΠΉ ΠΠ°ΠΏΡΠΎΡ @dherges Π΄Π»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΎΡΠΈΠ±ΠΎΠΊβ¦
Π ΠΠΠΠΠ’ΠΠ ΠΠΠΠ’Π¬: Π― Π½Π°ΡΠ΅Π» ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ paths
Π² tsconfig, ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½Π°ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅Π³ΠΎ-ΡΠΎ Π½Π΅ Ρ
Π²Π°ΡΠ°Π΅Ρ Π΄Π»Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ ΡΡΠΈΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ ...
ΠΡΠΌΠ°Ρ, Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ Π±ΡΠ»ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ:
`` library.metadata.json Π²ΡΠ³Π»ΡΠ΄Π΅Π»Π° ΡΠ°ΠΊ
"ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅": {}
Then I changed the public_api.ts in the library project:
ΡΠΊΡΠΏΠΎΡΡ * ΠΈΠ· './lib/auth';
ΡΠΊΡΠΏΠΎΡΡ * ΠΈΠ· './lib/auth/index';
``
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ. ΠΠΎΠΆΠ΅Ρ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΡΠΈΡΡ Π²ΠΎΠΏΡΠΎΡ?
ΠΠΎΡΠ΅ΠΌΡ Π² Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ°Ρ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ? ΠΠ°ΠΊΠΈΠ΅ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ? ΠΠ΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΡΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠΎΠΈΡ Π·Π° ΡΡΠΈΠΌ. ΠΠΎΡΡΡΠΏΠ½ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠ΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ Π΄Π»Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄Π°.
@NgModule ({})
export class MyStoreModule {
static forRoot (): ModuleWithProviders {
return StoreModule.forRoot (ΡΠ΅Π΄ΡΠΊΡΠΎΡΡ);
}
ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ (ΡΠ°ΡΡΠ½ΡΠΉ ΠΌΠ°Π³Π°Π·ΠΈΠ½: ΠΠ°Π³Π°Π·ΠΈΠ½
console.log ("ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ --->", this.store);
}
}
@NgModule ({
ΠΈΠΌΠΏΠΎΡΡ: [
StateProviderModule.forRoot (),
],
ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΈ: [
]
})
ΡΠΊΡΠΏΠΎΡΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ ABCModule {}
ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ°Π±Π»ΠΎΠ½Π° "ABCModule"
ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π² Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ°Ρ , Π½ΠΎ StoreModule Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ Π² MyStoreModule
MyStoreModule Π²ΡΠ·ΡΠ²Π°Π΅Ρ StoreModule.
ΠΡΡΠΌΠ°Ρ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΡΠΈ ΠΊΠ»Π°ΡΡΡ Π² ABCModule ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ .. ΠΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΡ Β«ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈΒ». ΠΡΡΡ ΠΈΠ΄Π΅ΠΈ??
Π― ΡΠΎΠΆΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ ΠΌΠ΅Π½Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ»ΡΡΠ°ΠΉ:
Π― ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΠ²ΠΎΠΈ Route
ΠΊΠ°ΠΊ Π΄Π΅ΡΠ΅Π²ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΈΡ
Π² ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ Π² Π±ΠΎΠΊΠΎΠ²ΠΎΠΉ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ.
ΠΠΌΠ΅ΡΡΠΎ RouterModule
ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠΏΠ»ΡΡΠ΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°.
ΠΡΠΈΠΌΠ΅Ρ:
export const ROUTE_TREE: RouteTree = [
{
path: PATH_PARENT,
component: ParentComponent,
treeChildren: [
{
path: PATH_CHILD_1,
component: ChildComponent,
data: {
num: 1
},
},
path: PATH_CHILD_2,
component: ChildComponent,
data: {
num: 2
},
}
]
}
];
Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡΠ°ΡΡ:
export const ROUTE_TREE: RouteTree = [
{
path: PATH_PARENT,
component: ParentComponent
},
{
path: PATH_CHILD_1,
component: ChildComponent,
data: {
num: 1
},
},
path: PATH_CHILD_2,
component: ChildComponent,
data: {
num: 2
},
}
];
Π΄Π»Ρ RouterModule
.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π½Π΅ Ρ
ΠΎΡΡ Π΄Π²Π°ΠΆΠ΄Ρ ΠΌΠ΅Π½ΡΡΡ Route
s, Π΅ΡΠ»ΠΈ Ρ ΡΡΠΎ-ΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΡ, Ρ Π½Π°ΠΏΠΈΡΠ°Π» ΡΡΠ½ΠΊΡΠΈΡ Β«Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΡΒ» Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΅Π΅ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ RouterModuleforRoot
.
JIT ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π½ΠΎ AOT Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ, Π³ΠΎΠ²ΠΎΡΡ Function calls are not supported in decorators
.
Π―, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΠΎΠΏΡΠΎΠ±ΡΡ ΠΏΠΎΠΉΡΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΡΠ΅ΠΌ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠ»ΠΎΡΠΊΡΡ Route
s ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π΅Π΅ Π² Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ.
@Springrbua Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π² Π²Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠ° Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ Π²Π½ΡΡΡΠΈ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ°.
@ alan-agius4 Π― ΠΎΠΆΠΈΠ΄Π°Π» ΡΡΠΎΠ³ΠΎ, Π½ΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ ΠΏΠΎΡΠ΅ΠΌΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ Π½Π΅ ΠΌΠΎΠ³Ρ Π½Π°ΠΉΡΠΈ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ...
ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π° Π½Π΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
@ alan-agius4 ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΠ΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ ΡΡΠΎ Π·Π½Π°Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌ ...
ΠΡΡΡ Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ? Π£ ΠΌΠ΅Π½Ρ Π·Π΄Π΅ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ: https://github.com/formly-js/ngx-formly/issues/996.
ΠΡΠ΄Π΅Ρ Π»ΠΈ luuuuv Π²ΠΈΠ΄Π΅ΡΡ ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠΌ :-)
Π― Ρ ΠΎΡΠ΅Π» ΠΏΡΠΎΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π΅ΡΠ΅ ΡΠ°Π·, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π² ΠΏΡΡΡΠΉ ΡΠ°Π· ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π²ΡΠ΅Ρ ΡΠ²ΠΎΠΈΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (3 Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ, 1 ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ 3 Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ). Π― ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΡΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ . ΠΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΡΡ Π²ΡΡΠ΅ (formly-js / ngx-formly # 996), Π° Π·Π°ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΎΡ @ ngrx / core, Π³Π΄Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ ΠΎ ΡΠΎΠΉ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΠ΅:
Error during template compile of 'CoreStoreModule'
Function calls are not supported in decorators but 'StoreModule' was called.
ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ 3 Π²Π·ΡΡΡ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² forRoot
Π² ΠΌΠΎΠΈΡ
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΠΌΠΎΠ΄ΡΠ»ΡΡ
. ΠΠ±ΡΠ΅ΠΉ ΡΠ΅ΠΌΠΎΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π½ΠΈΡ
ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ InjectionToken
s. Π― ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠ±Π΅ΠΆΠ΄Π΅Π½, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ forRoot
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ InjectionToken
.
ΠΡΠΎ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ΅Π½Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅, ΡΡΠΎ Π΅ΡΡΡ Π² ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ forRoot, ΠΈ Π²ΡΡΠ°Π²Π»ΡΡΡ ΠΈΡ Π² ΠΌΠΎΠ΄ΡΠ»Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΌΠ½Π΅ Π½ΡΠΆΠ½Ρ. ΠΡΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½ΡΠΌ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΡΡΠΈ InjectionTokens Π²Π·ΡΡΡ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ.
Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Ρ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΈΠ·Π½Π°ΡΠ΅Π»Π΅Π½ Π·Π° Π²ΡΠ΅ ΡΡΠΈΠ»ΠΈΡ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΡΠ»ΠΈ Ρ ΠΌΠΎΠ³Ρ ΡΠ΅ΠΌ-ΡΠΎ ΠΏΠΎΠΌΠΎΡΡ, Ρ Π³ΠΎΡΠΎΠ² ΠΏΠΎΠΌΠΎΡΡ. Π― Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ Ρ ΡΡΠΈΠΌ. ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ. ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΠΊΠΎΡΠΎ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡΡ.
ΠΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠ² ΠΈΠ· forRoot
Π½Π° StoreModule
, ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ Ρ EffectsModule.forRoot
( @ngrx/effects
) ΠΈ StoreDevtoolsModule.instrument()
( @ngrx/store-devtools
).
ΠΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ Π² EffectsModule
ΠΈ StoreDevtoolsModule
ΡΠΎΠΆΠ΅ Π΅ΡΡΡ InjectionTokens
.
ΠΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ»Π° ΡΠΈΡΡΡΠΉ ΡΠ°ΠΉΠ» ΠΌΠΎΠ΄ΡΠ»Ρ:
@NgModule({
imports: [
StoreModule.forRoot(prmCoreActionReducers, { initialState: initialPrmCoreState }),
EffectsModule.forRoot([ApiEffects, GridEffects]),
StoreDevtoolsModule.instrument(),
],
})
export class PrmCoreStoreModule { }
Π Π±Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΠΊ:
@NgModule({
providers: [
// STORE DEV TOOLS MODULE instrument() Temporary Fix
DevtoolsExtension,
DevtoolsDispatcher,
StoreDevtools,
{
provide: INITIAL_OPTIONS,
useValue: {},
},
{
deps: [REDUX_DEVTOOLS_EXTENSION, STORE_DEVTOOLS_CONFIG],
provide: IS_EXTENSION_OR_MONITOR_PRESENT,
useFactory: createIsExtensionOrMonitorPresent,
},
{
provide: REDUX_DEVTOOLS_EXTENSION,
useFactory: createReduxDevtoolsExtension,
},
{
deps: [INITIAL_OPTIONS],
provide: STORE_DEVTOOLS_CONFIG,
useFactory: createConfig,
},
{
deps: [StoreDevtools],
provide: StateObservable,
useFactory: createStateObservable,
},
{
provide: ReducerManagerDispatcher,
useExisting: DevtoolsDispatcher,
},
// EFFECTS MODULE forRoot Temporary Fix
EffectsRunner,
EffectSources,
Actions,
ApiEffects,
GridEffects,
{
deps: [ApiEffects, GridEffects],
provide: ROOT_EFFECTS,
useFactory: createSourceInstances,
},
// STORE MODULE forRoot Temporary Fix
{ provide: _INITIAL_STATE, useValue: initialPrmCoreState },
{
deps: [_INITIAL_STATE],
provide: INITIAL_STATE,
useFactory: _initialStateFactory,
},
{ provide: _INITIAL_REDUCERS, useValue: prmCoreActionReducers },
{
provide: _STORE_REDUCERS,
useExisting: prmCoreActionReducers instanceof InjectionToken ? prmCoreActionReducers : _INITIAL_REDUCERS,
},
{
deps: [Injector, _INITIAL_REDUCERS, [new Inject(_STORE_REDUCERS)]],
provide: INITIAL_REDUCERS,
useFactory: _createStoreReducers,
},
{
provide: META_REDUCERS,
useValue: [],
},
{
provide: _REDUCER_FACTORY,
useValue: combineReducers,
},
{
deps: [_REDUCER_FACTORY, META_REDUCERS],
provide: REDUCER_FACTORY,
useFactory: createReducerFactory,
},
ACTIONS_SUBJECT_PROVIDERS,
REDUCER_MANAGER_PROVIDERS,
SCANNED_ACTIONS_SUBJECT_PROVIDERS,
STATE_PROVIDERS,
STORE_PROVIDERS,
],
})
export class PrmCoreStoreModule { }
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ, Ρ ΡΠ΅ΠΉΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ forRoot
ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Angular APP_INITIALIZER
InjectionToken
ΠΈΠ· ConfigModule
ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° @ngx-config/core
ΠΈ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΡΠΎΠ΄Π΅Π»Π°ΡΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ.
+1
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π² ΠΌΠΎΠ΄ΡΠ»Π΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π½ΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π±ΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΌΠΎΠ³ ΠΏΡΠΈΠΉΡΠΈ ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΠ°ΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ? ΠΡΠΎ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π½Π°ΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ Ρ angular 5 Π½Π° 6. ΠΠ°ΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ 3 forRoot. ΠΠ½Π΅ Π½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ forRoot Π²Π½Π΅ΡΠ½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π² Π½Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ.
Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΎ. Π£ Π½Π°Ρ Π΅ΡΡΡ Π·Π°Π΄Π°ΡΠ° Π²Π΅ΡΠ½ΡΡΡΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ.
@ jfpicard1 , ΡΡΠΎΡ ΡΠ»Π°Π³ Π½Π΅ ΡΠ²ΡΠ·Π°Π½ Ρ ΡΠ³Π»ΠΎΠ²ΡΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΈ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ.
Π£ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ yarn link
.
ΠΡΠΏΡΠ°Π²ΠΈΠ» ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΎΠ².
+1 ΠΡΡΡ Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅?
@shairez ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π»ΠΈ Π² ΡΡΠΎΠΌ. ΠΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠ·-Π·Π° ΠΌΠΎΠ΅Π³ΠΎ ΠΌΠΎΠ½ΠΎΡΠ΅ΠΏΠΎ ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°ΡΡ ΡΠ²ΠΎΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Ρ ΠΌΠΎΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· npm link
. ΠΠ°Π΄Π΅ΡΡΡ, Π΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΠ· ΡΡΡΠ»ΠΊΠΈ Π½Π° ngx-api-utils
, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ½ΠΈ ΡΠ²ΡΠ·Π°Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΠΎΠΊΠ΅Π½Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² InjectionToken providedIn
ΠΈ factory
?
Π‘ΠΌ. Https://github.com/ngx-api-utils/ngx-api-utils/commit/276f50afb7d2d6884047adc78b5888026080574e
@danielmhair Π― ΡΠ»Π΅Π΄ΠΈΠ» Π·Π° Π²Π°ΡΠΈΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΌ Π²ΡΡΠ΅ https://github.com/angular/angular/issues/23609#issuecomment -401456878 ΠΈ ΡΠ΅ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π» ΠΊΠΎΠ΄, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ forRoot
ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ InjectionToken
ΠΈ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π», ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ΅ΡΡΡ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ forRoot
, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Ρ ΠΎΡΠ΅Π½Ρ ΡΠΊΡΡΠ°Ρ!
Π― Ρ
ΠΎΡΠ΅Π» ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ Π½Π΅ Π±ΡΠ»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΏΠ½ΡΡΡ Π³Π»ΡΠ±ΠΆΠ΅ ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ InjectionToken
ΠΈΠ»ΠΈ Π΅ΡΡΡ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· ΡΡΠΈ https://github.com/ngx- ΠΏΡΠΎΡΠ΅Π» RegExp
Π― ΠΎΡΠ΅Π½Ρ Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ββΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΡΠ΅Π΅ ΠΈΠ»ΠΈ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠ½ΠΈΡΡ ΡΡΡ ΡΠ΅ΠΌΡ!
ΠΠ°, Ρ ΡΠΎΡΠ½ΠΎ ΡΠΊΡΡΠ°Ρ ΠΏΠΎ forRoot
. Π― Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π½Π°Π²ΠΈΠΆΡ ΡΡΠΎΡ ΠΎΠ±Ρ
ΠΎΠ΄. Π‘ ΡΡΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, ΠΊΡΠΎΠΌΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Π― Π²ΡΠ΅ Π΅ΡΠ΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ, Π½ΠΎ ΡΡΠΎ Ρ ngrx, ΠΏΠΎΡ
ΠΎΠΆΠ΅, Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΡΡΠΎ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΎΠΌΡ, ΡΡΠΎ Ρ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠ» Π·Π΄Π΅ΡΡ: https://github.com/angular/angular/issues/23609#issuecomment -401460241. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ Π½Π΅ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π» Π²ΡΠ΅ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
forRoot
:
StoreModule.forRoot(prmCoreActionReducers, { initialState: initialPrmCoreState }),
EffectsModule.forRoot([ApiEffects, GridEffects]),
StoreDevtoolsModule.instrument(),
ΠΠΎ ΡΡΡΠΈ, Chrome-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ redux devtools ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ redux Π½Π΅Ρ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ StoreDevtoolsModule.instrument Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄ΠΎΠ»ΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π Π΄ΡΡΠ³ΠΈΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ GET Π΄Π»Ρ ΠΌΠΎΠ΅ΠΉ ΡΠ΅ΡΠΊΠΈ ΠΈ ΠΌΠΎΠΈΡ ΡΠ΅ΡΠΎΠΊ, Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΡΠ°ΠΊ, Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ forRoot. ΠΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ.
Π― ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ (ΠΈ npm link
ΠΈ yarn link
). Π― ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΏΠΊΠΈ Π² node_modules
- ΡΡΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ npm install
ΠΏΡΠΈ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ Π°ΡΡ
ΠΈΠ²ΠΎΠ².
ΠΡ ΡΠΊΠ°Π·Π°Π»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ»ΠΊΡ ΠΏΡΡΠΆΠΈ. Π― ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΡΡΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ yarn add @my/lib<strong i="5">@link</strong>:../dist/my-lib
ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π²Π΅ΡΠ½ΠΎ? ΠΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊ package.json
"@my/lib": "link:../dist/my-lib"
. ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ npm link
Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. ΠΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠ³Π΄Π° Ρ Π·Π°ΠΏΡΡΠΊΠ°Ρ yarn
, ΠΎΠ½ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΡΠΈ ΡΡΡΠ»ΠΊΠΈ.
ΠΡΠ°ΠΊ, Ρ Π²Π°Ρ ΠΏΡΠΎΡΡΠΎ Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΏΠΎΠΊ, @dherges?
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Π°Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ dist, Π΅ΠΌΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ dist, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅Π» ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ. Π ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π΄ΡΡΠ³ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ?
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ:
Lib 1
Lib 2 Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ lib 1
Lib 3 Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ lib 1
ΠΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
ΠΠΎΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ lib 1, lib 2 ΠΈ lib 3.
ΠΠΎΠ»Π°Π³Π°Ρ, Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. Π Π·Π°ΡΠ΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΡ, ΠΏΡΠΎΡΡΠΎ Π²ΡΡΡΠ½ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΠΈΡ Π² package.json.
Π ΠΈΠΌΠ΅ΠΉΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ . ΠΠ»ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ postbuild.
@dherges ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΠΌΠΎΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ?
Π₯ΠΎΡΠΎΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΈΠ· dist/my-lib
Π² my-app/node_modules/@my/lib
, Π½ΠΎ ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ my-lib
Π² my-app/node_modules
?
Π₯ΠΎΡΠΎΡΠΎ, @dherges, Ρ Π½Π°ΡΠ΅Π» Π»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ. Π dist/my-lib
Ρ Π·Π°ΠΏΡΡΠΊΠ°Ρ npm pack
, Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°Ρ yarn add @my/lib<strong i="8">@file</strong>:../dist/my-lib/my-lib-3.0.0.tgz
Π² ΠΌΠΎΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΠΏΠ°ΠΏΠΊΡ dist (ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²), Π½ΠΎ Ρ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ yarn link
Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.
ΠΡΡΡ Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅? ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ΄ΠΈΠΎΠΌΠ° angular, ΠΈ ΠΎΠ½Π° Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΆΠ΅ ΠΏΠΎΡΡΠΈ 3 ΠΌΠ΅ΡΡΡΠ°. ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ Π½Π΅ Π±ΡΠ»ΠΎ ΠΎΡΠΌΠ΅ΡΠ΅Π½ΠΎ ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΈ Π½Π΅ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π΅Π½ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ? ΠΡΠΎΠ΅ΠΊΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΠΎΠ΄Π»ΠΈΠ²ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ, ΠΈ ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π½Π° Angular 6 Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ,
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π½Π΅ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΉΠ»ΠΎΠ² index.ts Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ββΠ² Π²ΡΠΏΡΡΠΊΠ΅ 6.0.8 (ΡΠΌ. Https://github.com/angular/angular/pull/22856).
Π― Π½Π΅ Π·Π½Π°Ρ, Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΌΠΏΡΠΎΠΌΡ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π·Π΄Π΅ΡΡ ΡΠΈΠΌΠΏΡΠΎΠΌΡ, Π±ΡΠ»ΠΎ Π±Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π»ΡΠ΄ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ.
Π― Π½Π°ΡΠ΅Π» Π΄ΡΡΠ³ΠΎΠΉ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΠ°ΠΊΠΎΠΉ ΡΡΠΎΠ΄Π»ΠΈΠ²ΡΠΉ, ΠΊΠ°ΠΊ ΠΌΠΎΠΉ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ, Π³Π΄Π΅ Ρ ΡΡΠΎ Π½Π°ΡΠ΅Π», Π·Π΄Π΅ΡΡ:
https://github.com/dschnelldavis/angular2-json-schema-form/issues/273#issuecomment -407184242. ΠΡΠ°ΠΊ, Π²ΠΎΡ ΠΌΠΎΠΉ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ ngrx.
export const storeModuleForRoot: ModuleWithProviders = StoreModule.forRoot(prmCoreActionReducers, { initialState: initialPrmCoreState })
export const effectsModuleForRoot: ModuleWithProviders = EffectsModule.forRoot([ApiEffects, GridEffects])
export const storeDevToolsModuleForRoot: ModuleWithProviders = StoreDevtoolsModule.instrument()
@NgModule({
imports: [
effectsModuleForRoot,
storeModuleForRoot,
storeDevToolsModuleForRoot,
],
})
export class PrmCoreStoreModule { }
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ModuleWithProviders
, ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π΄ΡΡΠ³Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°.
Π― Π²ΠΈΠΆΡ, ΡΡΠΎ [email protected] Π²ΡΠΏΡΡΠ΅Π½, ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ», ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ββΠ»ΠΈ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°?
Π― ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠ» Π·Π΄Π΅ΡΡ Π»Π΅Π³ΠΊΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡΡ Π²Π΅ΡΠΊΡ https://github.com/ngx-api-utils/ngx-api-utils/pull/14, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π½Π΅Π΄Π°Π²Π½ΠΎ Π²ΡΠΏΡΡΠ΅Π½Π½ΡΠΉ Angular 6.1.0
ΠΠΎΡΠ»Π΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΠΎΡΡΠ±Ρ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ forRoot
Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ.
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²Π½ΡΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° .
Π ΠΠΠΠ’ΠΠΠ’
public static forRoot(config: ITimoneerTab[]): ModuleWithProviders {
return {
ngModule: TabsModule,
providers: [
[...]
{
provide: APPLICATION_TABS,
useValue: config
}
]
};
}
ΠΠ Π ΠΠΠΠ’ΠΠΠ’
Π‘ΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΡΠ±ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π΅Ρ ΡΠ±ΠΎΡΠΊΡ.
public static forRoot(config: ITimoneerTab[]): ModuleWithProviders {
const output = {
ngModule: TabsModule,
providers: [
[...]
{
provide: APPLICATION_TABS,
useValue: config
}
]
};
return output;
}
ΠΠ°ΡΠΈΠΊΡΠΈΡΡΠΉΡΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π² Timoneer
ng build --prod
ERROR in Error during template compile of 'AppTabsModule'
Function calls are not supported in decorators but 'TabsModule' was called.
Π₯ΠΎΡΠΎΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ - RouterModule.
@leonardochaia , ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΎ, ΡΡΠΎ ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Π² Π½Π΅ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
ΠΠΎΡΠ»Π΅ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΠ° @leonardochaia Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΠ» ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π² ΠΌΠΎΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡΡΠ΅ console.log()
ΠΈΠ· ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° forRoot
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΠ±ΡΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ? Π― ΠΏΡΠΎΠ±ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π² https://github.com/angular/angular-cli/issues/9358#issuecomment -373053053, Π½ΠΎ Π±Π΅Π·ΡΡΠΏΠ΅ΡΠ½ΠΎ.
ΠΠΎΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
> ng --version
Angular CLI: 6.1.4
Node: 10.4.1
OS: win32 x64
Angular: 6.1.4
... animations, cli, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router
Package Version
------------------------------------------------------------
@angular-devkit/architect 0.7.4
@angular-devkit/build-angular 0.7.4
@angular-devkit/build-ng-packagr 0.7.5
@angular-devkit/build-optimizer 0.7.4
@angular-devkit/build-webpack 0.7.4
@angular-devkit/core 0.7.4
@angular-devkit/schematics 0.7.4
@angular/cdk 6.4.6
@angular/flex-layout 6.0.0-beta.17
@angular/material 6.4.6
@ngtools/json-schema 1.1.0
@ngtools/webpack 6.1.4
@schematics/angular 0.7.4
@schematics/update 0.7.4
ng-packagr 3.0.6
rxjs 6.2.2
typescript 2.7.2
webpack 4.9.2
ΠΠΎΠΉ ΠΊΠΎΠ΄:
import { NgModule, ModuleWithProviders, InjectionToken } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AppSettingsService } from './services/app-settings.service';
export const AppSettingsObject = new InjectionToken('AppSettingsObject');
export function createAppSettingsService(settings) {
return new AppSettingsService(settings);
}
@NgModule({
imports: [
CommonModule
]
})
export class AppSettingsModule {
static forRoot(config: Object): ModuleWithProviders {
return {
ngModule: AppSettingsModule,
providers: [
{ provide: AppSettingsObject, useValue: config },
{
provide: AppSettingsService,
useFactory: (createAppSettingsService),
deps: [AppSettingsObject]
}
]
};
}
}
ΠΡΠΈΠ±ΠΊΠ°:
> ng build my-app --prod
Date: 2018-08-29T
Hash: saghsh4ty463f34r4fef
Time: 8585ms
chunk {0} runtime.xxx.js (runtime) 1.05 kB [entry] [rendered]
chunk {1} styles.xxx.css (styles) 102 kB [initial] [rendered]
chunk {2} polyfills.xxx.js (polyfills) 130 bytes [initial] [rendered]
chunk {3} main.xxx.js (main) 128 bytes [initial] [rendered]
ERROR in Error during template compile of 'MyAppModule'
Function calls are not supported in decorators but 'AppSettingsModule' was called.
ΠΡΠ±Π°Ρ ΠΏΠΎΠΌΠΎΡΡ?
Π― Π±Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» ΡΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, Π½ΠΎ Π½Π΅ ΡΠ°ΠΊ ΡΠΆ ΠΏΠ»ΠΎΡ ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ. ΠΠ΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ, Π½ΠΎ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ ΠΌΠ½Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² 5 ΡΠ°ΠΊΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ .
Π MyAppModule
, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ forRoot
, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΡΠ°ΠΊΡΡ ββΠΊΠ°ΠΊ:
export const appSettingsModuleForRoot: ModuleWithProviders = AppSettingsModule.forRoot(yourConfig)
...
imports: [
...,
appSettingsModuleForRoot,
],
...
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ModuleWithProviders
ΠΈΠ· @angular/core
ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΡΠΈΠΏΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π²Π²Π΅Π΄Π΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ appSettingsModuleForRoot
.
@danielmhair Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ! ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ ΡΠΎΠΆΠ΅ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» Π²Π°ΡΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΈ ΡΡΠΎ ΡΠΎΠΆΠ΅ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π΄Π»Ρ ΠΌΠ΅Π½Ρ.
ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ», ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ»Π° Π½Π΅ Π² ΡΡΠΎΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΡ
Π·Π΄Π΅ΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ
, Π° ΡΠΊΠΎΡΠ΅Π΅ Π² Π΄ΡΡΠ³ΠΎΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡΠΎ Π±ΡΠ»ΠΎ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Ρ ΡΠΎΠ·Π΄Π°Π²Π°Π» ΠΎΠ±ΡΠ΅ΠΊΡ config
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π»ΡΡ Π² ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ forRoot
ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ AppSettingsModule
.
/**
* main.module.ts
*
// Angular & Lodash
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { assign } from 'lodash';
// Application Modules
import { coreConfig } from '../modules/core';
import { userConfig } from '../modules/user';
// Components
import { MainComponent } from './components/main.component';
const appConfig = assign({}, coreConfig, userConfig); // <--- This is where the problem came from!!
@NgModule({
declarations: [
MainComponent
],
imports: [
BrowserModule,
// Application-specific modules
AppSettingsModule.forRoot(appConfig)
],
providers: [],
bootstrap: [MainComponent]
})
export class MainModule { }
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ, Ρ Π·Π°ΠΌΠ΅Π½ΠΈΠ» ΡΡΠΎ Π½Π°
/**
* main.module.ts
*
@NgModule({
declarations: [
MainComponent
],
imports: [
BrowserModule,
// Application-specific modules
AppSettingsModule.forRoot(coreConfig, userConfig)
],
providers: [],
bootstrap: [MainComponent]
})
export class MainModule { }
/**
* app.settings.module.ts
*
export const CoreSettingsObject = new InjectionToken('CoreSettingsObject');
export const UserSettingsObject = new InjectionToken('UserSettingsObject');
export function createAppSettingsService(core, user) {
return new AppSettingsService(assign({}, core, user));
}
@NgModule({
imports: [
CommonModule
]
})
export class AppSettingsModule {
static forRoot(core: Object, user: Object): ModuleWithProviders {
return {
ngModule: AppSettingsModule,
providers: [
{ provide: CoreSettingsObject, useValue: core },
{ provide: UserSettingsObject, useValue: user },
{
provide: AppSettingsService,
useFactory: (createAppSettingsService),
deps: [CoreSettingsObject, UserSettingsObject]
}
]
};
}
}
Π£Π»ΠΎΠ²ΠΊΠ°, ΠΏΠΎΡ
ΠΎΠΆΠ΅, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ forRoot
. ΠΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΡΠ°Π±ΡΠΈΠΊΠΈ. ΠΠ΅ΡΠΎΠ΄ forRoot
ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ.
Π₯ΠΎΡΠΎΡΠΎ, Ρ Π·Π°Π³ΠΎΠ²ΠΎΡΠΈΠ» ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ°Π½ΠΎ. ΡΡΠΎ ΠΊΠ°ΠΊ ΡΠΈΡΡΠΈΡΡ Π»ΡΠΊ! ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅ ΡΡΡΡΠ°Π½Π΅Π½Π° .
AppSettingsModule
ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΡΡΠ»Π°ΡΡΡ Π² ΡΠ²ΠΎΠΈΡ
ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ
Π² Π²Π΅ΡΠΊΠ΅ Π²ΡΡΠ΅, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΡΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΡΠΎΠΉ ΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Angular CLI.
ΠΠΎΠ³Π΄Π° Ρ ΡΠ°Π±ΠΎΡΠ°Π» Π½Π°Π΄ ΡΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» ΡΠ²ΠΎΠΉ tsconfig.json
ΡΡΠΎΠ±Ρ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π» Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π°ΠΏΡΡΠΌΡΡ, Π° Π½Π΅ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΠΏΠΊΡ dist
.
tsconfig.json
{
...
"paths": {
"my-lib": [
"dist/my-lib"
],
"my-lib/*": [
"dist/my-lib/*"
]
}
}
tsconfig.json
{
...
"paths": {
"my-lib": [
"projects/my-lib"
],
"my-lib/*": [
"projects/my-lib/*"
]
}
}
Π‘ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΠΌΠΈ Π²ΡΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΡΠ±ΠΎΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ.
ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Ρ Π²Π΅ΡΠ½Ρ tsconfig.json
ΠΊ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌ, ΡΠ±ΠΎΡΠΊΠ° Π·Π°Π²Π΅ΡΡΠΈΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ.
Π’Π΅ΠΏΠ΅ΡΡ Ρ ΡΠΎΠ·Π΄Π°Π» ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ github, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΊΠ»ΠΎΠ½ΠΈΡΡΠ΅ΡΠ΅ ΡΡΠΎ ΡΠ΅ΠΏΠΎ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ npm run repro
, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ Π³ΠΎΠ²ΠΎΡΡ.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠΎΠΌΠΎΡΠΈ @samherrmann ΠΌΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
ΠΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ AOT ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ import
ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΡΠ°ΠΉΠ»Ρ index.ts
Π²Π½ΡΡΡΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ².
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, ΡΠ²Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠΊΡΠΏΠΎΡΡΠ° Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Angular Π±ΡΠ» Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌ Π² ΡΠ°ΠΉΠ»Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ public_api.ts
ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ ΠΎΡΠΈΠ±ΠΊΠΈ Function calls are not supported in decorators but 'Module' was called.
.
ΠΠΎ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΈΠΌΠΏΠΎΡΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² Π² ΠΊΠΎΠ΄Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΡΠ°ΠΉΠ»Ρ index.ts
Π² ΡΡΠΈΡ
ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ
Π΄Π»Ρ ΡΠΊΡΠΏΠΎΡΡΠ° Π΄ΡΡΠ³ΠΈΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΠ»ΠΈ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠ° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ· ΡΠ°ΠΌΠΈΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
Ρ.Π΅. ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅:
import { TestService } from './services';
ΠΊ
import { TestService } from './services/test.service';
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΌ. ΠΠ° https://github.com/kiranjholla/ng-issue-23609-repro/issues/1#issuecomment -417449088.
ΠΡΡΡ Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅?
Π― ΡΠ΅ΡΠΈΠ», ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠ² Π²ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΠΎΠ±ΡΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, function x() {}
, Π° Π½Π΅ const x = () =>{}
@albanx Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°?
@yogeshgadge Π
ΠΡΠΈΠΌΠ΅Ρ Π² App.module.ts Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ»:
imports: [
//....
StoreModule.forRoot(reducers, {
initialState: () => { //some fun }
}),
ΠΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ Π½Π°
import loadFromFunction from 'utils';
imports: [
//....
StoreModule.forRoot(reducers, {
initialState: loadFromFunction
}),
ΠΈ utils.ts
export function loadFromFunction() {
}
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π΄Π°Π΅Ρ ΠΈΠ΄Π΅Ρ
Π― Π½Π°ΡΠ°Π» ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΌΠΎΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΡΠΏΠ°ΠΊΠΎΠ²Π°Π» Π΅Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Angular 7.0 (ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ 6.x). ΠΡΠΎΠ±ΠΎΠ²Π°Π» Π²ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅, Π½ΠΎ Π±Π΅Π·ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΠΎΠΈ forRoot
Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΡΠΈΡΠ½Ρ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
./misc/injection-tokens.ts
import {InjectionToken} from '@angular/core';
import {NgForageOptions} from '../config/ng-forage-options';
export const DEFAULT_CONFIG = new InjectionToken<NgForageOptions>('Default NgForage config');
NgForage.module.ts
import {ModuleWithProviders, NgModule} from '@angular/core';
import {NgForageOptions} from './config/ng-forage-options';
import {DEFAULT_CONFIG} from './misc/injection-tokens';
/**
* NgForage core module
*/
@NgModule({})
export class NgForageModule {
public static forRoot(config: Partial<NgForageOptions>): ModuleWithProviders<NgForageModule> {
return {
ngModule: NgForageModule,
providers: [
{
provide: DEFAULT_CONFIG,
useValue: config
}
]
};
}
}
import { BrowserModule } from '@angular/platform-browser';
import { NgModule, ModuleWithProviders } from '@angular/core';
import { NgForageModule } from 'ngforage';
import { AppComponent } from './app.component';
const ngfm: ModuleWithProviders<NgForageModule> = NgForageModule.forRoot({});
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
ngfm
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Π‘Π²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
ΠΡΠΎ ΠΊΠ°ΠΊ Π±ΡΡΡ Π³Π΄Π΅-ΡΠΎ Π² ΡΠ΅ΡΡΡΠ΅ Π²Π΅ΠΊΠ°. ΠΠ΅ ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ AOT Π²ΠΎΠΎΠ±ΡΠ΅: ((
ΠΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ ΡΡΠΎ-ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ 7.0.2 ΠΈ 7.0.3 ΡΠ½ΠΎΠ²Π° ΠΏΡΠΈΠ²Π΅Π»ΠΎ ΠΊ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅.
Π― ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ:
[ΠΠΠ€ΠΠ ΠΠΠ¦ΠΠ―] ΡΡΠ°Π³ΠΌΠ΅Π½Ρ {0} runtime.ec2944dd8b20ec099bf3.js (Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ) 1,41 ΠΠ [Π·Π°ΠΏΠΈΡΡ] [ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ]
[ΠΠ¨ΠΠΠΠ] ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π² Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ°Ρ
, Π½ΠΎ Β«ΓΒ΅makeDecoratorΒ» Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ Π² Β«InjectableΒ»
[ΠΠΠ€ΠΠ ΠΠΠ¦ΠΠ―] ΡΠ°Π½ΠΊ {1} main.9868d9b237c3a48c54da.js (ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ) 128 Π±Π°ΠΉΡ [Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ] [ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ]
[ΠΠ¨ΠΠΠΠ] Β«InjectableΒ» Π²ΡΠ·ΡΠ²Π°Π΅Ρ Β«ΓΒ΅makeDecoratorΒ».
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½ΠΈΡΠ΅Π³ΠΎ ΠΌΠ½Π΅ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΠΊΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ ΡΡΠΎ ΠΎΡΠ»Π°Π΄ΠΈΡΡ?
ΠΡΠΎ Π²ΡΠΎΡΠ°Ρ ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π³ΠΎΠ΄, ΡΡΡΡΠΏΠ°ΡΡΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Ivy. ΠΡΠΎ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ AOT, ΠΈ Π΅Π΅ ΡΡΠ°ΡΡΡ - Π½Π΅Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΉ. ΠΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ "needTriage" ΡΡΠΎ?
ΠΡΠΌΠ°Ρ, ΠΎΡΠ²Π΅Ρ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΠΎΠ΄ΠΈΠ½ ...
ΠΡΠ΄Π΅Ρ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠΉΠ΄Π΅Ρ ΠΏΠ»ΡΡ β’
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ±Π΅ΡΠ΅ΠΌΡΡ ΠΈ Π΄ΠΎΠΆΠ΄Π΅ΠΌΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠ»ΡΡ π€·π»ββοΈ
Π― ΡΠ°Π·Π΄Π΅Π»ΠΈΠ» ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΠΊΠΎΠΉ 6.0.0-beta.7 ΠΈ 6.0.0-beta.8, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΠ»Π°Π½Π° ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ https://github.com/alan-agius4/angular-issue-23609
ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ
package.json Π² https://github.com/alan-agius4/angular-issue-23609, ΠΊΠΎΡΠΎΡΡΠΉ Π ΠΠΠΠ’ΠΠΠ’ Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
{
"name": "angular-function-calls-decorators",
"version": "1.0.0",
"private": true,
"description": "",
"main": "index.js",
"scripts": {
"build": "ngc",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@angular/core": "6.0.0-beta.7",
"@angular/common": "6.0.0-beta.7",
"@angular/compiler": "6.0.0-beta.7",
"@angular/compiler-cli": "6.0.0-beta.7",
"@angular/router": "6.0.0-beta.7",
"rxjs": "^5.5.8",
"zone.js": "^0.8.26"
},
"dependencies": {
"typescript": "~2.6.2"
}
}
ΠΈ package.json Π² https://github.com/alan-agius4/angular-issue-23609 , Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ° Β«ΠΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π² Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ°Ρ Β».
{
"name": "angular-function-calls-decorators",
"version": "1.0.0",
"private": true,
"description": "",
"main": "index.js",
"scripts": {
"build": "ngc",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@angular/core": "6.0.0-beta.8",
"@angular/common": "6.0.0-beta.8",
"@angular/compiler": "6.0.0-beta.8",
"@angular/compiler-cli": "6.0.0-beta.8",
"@angular/router": "6.0.0-beta.8",
"rxjs": "^5.5.8",
"zone.js": "^0.8.26"
},
"dependencies": {
"typescript": "~2.7.2"
}
}
Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠΈΠΊΡΠ°ΡΠΈΡ 6ef9f2278f64697920df8ecaf79293a7eef7e0ab ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΠΎ ΡΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ.
@mgechev Π― Π²ΠΈΠΆΡ, ΡΡΠΎ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΈΠ·-Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ. ΠΡΠ°ΠΊ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π΄ΡΡΠ²Π°, Π² ΠΊΠ°ΠΊΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅? ΠΡΠΎ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ ΠΏΠ΅ΡΠ΅Π½Π΅Ρ Π²ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠ°ΠΊΠ΅ΡΡ, Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ angular 7. Π Π°Π½ΡΡΠ΅ Π²ΡΠ΅ Π±ΡΠ»ΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ! Π‘Π»Π΅Π΄ΡΠ΅Ρ Π»ΠΈ ΠΌΠ½Π΅ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΡΡΠΎ Π²Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΠ΅!
@ rahulsahay19 ΡΠΌ. ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ Π΄Π»Ρ ΠΎΠ±Ρ ΠΎΠ΄Π½ΡΡ ΠΏΡΡΠ΅ΠΉ.
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡΡ Π²Π΅ΡΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ ΠΎΠ΄Π½ΡΡ ΠΏΡΡΠ΅ΠΉ.
ΠΠΎΠ΄ΡΠ»Ρ ΡΠ³Π»ΠΎΠ²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
@NgModule({
imports: [
CommonModule,
RouterModule
],
exports: [
RouterModule,
DcPage,
DcPageFooter,
DcPageNavbar,
DcPageSidebarDirective,
DcPageSidebarElement
],
declarations: [
DcPage,
DcPageFooter,
DcPageNavbar,
DcPageSidebarDirective,
DcPageSidebarElement
],
providers: []
})
export class DcPageModule {
static forRoot(pageService: any): ModuleWithProviders {
return {
ngModule: DcPageModule,
providers: [
{provide: 'pageService', useClass: pageService}
]
};
}
}
Π’Π΅ΡΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ , ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π΅ DcPageModule.
@NgModule({
imports: [
BrowserModule,
CommonModule,
FormsModule,
ContractsRoutingModule,
DcPageModule.forRoot(PageService),
... other stuff ...
],
declarations: [
...
],
providers: [
...
]
})
export class ContractsModule {}
ΠΡΡΡ Π»ΠΈ Ρ ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΈΠ΄Π΅ΠΈ ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΌΠ½Π΅ ΠΏΠΎΠΌΠΎΡΡ?
@mgechev Π₯ΠΎΡΠΎΡΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ Π²ΡΠ΅ ΠΎΠ±Ρ ΠΎΠ΄Π½ΡΠ΅ ΠΏΡΡΠΈ. ΠΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ! Π― Π²ΠΈΠΆΡ, ΡΡΠΎ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π±ΡΠ»Π° ΠΎΡΠΊΡΡΡΠ° Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΉ angular 6, Π½ΠΎ Ρ angular 6 Ρ ΠΌΠ΅Π½Ρ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Ρ ΠΎΡΠΎΡΠΎ. ΠΎΠ½ Π½Π°ΡΠ°Π» ΡΠ΅ΡΠΏΠ΅ΡΡ Π½Π΅ΡΠ΄Π°ΡΡ Ρ Π²ΡΠΏΡΡΠΊΠΎΠΌ angular 7. ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°, ΠΏΡΠΎΡΡΠΎ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ! Π ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΎΡ Π΄Π»Ρ Π½Π°Ρ. ΠΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ ΠΎΠ±Ρ ΠΎΠ΄Π½ΡΠ΅ ΠΏΡΡΠΈ - Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ Π²Π΅ΡΡΠΈΠΈ angular 6!
@ rahulsahay19 ΡΠ΅ΡΡΠ½ΠΎ? ΠΡ ΠΎΠ±Π»Π°ΠΆΠ°Π»ΠΈΡΡ, ΡΡΠΎ Π°Π΄ ΠΈ Π½ΠΈΠΊΠΎΠ³ΠΎ Π½Π΅ Π²ΠΎΠ»Π½ΡΠ΅Ρ :) ΠΠ΅ΡΠ΅ΡΡΠ°Π» ΡΠ΅ΡΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΡΡΠΎ, ΠΊΠ°ΠΊ Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ», ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, - ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ forRoot
ΠΈ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²Π°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΊΠ°ΡΡΡ providers
Π΄Π»Ρ forRoot
. ΠΠΎ Π²Π°Ρ ΠΏΡΠΎΠ±Π΅Π³ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ :)
@victornoel Π² ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΠ°ΠΊΠ΅ΡΠ°. ΡΡΠΎ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΈ ΠΌΠΎΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ Π½Π°ΡΠ°Π»ΠΈ Π³Π»ΡΡΠΈΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅. ΠΠ΅Π½Ρ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ ΠΌΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π½Π°Ρ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π°. Π Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΠΎΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ngc, Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΠΏΠ»ΡΠ²ΡΠ°ΡΠ°Ρ, Π½ΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ΅ΠΉΡΠ°Ρ Π΄ΡΠΌΠ°Ρ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ!
@ rahulsahay19 ΠΎΡΠΈΠ±ΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½Π°, ΠΈ ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ; ΠΈΠ·Π²ΠΈΠ½ΠΈΡΠ΅ Π·Π° Π²Π°ΡΠ΅ ΡΠ°Π·ΠΎΡΠ°ΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° Π²Π΅ΡΡΠΈΡ 6 Π±ΡΠ΄Π΅Ρ Π΄Π»Ρ Π²Π°Ρ ΡΠ°ΠΌΡΠΌ ΠΏΡΠΎΡΡΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ. ΠΡ Π½Π΅ Π΄Π΅Π»Π°Π»ΠΈ ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ v6 ΠΈ v7.
@mgechev Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ!
ΠΠ»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅
ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ°Π±Π»ΠΎΠ½Π° ... ΠΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π² Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ°Ρ , Π½ΠΎ 'Ι΅makeDecorator' Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ Π² 'NgModule'
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π² Π²Π°ΡΠ΅ΠΉ ΡΠ±ΠΎΡΠΊΠ΅ AOT ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ββΡΠΎΠ»ΡΠΊΠΎ _one_ Π²Π΅ΡΡΠΈΡ @ angular / core. ΠΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π½Π°ΠΉΠ΄Π΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡΠ»Ρ, Π° Π½Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌΠΈ:
find .|grep modules/@angular/core/package.json
Π£ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ lerna ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» 7.2.4, Π° Π΄ΡΡΠ³ΠΈΠ΅ - 7.2.5.
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΠ±ΡΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ? Π― ΠΏΡΠΎΠ±ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π² angular / angular-cli # 9358 (ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ) , Π½ΠΎ Π±Π΅Π·ΡΡΠΏΠ΅ΡΠ½ΠΎ.
ΠΠΎΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
> ng --version Angular CLI: 6.1.4 Node: 10.4.1 OS: win32 x64 Angular: 6.1.4 ... animations, cli, common, compiler, compiler-cli, core, forms ... http, language-service, platform-browser ... platform-browser-dynamic, router Package Version ------------------------------------------------------------ @angular-devkit/architect 0.7.4 @angular-devkit/build-angular 0.7.4 @angular-devkit/build-ng-packagr 0.7.5 @angular-devkit/build-optimizer 0.7.4 @angular-devkit/build-webpack 0.7.4 @angular-devkit/core 0.7.4 @angular-devkit/schematics 0.7.4 @angular/cdk 6.4.6 @angular/flex-layout 6.0.0-beta.17 @angular/material 6.4.6 @ngtools/json-schema 1.1.0 @ngtools/webpack 6.1.4 @schematics/angular 0.7.4 @schematics/update 0.7.4 ng-packagr 3.0.6 rxjs 6.2.2 typescript 2.7.2 webpack 4.9.2
ΠΠΎΠΉ ΠΊΠΎΠ΄:
import { NgModule, ModuleWithProviders, InjectionToken } from '@angular/core'; import { CommonModule } from '@angular/common'; import { AppSettingsService } from './services/app-settings.service'; export const AppSettingsObject = new InjectionToken('AppSettingsObject'); export function createAppSettingsService(settings) { return new AppSettingsService(settings); } @NgModule({ imports: [ CommonModule ] }) export class AppSettingsModule { static forRoot(config: Object): ModuleWithProviders { return { ngModule: AppSettingsModule, providers: [ { provide: AppSettingsObject, useValue: config }, { provide: AppSettingsService, useFactory: (createAppSettingsService), deps: [AppSettingsObject] } ] }; } }
ΠΡΠΈΠ±ΠΊΠ°:
> ng build my-app --prod Date: 2018-08-29T Hash: saghsh4ty463f34r4fef Time: 8585ms chunk {0} runtime.xxx.js (runtime) 1.05 kB [entry] [rendered] chunk {1} styles.xxx.css (styles) 102 kB [initial] [rendered] chunk {2} polyfills.xxx.js (polyfills) 130 bytes [initial] [rendered] chunk {3} main.xxx.js (main) 128 bytes [initial] [rendered] ERROR in Error during template compile of 'MyAppModule' Function calls are not supported in decorators but 'AppSettingsModule' was called.
ΠΡΠ±Π°Ρ ΠΏΠΎΠΌΠΎΡΡ?
ΠΡ ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΠ»ΠΈ?
Π£ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΡΠΈΠΌ, ΠΈ Ρ ΡΠ΅ΡΠΈΠ» Π΅Π΅. ΠΠ½ ΡΠ±ΠΈΠ» ΡΠ΅Π»ΡΠΉ Π΄Π΅Π½Ρ (ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΡΡΠΎ ...), Π½ΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Ρ ΠΎΠ±ΠΎΡΠ΅Π» Π΅Π³ΠΎ.
(ΠΠ»Ρ Π·Π°ΠΏΠΈΡΠΈ, Π½ΠΈΠΊΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠΉ Π²ΠΎΠΊΡΡΠ³ angularCompilerOptions ΠΈΠ»ΠΈ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Ρ. Π. ΠΠ΅ ΠΈΠΌΠ΅Π»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ°).
ΠΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π»Π°ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ Ρ ΠΎΡΠ΅Π» ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ Π»Π΅Π½ΠΈΠ²ΡΠΌ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄Π°Π½Π½ΡΡ ΡΡΠ΅Π΄Ρ, ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΡ ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠΎΠ΄ΡΠ»Ρ Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ΅Π΄Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΡΡΡΠΏΠ°ΡΡ ΠΈΠ· ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ app.module Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ (ΡΡΠΎΠ±Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ΅Π΄Ρ ΠΌΠΎΠ³Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ).
Π― ΡΠ΅ΡΠΈΠ», ΡΡΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ forRoot, ΠΈ Ρ ΡΠΎΠΆΠ΅ (ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½ΠΈΠΆΠ΅). ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΊΠ»Π°ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΡ forRoot, ΠΠ ΠΈΠΌΠ΅Π΅Ρ Π΄Π΅ΠΊΠΎ ngModule (ΡΠ°ΠΊ ΠΊΠ°ΠΊ Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΡΠΎΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ forRoot, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π²Π΅ΡΡΠ΅Π½, Ρ ΠΎΡΠΈΡΠ΅ Π²Π΅ΡΡΡΠ΅, Ρ ΠΎΡΠΈΡΠ΅ Π½Π΅Ρ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠΈΡΠ΅Π» ΠΈΠ· ΠΌΠΎΠΈΡ ΡΠ³Π»ΠΎΠ²ΡΡ Π΄Π½Π΅ΠΉ "ΡΠ°Π±ΠΎΡΡ Π±Π΅Π· TS", ΠΊΠΎΠ³Π΄Π° Π²Ρ Π½Π΅ Π±ΡΠ»ΠΎ Π²ΡΠ΅Ρ Π½Π°Π²ΠΎΡΠΎΡΠ΅Π½Π½ΡΡ Π΄Π΅ΠΊΠΎ):
static forRoot ( environment ): ModuleWithProviders {
<strong i="9">@NgModule</strong> ( {
imports: [ environment.production ? ThisModule : ThatModule ],
providers: [ Provider1, Provider2 ]
} )
class ConfiguredMod {}
return { ngModule: ConfiguredMod }
}
Π Π°Π±ΠΎΡΠ°Π» ΠΊΠ°ΠΊ ΡΠ°ΡΠΌ ... ΠΏΠΎΠΊΠ° --prod. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π²ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ Π·Π΄Π΅ΡΡ ΡΠΆΠ°ΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
ΠΡΠΎΡΠΈΡΠ°Π² Π²ΡΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΏΠΎ ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅ (Π²ΠΊΠ»ΡΡΠ°Ρ Π²Π΅ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Angular Compiler), Ρ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π» ΡΡΠΎ, ΠΈ ΡΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ. ΠΠ΅ΠΏΡΠΈΡΡΠ½ΠΎ, Π½ΠΎ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΠΎ, ΠΎΡ ΡΡΠΎΠ³ΠΎ Π·Π°Π²ΠΈΡΠΈΡ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΠΌΠΎΠ΅ΠΉ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ "ΡΡΠΏΠ΅Ρ-ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΎ ΡΠ΅ΠΏΠΎ".
Π ΡΠ°ΠΉΠ»Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ:
<strong i="15">@NgModule</strong> ( {
imports: [ THISModule ],
providers: [ Provider1, Provider2 ]
} )
export class ConfiguredTHISMod {}
<strong i="16">@NgModule</strong> ( {
imports: [ THATModule ],
providers: [ Provider1, Provider2 ]
} )
export class ConfiguredTHATMod {}
....
static forRoot ( environment ) {
return { ngModule: ( environment.production ? ConfiguredTHISMod : ConfiguredTHATMod ) };
}
ΠΡΠ»ΠΈ Π±Ρ Ρ ΡΠ΄Π΅Π»Π°Π» ΡΡΠΎ:
static forRoot ( environment ) {
const mod = environment.production ? ConfiguredTHISMod : ConfiguredTHATMod;
return { ngModule: mod };
}
ΠΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠΎΠ³ΠΎ Π²Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΠ΅Π΄Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
static forRoot ( environment ) {
environment = ( environment && 'production' in environment ? environment : { production : false } );
return { ngModule: ( environment.production ? ConfiguredTHISMod : ConfiguredTHATMod ) };
}
ΠΠ½ ΡΠ½ΠΎΠ²Π° ΡΠ»ΠΎΠΌΠ°Π»ΡΡ.
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ», ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΡΠΎΠΌ, ΡΡΠΎ Ρ ΡΠΈΡΠ°Π» Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΠΈ Ρ ΠΎΡΡ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅ΡΡΡ, Ρ ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π²Π°Ρ, ΡΡΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π²ΠΎΠ΄ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΠ΅Π΄Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ΅ΠΊΡ, Π½ΠΎ Ρ ΠΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ·Π½Π°ΡΡ, ΡΡΠΎ Π² Π»ΡΡΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ Π±ΡΠ΄Ρ Π΄Π΅Π»Π°ΡΡ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΎΡΠΊΠ°ΠΆΡΡΡ ΠΎΡ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Ρ ΠΏΡΠΎΡΡΠΎ ΡΡΠ°ΡΡΠ»ΠΈΠ², ΡΡΠΎ ΠΏΠΎΠ½ΡΠ» ΡΡΠΎ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ²Π΅ΡΡ ΡΡΠΎΡΠ½ΠΎ.
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠΌΡ-ΡΠΎ ΡΠ°ΠΌ.
ΠΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΎΡΠΊΡΡΡΠΎ Π² Angular 5.2.11 ... Π΅ΡΡΡ Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ?
@ alan-agius4
Π£ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ?
ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΡΠ°Π²ΡΡ ΡΡΠΎ, ΠΏΠΎΠΊΠ° Ivy Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΌ ΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Angular 9). ΠΠΎ ΠΈΡ ΠΎΡΠ΅Π½ΠΊΠ°ΠΌ, Π½Π΅ ΠΆΠ΄ΠΈΡΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎ 2020 Π³ΠΎΠ΄Π° π
Π― ΡΠ²ΠΈΠ΄Π΅Π» ΠΊΠΎΠ΅-ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ Π² ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅.
ΠΠ°ΠΊΠ΅Ρ Nebular / auth ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²Π½ΡΡΡΠΈ forRoot, ΠΈ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ°ΠΊ ΠΎΠ½ΠΈ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΈ? Π― ΡΠΎΠ·Π΄Π°Π» Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈ Ρ ΠΌΠ΅Π½Ρ ΠΎΡΠΈΠ±ΠΊΠ° ... ΠΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΠ».
ΠΠ΅Π±ΡΠ»ΡΡΠ½ΡΠΉ / Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ git:
https://github.com/akveo/nebular/blob/master/src/framework/auth/auth.module.ts
ΠΡΡΡ ΠΈΠ΄Π΅ΠΈ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°?
@ stoto34 ... ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΠ°Π±ΡΠΈΠΊΠΈ. ΠΠ΄Π΅ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΠΎΠ½ΠΈ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ»ΠΎ ΡΠΎΠ³ΠΎ?
@ mlc-mlapis ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΠΎΡ ΠΎΠ±ΡΠ°Π·Π΅Ρ ΠΌΠΎΠ΅Π³ΠΎ app.module (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ nebular auth Π΄Π»Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ oauth2):
@ stoto34 ... Π² ΡΡΠΎΠΌ ΡΠ°Π·Π½ΠΈΡΠ° environment.BASE_URI + environment.ENDPOINT_CONFIGS.ADMIN
ΠΈ environment.BASE_URI + environment.ENDPOINT_CONFIGS.GRAPHQL
.
@ mlc-mlapis ΠΠ½Π΅ ΠΎΡΠ΅Π½Ρ ΠΆΠ°Π»Ρ, Π½ΠΎ Ρ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΎΡΠ²Π΅ΡΠ°. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π΄Ρ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠ° aot ΠΈΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ ΡΠ»ΠΎΠΌΠ°Π΅ΡΡΡ?
Π€ΡΠ½ΠΊΡΠΈΡ NbOAuth2AuthStrategy.setup ΡΠΎΠΆΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΈ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΊΠΎΠ΄ app.module
@ stoto34 ... ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ environment.BASE_URI + environment.ENDPOINT_CONFIGS.ADMIN
- ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ... ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-ΡΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ... Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ AOT Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΊΠ°ΠΊΠΎΠ² ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
@ mlc-mlapis Π― Π·Π°ΠΌΠ΅Π½ΠΈΠ» Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΎΠΉ Π½Π°ΠΏΡΡΠΌΡΡ. ΠΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΠ±ΠΎΡΠΊΠ° aot Π½Π΅ ΡΠ΄Π°Π»Π°ΡΡ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π΄Π΅ΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠ°Π²Ρ Π½Π°ΡΡΠ΅Ρ ΡΠ°ΠΌΠΎΠ²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ.
@ stoto34 ... Π°Ρ , Π° ΡΡΠΎ ΡΡΠΎ ... ΠΎΠΏΡΡΡ ΠΆΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ.
provide: NB_AUTH_TOKEN_INTERCEPTOR_FILTER, useValue: function (req: HttpRequest<any>) {...}
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @dherges. Π― ΡΠ½ΠΎΠ²Π° ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ΅ΡΠΈΠ» Π΅Π΅ Π΄Π»Ρ ΡΠ΅Π±Ρ Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄. Π― Π²Π½Π΅Ρ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ (Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅) Π² ΡΡΡΡΠΊΡΡΡΡ ΠΌΠΎΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΈ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΡΠ½ΠΎΠ²Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ AgGridModule, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΌΠΎΠ΄ΡΠ»Ρ. Π― ΡΠΌΠΎΠ³ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ² ...
"angularCompilerOptions": {
"fullTemplateTypeCheck": true
}
... Π² ΠΌΠΎΠΉ ΡΠ°ΠΉΠ» tsconfig.json. Π Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° ...
Note: It is recommended to set this to true because this option will default to true in the future.
Π’Π°ΠΊ ΡΡΠΎ Ρ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ ΡΡΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΎΠ½ Π½Π°Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΡ ΠΎΡΠΎΠ½Π΅Π½. :)
ΠΡΠ°ΠΊ, Ρ ΠΏΠΎΡΠ΅Π» ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΠ²ΠΎΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎ Π²ΡΠΎΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΊΠΎΡΠΎΡΠ°Ρ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ, ΠΈ Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ» ΡΡΠΎ-ΡΠΎ ΡΡΠ΅Π²ΠΎΠΆΠ½ΠΎΠ΅ ΠΈ Β«ΠΎΠ±ΡΡΡΠ½ΡΠ΅ΡΒ», ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΠΎΠΈ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΌΠΎΠ΅ΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²ΡΡΠ΅, ΡΡΠ°Π»ΠΈ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΠΈΠ½Π°ΡΠ΅. ΠΠΎΠ΅ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²ΡΡΠ΅, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π±ΡΠ»ΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°ΠΉΠ» tsconfig.json Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ. ΠΡΠ°ΠΊ, Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² ΡΠ±ΠΎΡΠΊΡ --ts--config <tsconfig.json>
. Π’Π΅ΠΏΠ΅ΡΡ Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ Π² ββΡΡΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ», ΠΏΡΡΠ°ΡΡΡ ΠΎΡΠ»Π°Π΄ΠΈΡΡ Π΅Π΅, ΡΡΠΎ ...
ng build
ΠΈ
ng build --ts-config tsconfig.json
Π΄Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ! ΠΠ°ΠΊΠ°Ρ? Π― ΠΏΠ΅ΡΠ΅Π΄Π°Ρ Π΅ΠΌΡ ΡΠ°ΠΉΠ» json ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π° Π²ΡΠΎΡΠΎΠΉ Π΄Π°Π΅Ρ ΠΌΠ½Π΅ ΠΌΠΎΡ ΠΎΡΠΈΠ±ΠΊΡ. Π§ΡΠΎ, ΡΠ΅ΡΡ Π²ΠΎΠ·ΡΠΌΠΈ, Ρ ΡΡΠΈΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ?
ΠΠ»Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠΎΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π»Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΉΠ»Π° tsconfig.json ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π½ΠΎ Π½Π΅ ΡΠ΄Π°Π²Π°Π»Π°ΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΡΠ°ΠΉΠ»Π° json Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΌΠ½Π΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ...
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true
}
... ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π΅ ΡΠΏΡΠ°ΡΠΈΠ²Π°ΠΉΡΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π½Π΅ Π·Π½Π°Ρ ΠΏΠΎΡΠ΅ΠΌΡ. :) ΠΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΏΠΎΠ»ΡΡΠΈΠ», Π΅ΡΠ»ΠΈ Π±Ρ Ρ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» ΠΈΡ , Π±ΡΠ»Π° Π΄ΡΡΠ³ΠΎΠΉ, Π½ΠΎ Π±ΡΠ»Π° ΡΡΠΎΠΉ .
fullTemplateTypeCheck: Cannot read property 'type' of null
@crowmagnumb Π― ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΠ°ΠΉΠ» ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²Π°ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ - ΡΡΠΎ Π½Π΅ ΠΊΠΎΡΠ΅Π½Ρ tsconfig.json
, Π° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ lib/tsconfig.lib.json
ΠΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ: https://github.com/angular/angular-cli/blob/a13924364482cbf9a61ba4c3ac1171d3feaf8034/tests/angular_devkit/build_ng_packagr/ng-packaged/projects/lib/tsconfig.lib.json
{
"extends": "./tsconfig.dist.json",
"compilerOptions": {
// ...
},
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true
},
Π ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ angular ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ angular, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π°Π²ΠΈΡΡ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
enable-angular-compiler-annotation.5.2.9.patch
enable-angular-compiler-annotation.5.2.10.patch
enable-angular-compiler-annotation.6.0.1.patch
enable-angular-compiler-annotation.6.0.2.patch
enable-angular-compiler-annotation.6.1.10.patch
enable-angular-compiler-annotation.7.1.0.patch
ΡΠ°ΠΉΠ» ΠΏΠ°ΡΡΠ° ΠΏΠΎΡΡΠΈ ΡΠ°ΠΊΠΎΠΉ
Index: node_modules/@angular/compiler/bundles/compiler.umd.js
IDEA additional info:
<+>UTF-8
===================================================================
--- node_modules/@angular/compiler/bundles/compiler.umd.js (date 1543397797000)
+++ node_modules/@angular/compiler/bundles/compiler.umd.js (date 1543398810000)
@@ -24526,6 +24526,14 @@
this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Self'), createSelf);
this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'SkipSelf'), createSkipSelf);
this._registerDecoratorOrConstructor(this.findDeclaration(ANGULAR_CORE, 'Optional'), createOptional);
+ this._registerDecoratorOrConstructor(this.findDeclaration('@pkg/transform-proxy', 'TPProxyParam'), makeMetadataFactory('TPProxyParam'));
+ this._registerDecoratorOrConstructor(this.findDeclaration('@pkg/transform-proxy', 'TPProxyRequestBody'), makeMetadataFactory('TPProxyRequestBody'));
+ this._registerDecoratorOrConstructor(this.findDeclaration('@pkg/transform-proxy', 'TPProxyRequest'), makeMetadataFactory('TPProxyRequest'));
};
...
...
...
sh.exec(
patch -p0 -i tools / cli-patches / version / enable-angular-compiler-annotation. $ {Version} .patch );
@LinBoLen ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΠΏΠΈΠ°Ρ, ΡΠΎΠ³Π΄Π°
Π― ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΌΠ° ΡΠ±ΠΎΡΠΊΠΈ.
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΎΠΏΡΠΈΠΌΠΈΡΡΠΈΡΠ½ΡΠΉ Π±Π΅Π»ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ±ΠΎΡΠΊΠΈ (ΡΠΏΠΈΡΠΎΠΊ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ) Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° angular?
ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΌΠ½Π΅
import { someCoreModule } from '@myPackage/core';
export const someCoreModuleforRoot = someCoreModule.forRoot(); // Without "export" build will crash
@NgModule({
imports: [
someCoreModuleforRoot
]
})
export class MyModule {
}
"ng-packagr": "4.2.0"
"@angular/cli": "7.3.8"
Π― ΡΠ΅ΡΠΏΠ°Π» Π²Π΄ΠΎΡ Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΎΠ² Π²ΡΡΠ΅, ΠΈ ΠΏΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΡΠ±ΠΎΡΠΊΠ° AOT ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² fullTemplateTypeCheck. https://github.com/Saad-Amjad/session-manager Π ΡΠ°Π·Π±ΠΈΠ²ΠΊΠ° ΠΊΠΎΠ΄Π° Π·Π΄Π΅ΡΡ: https://medium.com/monstar-lab-bangladesh-engineering/making-configurable-angular-feature-modules-using-strategy -pattern-b8f43340550a
ΠΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ, ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π² ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°ΠΉΠ» Π² public_api.ts
ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
Π€Π°ΠΉΠ» ~ / lib / index.ts
export * from './sample/data.component';
Π€Π°ΠΉΠ» ~ / public_api.ts
export * from './lib';
ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° ng build --prod --aot=false
, Π½ΠΎ Π½Π΅ Π΄ΠΎ ng build --prod
...
ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ:
Π€Π°ΠΉΠ» ~ / public_api.ts
export * from '.lib/sample/data.component;'
ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉ,
Π£ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π²ΡΡΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ ... ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π»Π°ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ» ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ forRoot
. Π ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π» ΡΠ°ΡΡΠ½ΠΎΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π² ΠΌΠΎΠ΄ΡΠ»Π΅, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ forRoot
Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΠΌΠΏΠΎΡΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠΎ Π²ΡΡΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π±ΡΠ»ΠΎ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ, Ρ ΡΠ΄Π°Π»ΠΈΠ» Π΅Π³ΠΎ, ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
@ apascual-pl
Π― ΡΠ°Π±ΠΎΡΠ°Π» ΠΏΠΎΡΠ»Π΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ΅Π³ΠΎ public_api
ΠΠΎ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Ρ ΡΠ΄Π΅Π»Π°Ρ ΡΠΊΡΠΏΠΎΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΡΠ΅ΡΠ²ΠΈΡ Π² public_api Π±ΡΠ΄Π΅Ρ Π³ΡΡΠ·Π½ΡΠΌ
ΠΠ°ΠΊ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅?
--aot=false vs export all of module in the public_api
Π― ΡΡΠΈΡΠ°Ρ , ΡΡΠΎ ΠΠΠ’ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·Ρ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ
ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
export
Π·Π°ΡΠ²Π»Π΅Π½ΠΈΡ Π² public_api.ts
ΡΠ°ΠΉΠ»Π° Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ΅Π½Ρ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ Π½Π΅ Π²Π΅ΡΡ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈ ΡΠ»ΡΠΆΠ±Ρ Π² ΡΠ°ΠΉΠ» public_api.ts
.
Π― ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² Β«ΠΏΠ°ΠΏΠΊΠΈ-ΠΌΠΎΠ΄ΡΠ»ΠΈΒ», ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
ΠΈΠΌΠ΅Π΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ Angular ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΡΠ»ΡΠΆΠ±Ρ ΠΈ Ρ. Π. ΠΠ°ΠΆΠ΄Π°Ρ ΠΏΠ°ΠΏΠΊΠ° ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» index.ts
ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ Π²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΡΠ»ΡΠΆΠ±Ρ ΠΈ Ρ. ΡΡΡ ΠΏΠ°ΠΏΠΊΡ.
Π€Π°ΠΉΠ» public_api.ts
ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° ΡΠΊΡΠΏΠΎΡΡΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ. Π§ΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΡΠΎΠ³ΠΎ:
// public_api.ts
// Export from the Dialog module-folder
export * from './my-dialog-module/'; // Export all components, services, etc.
export * from './my-dialog-module/my-dialog.module'; // Export the Angular module
// Export from the Auth module-folder
export * from './my-auth-module/'; // Export all components, services, etc.
export * from './my-auth-module/my-auth.module'; // Export the Angular module
Π€Π°ΠΉΠ»Ρ Barrel Π΄Π»Ρ ΡΠΊΡΠΏΠΎΡΡΠ° Β«Π²ΡΠ΅Π³ΠΎΒ» (ΠΎΠ±ΡΡΠ½ΠΎ Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ Β«ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅Β» Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ) Π²ΡΠ·Π²Π°Π»ΠΈ Ρ ΠΌΠ΅Π½Ρ Π³ΠΎΠ»ΠΎΠ²Π½ΡΡ Π±ΠΎΠ»Ρ Π² Π·Π΄Π°Π½ΠΈΠΈ AOT. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΎ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΡΠ»ΠΊΠ°Ρ ΠΈΠ»ΠΈ ΡΠ±ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ. Π― Π²ΠΈΠ΄Π΅Π», ΠΊΠ°ΠΊ Π»ΡΠ΄ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°Π΄ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ ΡΠ±ΠΎΡΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ forwardRef ΠΈ ΡΠΎΠΌΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ (ΡΡΠΎ Π½Π΅ ΡΡΡΡΠ°Π½ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅), Π½ΠΎ Π² ΡΠ΅Π»ΠΎΠΌ Ρ Π±Ρ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ index.ts ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΡΠΎΠΌΠ΅ ΠΊΠ°ΠΊ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΡΠΊΡΠΏΠΎΡΡ.
ΠΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Ρ Π²ΠΈΠ΄Π΅Π» ΡΡΠΎ (Π° Ρ Π²ΠΈΠ΄Π΅Π» ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎ, ΠΎΠ±ΡΡΠ½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΠ½Π΅ ΠΏΠΎΡΡΡΠ°ΡΡ ΡΠ΅ΠΈΠ½ΠΆΠΈΠ½ΠΈΡΠΈΠ½Π³ ΡΡΠ°ΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π²ΠΈΠ΄Π°, ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅, Π³Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΡΡ ΠΌΡΠ΄ΡΠΎΡΡΡ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠ²ΠΎΠ»Π°), Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΡ , ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π² ΡΠ°ΠΉΠ»Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π² ΡΠ°ΠΉΠ»Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Π»ΡΠ±ΠΎΠΉ Β«Π²Π΅ΡΡΒ» ΠΈΠΌΠΏΠΎΡΡ Π΄Π»Ρ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΡΠ΅ΡΡΡΡΠΎΠ².
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΉΠ» my-dialog-module, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΡΠ΅ΡΡΡΡΡ. ΠΡΠ±ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΡΡΡΡ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΌ API [exports], Π° Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ, ΡΡΠΎ Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ) Π±ΡΠ΄Π΅Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎ (ΡΠΊΡΠΏΠΎΡΡ * ΠΈΠ· my.enum.ts).
Π― Π½Π΅ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½ΠΎ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ Π±Π°ΡΡΠ΅Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ΄Π½ΠΎ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅ΡΡ.
Π‘Π»Π΅Π΄ΡΡΡΠ΅ΠΌΡ Π±Π΅Π΄ΠΎΠ»Π°Π³Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΡΠΊΠ½Π΅ΡΡΡ Π½Π° ΡΡΡ Π΄ΠΎ ΡΠΌΠ΅ΡΠ½ΠΎΠ³ΠΎ Π΄Π»ΠΈΠ½Π½ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² ΠΈ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ°Π΄Π΅ΡΡΡ, Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ ΡΡΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ, ΠΈ ΠΎΠ½ Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ.
ΠΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΡ forRoot()
Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΡΠ°Π±ΠΎΡΠΎΠΉ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Angular, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ 8.2 ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ΅, Π½ΠΎ ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π½Π°ΡΠ°Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ 8.3 ΠΈΠ»ΠΈ Π²ΡΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΎΡΠΈΠ±ΠΊΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π»Π°ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ:
ERROR in Error during template compile of 'MainModule'
Function calls are not supported in decorators but 'LoggerModule' was called.
Unexpected value 'undefined' imported by the module 'MainModule in src/app/main/main.module.ts'
Error during template compile of 'MainModule'
Function calls are not supported in decorators but 'LoggerModule' was called.
MainModule
Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΌΠΎΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π° LoggerModule
Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π±ΡΠ»Π° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π° Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ 8.0 ΠΈ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ 8.2, Π½ΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ 8.3 ΠΈ Π²ΡΡΠ΅.
ΠΠΎΡ ΡΠ°Π³ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Ρ Π²Π°ΠΌΠΈ:
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π² Π²Π°ΡΠ΅ΠΌ tsconfig.lib.json
Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true
},
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π»Ρ NgModule
, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ , Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
return
ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ModuleWithProviders
.providers
providers
Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ export
Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π² Π²Π°ΡΠ΅ΠΌ public_api
// @dynamic
Π½Π°Π΄ ΠΌΠΎΠΈΠΌ @NgModule()
providers
ModuleWithProviders<LoggerModule>
ΠΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΡΠ»ΠΎΠΆΠ½ΡΠ»ΠΈ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²ΡΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΎΡΡΠ°Π²Π°ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ, ΠΊΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
ΠΠΎΡ ΡΠ΅ΠΌ Π² ΠΈΡΠΎΠ³Π΅ ΠΎΠΊΠ°Π·Π°Π»ΡΡ LoggerModule
, ΠΈ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ ΠΌΠ΅Π½Ρ:
export const LOGGER_OPTIONS: InjectionToken<LoggerConfig> = new InjectionToken<LoggerConfig>('LOGGER_OPTIONS');
export function LogServiceFactory(
levels: LOGGER_LEVEL,
console: ConsoleMethods<void>,
prefixService: PrefixService,
loggerConfig: LoggerConfig
) {
return loggerConfig && loggerConfig.enabled
? new LogConsoleService(levels, console, prefixService)
: new LogNoopService();
}
// <strong i="8">@dynamic</strong>
@NgModule({})
export class LoggerModule {
public static forRoot(loggerConfig?: LoggerConfig): ModuleWithProviders<LoggerModule> {
return {
ngModule: LoggerModule,
providers: [
{provide: LOGGER_LEVELS, useValue: loggerConfig.levels || LOGGER_ALL},
{provide: LOGGER_TAILS, useValue: loggerConfig.tails || LOGGER_TAILS_DEFAULT},
{provide: LOGGER_CONSOLE, useValue: loggerConfig.console || console},
{provide: LOGGER_OPTIONS, useValue: loggerConfig || {}},
{
provide: LogService,
useFactory: LogServiceFactory,
deps: [LOGGER_LEVELS, LOGGER_CONSOLE, PrefixService, LOGGER_OPTIONS]
}
]
};
}
}
ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ forRoot()
- ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ, Π° Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π΅Ρ. ΠΡΡΠ³ΠΎΠ΅ Π΄Π΅Π»ΠΎ, ΡΡΠΎ ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π·Π°ΡΡΠ°Π²ΠΈΠ»ΠΎ ΠΌΠ΅Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±ΡΠΈΠΊΡ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ loggerConfig
Π² ΡΠ°Π±ΡΠΈΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π½ΠΈΠΆΠ΅ Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π±ΡΠ» ΡΠ»ΠΎΠΌΠ°Π½ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π°. Π’ΠΎ, ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΡΠ΄ΠΎ.
@NgModule()
export class LoggerModule {
public static forRoot(options?: LoggerConfig): ModuleWithProviders {
options = Object.assign({
enabled: true,
levels: LOGGER_ALL,
tails: LOGGER_TAILS_DEFAULT,
console: console
} as LoggerConfig, options || {});
const providers: Provider[] = [
{provide: LOGGER_LEVELS, useValue: options.levels},
{provide: LOGGER_TAILS, useValue: options.tails},
{provide: LOGGER_CONSOLE, useValue: options.console}
];
if (options && options.enabled) {
providers.push({provide: LogService, useClass: LogConsoleService});
} else {
providers.push({provide: LogService, useClass: LogNoopService});
}
return {ngModule: LoggerModule, providers};
}
}
ΠΠ»Ρ ΠΌΠ΅Π½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΈΠ·-Π·Π° Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΌΠΎΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ lib:
// app-injector.ts
import { Injector } from '@angular/core';
export let AppInjector: Injector;
export function setAppInjector(injector: Injector) {
AppInjector = injector;
}
// lib.module.ts
import { Injector, ... } from '@angular/core';
import { setAppInjector } from './app-injector';
...
@NgModule()
export class LibModule {
constructor(injector: Injector) {
setAppInjector(injector);
}
}
Π― Π½Π΅ ΠΌΠΎΠ³ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ ΠΏΠΎΡΠ΅ΠΌΡ, Π½ΠΎ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Ρ ΡΠΌΠΎΠ³ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ:
// app-injector.ts
import { Injector } from '@angular/core';
// <strong i="11">@dynamic</strong>
export class AppInjector {
private static injector: Injector;
static setInjector(injector: Injector) {
AppInjector.injector = injector;
}
}
// lib.module.ts
import { Injector, ... } from '@angular/core';
import { AppInjector } from './app-injector';
...
@NgModule()
export class LibModule {
constructor(injector: Injector) {
AppInjector.setInjector(injector);
}
}
Π― Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄ΠΎ Angular 9. ΠΠ°ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ivy Π² ΠΌΠΎΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ tsconfig.lib.json
ΠΏΡΠΈΠ²Π΅Π»ΠΎ ΠΊ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true,
"enableIvy": false
},
ΠΠΊΠ»ΡΡΠΈΡΡ ΠΏΠ»ΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅
``
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": ΠΏΡΠ°Π²Π΄Π°,
"fullTemplateTypeCheck": ΠΏΡΠ°Π²Π΄Π°,
"enableResourceInlining": ΠΏΡΠ°Π²Π΄Π°,
"enableIvy": Π»ΠΎΠΆΡ
}
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": ΠΏΡΠ°Π²Π΄Π°,
"enableResourceInlining": ΠΏΡΠ°Π²Π΄Π°,
"enableIvy": ΠΏΡΠ°Π²Π΄Π°
}
``
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π° ΠΊΠ°ΠΊ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π½Π°Ρ ΠΠΉΠ²ΠΈ . ΠΠΉΠ²ΠΈ ΠΏΡΠΈΠ·Π΅ΠΌΠ»ΠΈΠ»Π°ΡΡ.
ΠΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ, ΡΡΠΎ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΡΠ΅Π½Π°?
Π― Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π» ΡΠ²ΠΎΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΠ΅ΡΠ²ΠΎΠΏΡΠΈΡΠΈΠ½Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΅ΡΠ΅ Π² 2018 Π³ΠΎΠ΄Ρ Π² PR ng-packagr . Π‘ Ivy Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π² Angular 9.0 Ρ Ivy ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
ΠΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΡΠ΅ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΈ Π£ΠΎΡΠ΄Π°: @wardbell
Π‘Π±ΠΎΡΠΊΠ° Π±ΡΠ΄Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ / Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠΉ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ
angularCompilerOptions
. ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ Π² ΡΡΠΎΠΌ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΈΠΠΎΠ±Π΅ΠΉΡΠ΅ΡΡ ΡΡΠΏΠ΅Ρ Π°
"skipTemplateCodegen": true, "strictMetadataEmit": true, "fullTemplateTypeCheck": true
"skipTemplateCodegen": false, "strictMetadataEmit": false
"skipTemplateCodegen": false, "strictMetadataEmit": true, // fullTemplateTypeCheck omitted (= default value)
Π‘Π±ΠΎΠΈ ΡΠ±ΠΎΡΠΊΠΈ
"skipTemplateCodegen": true, "strictMetadataEmit": true, // fullTemplateTypeCheck omitted (= default value)
"skipTemplateCodegen": true, "strictMetadataEmit": false // fullTemplateTypeCheck omitted (= default value)
ΠΠ°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π£ΠΎΡΠ΄Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
"skipTemplateCodegen": true
ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ"fullTemplateTypeCheck": true
ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ» Π²ΠΊΠ»ΡΡΠ΅Π½ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΡ ngc.ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ / Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΡΡΠ»ΠΈ
ΠΠΎ ΠΌΠΎΠ΅ΠΌΡ ΠΎΠΏΡΡΡ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Β«Π²ΡΠ΅ΠΌΡ, ΡΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π΄Π»Ρ AoTΒ» (ΡΠΌ. Β«ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉΒ» Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ). Imo, ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΎΠΏΡΠΈΠ΅ΠΉ
strictMetadataEmit
ΠΈΠ»ΠΈ ΠΌΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ ΡΠΆΠ°ΡΠ½ΠΎ Π½Π°ΡΡΡΠ΅Π½ΠΎ πΠΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ ΠΎΠΏΡΡΡ ΠΌΠΎΠ³Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²
static forRoot(): ModuleWithProviders
, ΠΈΠ½ΠΎΠ³Π΄Π° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΈΠ»ΠΈ Π½Π΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Β«ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌΠΎΠΉΒ». ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π½Π°Π΄Π΅ΠΆΠ½ΡΡ ΡΠ΅ΠΏΡΠΎ, ΠΈ Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ Ρ ΠΎΡΡ ΡΡΡΠΎΠΈΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΌΡΡΠ½ΡΡ Π²ΠΎΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡΡ ΠΎ ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Ρ Π²ΠΈΠ΄Π΅Π» ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ / Π½Π΅ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ.ΠΠΎΠΆΠ΅Ρ Π»ΠΈ ngc ΡΠ»ΡΡΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅?
_ Π§ΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ, Π΅ΡΠ»ΠΈ ngc ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ. _
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ»ΡΠΆΠ±Ρ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΡΡΡΠΎΠ² ... Π½ΠΎ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ Π½ΠΈΠΆΠ΅ (Π²ΡΠΎΡΠΎΠΉ ΡΠ½ΠΈΠΌΠΎΠΊ ΡΠΊΡΠ°Π½Π°) ... Π― ΡΠΎΠΆΠ΅ ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π΅ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½Π΅ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ
ΠΡΠΎ ΠΌΠΎΡ Π½Π°ΡΡΠΎΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ng build - prod ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ AOT, Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»ΡΠΆΠ±Ρ Π² ΠΌΠ°ΡΡΡΡΡΠ°Ρ ?
ΠΡΠΎ ΡΠ²ΠΎΠ΄ΠΈΡ ΠΌΠ΅Π½Ρ Ρ ΡΠΌΠ°. ΠΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ? Π ΠΊΠ°ΠΊ ΡΡΠΎΠΌΡ Π²ΡΠΏΡΡΠΊΡ 2 Π³ΠΎΠ΄Π°? Π― ΠΏΡΠΈΠ½ΠΈΠΌΠ°Ρ Π±Π΅Π·ΡΠΌΠ½ΡΠ΅ ΡΠ°Π±Π»Π΅ΡΠΊΠΈ?
@ jpike88, ΡΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ°Π³ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΌΠ΅Π½Ρ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΈ. ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Π΄Π»Ρ Π²Π°Ρ https://github.com/angular/angular/issues/23609#issuecomment -561615821
ΠΡΠΈΠ²Π΅Ρ @ jpike88 , Π²ΡΠ΅ΠΌ.
ΠΡΠΎ ΡΠ²ΠΎΠ΄ΠΈΡ ΠΌΠ΅Π½Ρ Ρ ΡΠΌΠ°. ΠΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ?
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½, ΡΡΠΎ Π±Π΅Π·ΡΠΌΠΈΠ΅, ΡΡΠΎ Π΄Π»Ρ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΡΡΠΎΠΊΠΈ / ΡΡΠΎΠ»Π±ΡΠ°. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΡΠΎ Π½Π΅ΠΏΡΠΎΡΡΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½ΠΎΡΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ, ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠ΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
ngc (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ View Engine) Π½Π°ΡΠΈΠ½Π°Π΅Ρ Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Β«ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
Β» ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΠΉΠ» .ts
ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠ΅ΠΉ Π΅Π³ΠΎ ΡΡΡΡΠΊΡΡΡΠΎΠΉ JSON. ΠΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΡΠΈΠΌΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΠΎΠ½ΡΠ΅ΠΊΡΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (Π½ΠΎΠΌΠ΅ΡΠ° ΡΡΡΠΎΠΊ / ΡΡΠΎΠ»Π±ΡΠΎΠ²) ΡΠΈΠΊΡΠΈΡΡΠ΅ΡΡΡ Π΄Π»Ρ _ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
_ ΡΡΡΡΠΊΡΡΡ, Π½ΠΎ Π½Π΅ Π΄Π»Ρ Π²ΡΠ΅Ρ
, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
ΠΈ ΡΠ½ΠΈΠ·ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
ΠΡΠΎΠ²Π΅ΡΠΊΠ°, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠ°Ρ strictMetadataEmit
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΡΡΠΈΡ
ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΡΡΠΎΠΊΠΈ / ΡΡΠΎΠ»Π±ΡΠ° ΠΎΡΠΈΠ±ΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΈΠΏΠ° ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, Π·Π°Ρ
Π²Π°ΡΠΈΠ»ΠΈ Π»ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. ΠΡΠΈ Π΄Π²Π΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½Π°.
ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΆΠΈΠ·Π½ΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠΎΠΉ, Π½Π΅ ΡΡΡΡΠ°Π½ΡΡΡΡΡ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΠΏΠ°ΡΡ Π»Π΅Ρ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΡΠ°ΡΡΡΡ ΡΠ΅ΡΠ°ΡΡ Π²ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΌΡ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΠ»ΠΈΡΡ Π½Π° Π·Π°ΠΌΠ΅Π½Π΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ Π² ΡΠ΅Π»ΠΎΠΌ Π½Π° ΡΠΈΡΡΠ΅ΠΌΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅Ρ ΡΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Ivy _ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ_ Ρ ΠΎΡΠΎΡ Π² Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΡΠΎΡΠ½ΠΎΠΌ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠΈ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ΅Π»Π΅ΠΉ Π΅Π³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π΄Π½Ρ.
Π’Π°ΠΊ ΡΡΠΎ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ - ΠΠΉΠ²ΠΈ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΡΠ΄Π΅Π»Π°Π΅Ρ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠ΅ ΠΈ Π½Π΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠΎΠΉ, Π² ΠΏΡΠΎΡΠ»ΠΎΠΌ. Π‘ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΠΎΠ½ΠΈ Π²ΡΠ΅ Π΅ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ View Engine ΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΡΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ strictMetadataEmit
, Π½ΠΎ, Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ ΡΠ°Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΆΠ΅.
Π― ΠΈΡΠΏΡΠ°Π²ΠΈΠ» ΠΎΡΠΈΠ±ΠΊΡ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² https://github.com/angular/angular/issues/23609#issuecomment -561615821
- Ρ Π²Π°Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ
return
ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡModuleWithProviders
.
ΠΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΡΡΠΎ
@NgModule({
imports: [
// [...]
]
})
export class CoreModule implements OnDestroy {
private static showUserInfo = true;
static forRoot(options: CoreOptions = {}): ModuleWithProviders<NextCoreModule> {
// this line caused the error
// NextCoreModule.showUserInfo = options.showUserInfo ?? true;
return {
ngModule: NextCoreModule,
providers: [
{
provide: APP_INITIALIZER,
useFactory: initialize,
deps: [
ConfigBuilderService, AppKeyService, TranslateService, Title, coreOptionsToken
],
multi: true
},
{ provide: coreOptionsToken, useValue: options || {} }
]
};
}
// [...]
}
@kroeder ΠΡ, ΡΡΡ, ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΌΠΎΠΉ Π΄Π΅Π½Ρ! Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!
ΠΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π·Π½Π°Π΅Ρ, Π·Π°Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π»ΠΈ ΡΡΠΎ? Π ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ?
ΠΡΠΎΡΡΠΈΡΠ΅ # 36415 ΠΈ # 37126 Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΈΡΠΈΠ½Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Angular Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ (ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ), ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΊΠΎΠ΄.
Π― ΠΈΡΠΏΡΠ°Π²ΠΈΠ» ΡΡΠΎ, Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΠΈΠΌΠΏΠΎΡΡ RouterModule.forChild(routes)
Π½Π° ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ:
export const routerModule = RouterModule.forChild(routes);
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΡΠ΅ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΈ Π£ΠΎΡΠ΄Π°: @wardbell
Π‘Π±ΠΎΡΠΊΠ° Π±ΡΠ΄Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ / Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠΉ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ
angularCompilerOptions
. ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ Π² ΡΡΠΎΠΌ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΈΠΠΎΠ±Π΅ΠΉΡΠ΅ΡΡ ΡΡΠΏΠ΅Ρ Π°
Π‘Π±ΠΎΠΈ ΡΠ±ΠΎΡΠΊΠΈ
ΠΠ°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π£ΠΎΡΠ΄Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
"skipTemplateCodegen": true
ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ"fullTemplateTypeCheck": true
ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ» Π²ΠΊΠ»ΡΡΠ΅Π½ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΡ ngc.ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ / Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΡΡΠ»ΠΈ
ΠΠΎ ΠΌΠΎΠ΅ΠΌΡ ΠΎΠΏΡΡΡ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Β«Π²ΡΠ΅ΠΌΡ, ΡΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π΄Π»Ρ AoTΒ» (ΡΠΌ. Β«ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉΒ» Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ). Imo, ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΎΠΏΡΠΈΠ΅ΠΉ
strictMetadataEmit
ΠΈΠ»ΠΈ ΠΌΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ ΡΠΆΠ°ΡΠ½ΠΎ Π½Π°ΡΡΡΠ΅Π½ΠΎ πΠΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ ΠΎΠΏΡΡΡ ΠΌΠΎΠ³Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²
static forRoot(): ModuleWithProviders
, ΠΈΠ½ΠΎΠ³Π΄Π° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΈΠ»ΠΈ Π½Π΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Β«ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌΠΎΠΉΒ». ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π½Π°Π΄Π΅ΠΆΠ½ΡΡ ΡΠ΅ΠΏΡΠΎ, ΠΈ Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ Ρ ΠΎΡΡ ΡΡΡΠΎΠΈΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΌΡΡΠ½ΡΡ Π²ΠΎΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡΡ ΠΎ ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Ρ Π²ΠΈΠ΄Π΅Π» ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ / Π½Π΅ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ.ΠΠΎΠΆΠ΅Ρ Π»ΠΈ ngc ΡΠ»ΡΡΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅?
Π§ΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ, ΡΡΠΎ ngc ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΡΠ²Π°Π΅Ρ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ.