Angular-google-maps: 각도 6 지원

에 λ§Œλ“  2018λ…„ 04μ›” 24일  Β·  24μ½”λ©˜νŠΈ  Β·  좜처: SebastianM/angular-google-maps

문제 μ„€λͺ…

ν˜„μž¬ 이 νŒ¨ν‚€μ§€μ—λŠ” @angular/common@^4.0.0 || ^5.0.0 및 @angular/core@^4.0.0 || ^5.0.0 κ°€ ν•„μš”ν•©λ‹ˆλ‹€. λ‚˜λŠ” λ³€κ²½ 사항이 그닀지 관련이 μ—†λ‹€κ³  μƒκ°ν•˜λ―€λ‘œ μ•„λ§ˆλ„ Angular 6을 μ§€μ›ν•˜λŠ” λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ΄ μ‰¬μšΈ κ²ƒμž…λ‹ˆλ‹€.

λ‚΄κ°€ 찾은 μ£Όμš” λ¬Έμ œλŠ” 일뢀 λͺ¨λ“ˆμ΄ 경둜λ₯Ό λ³€κ²½ν•˜λŠ” v6.0.0으둜의 RxJS 변경에 κ΄€ν•œ κ²ƒμ΄λ―€λ‘œ μ—…λ°μ΄νŠΈν•΄μ•Ό ν•©λ‹ˆλ‹€.

νŒ¨ν‚€μ§€ 쒅속성에 λŒ€ν•œ λ§Žμ€ μ£Όμš” λ³€κ²½ 사항이 μžˆμœΌλ―€λ‘œ 2.0.0 λ²„μ „μ˜ λ¦΄λ¦¬μŠ€κ°€ ν•„μš”ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ„€μΉ˜λ₯Ό 톡해 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
npm install rxjs<strong i="6">@6</strong> rxjs-compat<strong i="7">@6</strong> --save

μ„€λͺ…λœ λŒ€λ‘œ https://github.com/ReactiveX/rxjs/blob/master/MIGRATION.md

agm 맡은 RXJS 6κ³Ό μ€‘λ‹¨λ˜λ©° 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ„ μœ„ν•΄ compat λͺ¨λ“ˆμ΄ ν•„μš”ν•©λ‹ˆλ‹€.

λͺ¨λ“  24 λŒ“κΈ€

λŒ“κΈ€μ€ μ—¬κΈ°

μ•ˆλ…•,

λ‚΄ ν”„λ‘œμ νŠΈλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•˜λ©΄ λ‹€μŒκ³Ό 같은 κ΄€λ ¨ 였λ₯˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

node_modules/@agm/core/services/google-maps-api-wrapper.d.ts(2,10): error TS2305: Module '"my-project/node_modules/rxjs/Observable"' has no exported member 'Observable'.
node_modules/@agm/core/services/managers/circle-manager.d.ts(2,10): error TS2305: Module '"my-project/node_modules/rxjs/Observable"' has no exported member 'Observable'.
node_modules/@agm/core/services/managers/data-layer-manager.d.ts(2,10): error TS2305: Module '"my-project/node_modules/rxjs/Observable"' has no exported member 'Observable'.
node_modules/@agm/core/services/managers/info-window-manager.d.ts(1,10): error TS2305: Module '"my-project/node_modules/rxjs/Observable"' has no exported member 'Observable'.
node_modules/@agm/core/services/managers/kml-layer-manager.d.ts(2,10): error TS2305: Module '"my-project/node_modules/rxjs/Observable"' has no exported member 'Observable'.
node_modules/@agm/core/services/managers/marker-manager.d.ts(2,10): error TS2305: Module '"my-project/node_modules/rxjs/Observable"' has no exported member 'Observable'.
node_modules/@agm/core/services/managers/polygon-manager.d.ts(2,10): error TS2305: Module '"my-project/node_modules/rxjs/Observable"' has no exported member 'Observable'.
node_modules/@agm/core/services/managers/polyline-manager.d.ts(2,10): error TS2305: Module '"my-project/node_modules/rxjs/Observable"' has no exported member 'Observable'.
"@agm/core": "^1.0.0-beta.2",
"@angular/*": "6.0.0",
"rxjs": "^6.1.0",
"typescript": "2.7.2"

μ„€μΉ˜λ₯Ό 톡해 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
npm install rxjs<strong i="6">@6</strong> rxjs-compat<strong i="7">@6</strong> --save

μ„€λͺ…λœ λŒ€λ‘œ https://github.com/ReactiveX/rxjs/blob/master/MIGRATION.md

agm 맡은 RXJS 6κ³Ό μ€‘λ‹¨λ˜λ©° 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ„ μœ„ν•΄ compat λͺ¨λ“ˆμ΄ ν•„μš”ν•©λ‹ˆλ‹€.

Angular 6 μ—…κ·Έλ ˆμ΄λ“œ ν›„ "snazzy-info-window"에 μ—¬μ „νžˆ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.
core.js:1601 ERROR Error: Uncaught (in promise): TypeError: elems[0] is not a constructor TypeError: elems[0] is not a constructor at snazzy-info-window.js:130 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:388) at Object.onInvoke (core.js:4071) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:387) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run (zone.js:138) at zone.js:872 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421) at Object.onInvokeTask (core.js:4062) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188) at snazzy-info-window.js:130 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:388) at Object.onInvoke (core.js:4071) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:387) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run (zone.js:138) at zone.js:872 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421) at Object.onInvokeTask (core.js:4062) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188) at resolvePromise (zone.js:814) at resolvePromise (zone.js:771) at zone.js:873 at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421) at Object.onInvokeTask (core.js:4062) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:420) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:188) at drainMicroTaskQueue (zone.js:595)

그리고 λ‹€μŒκ³Ό 같은 κ²½κ³  λ©”μ‹œμ§€λ„ λ°›μŠ΅λ‹ˆλ‹€.
client?719c:153 ./node_modules/@agm/snazzy-info-window/directives/snazzy-info-window.js System.import() is deprecated and will be removed soon. Use import() instead. For more info visit https://webpack.js.org/guides/code-splitting/

rxjs-compat νŒ¨ν‚€μ§€ μ‚¬μš©μ— μ£Όμ˜ν•˜μ‹­μ‹œμ˜€. μ΄λŠ” 단지 ν•΄κ²° 방법일 뿐이며 ν”„λ‘œμ νŠΈμ— λ§Žμ€ μ˜€λ²„ν—€λ“œλ₯Ό μΆ”κ°€ν•  것이기 λ•Œλ¬Έμž…λ‹ˆλ‹€. 이제 RxJS 6으둜 아직 μ—…κ·Έλ ˆμ΄λ“œλ˜μ§€ μ•Šμ€ 이와 같은 λ§Žμ€ νŒ¨ν‚€μ§€λ‘œ 인해 ν•„μš”ν•˜μ§€λ§Œ κ°€λŠ₯ν•œ ν•œ 빨리 μ œκ±°ν•˜μ‹­μ‹œμ˜€.

@epenance λŠ” νŒ¨ν‚€μ§€λ₯Ό [email protected] 으둜 μ—…λ°μ΄νŠΈν•˜λŠ” μž‘μ—…μ„ ν›Œλ₯­ν•˜κ²Œ μˆ˜ν–‰ν–ˆμ§€λ§Œ Angular6κ³Ό μ™„μ „νžˆ ν˜Έν™˜λ˜λ„λ‘ ν•˜κΈ° 전에 μ£Όμš” λ³€κ²½ 사항을 확인해야 ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

@ ukon1990 Angular 6은 webpack 4λ₯Ό μ‚¬μš©ν•˜λ„λ‘ μ „ν™˜λ˜μ–΄ commonjs λͺ¨λ“ˆμ„ λ™μ μœΌλ‘œ κ°€μ Έμ˜€λŠ” λ™μ•ˆ λ™μž‘μ΄ λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ™œμΈμ§€λŠ” λͺ¨λ₯΄κ² μ§€λ§Œ snazzy-info-window μ§€μ‹œλ¬Έμ΄ 동적 κ°€μ Έμ˜€κΈ° snazzy-info-window 라이브러리λ₯Ό μ‚¬μš©ν•˜κ³  있기 λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ 경고와 깨진 snazzy-info-window μ§€μ‹œλ¬Έμ΄ μžˆμŠ΅λ‹ˆλ‹€. μˆ˜μ •ν•˜λ €λ©΄ https://github.com/SebastianM/angular-google-maps/blob/1a74b3a9670cf4dbf442033a17dea290dfadc408/packages/snazzy-info-window/directives/snazzy-info-window.ts#L228
this._nativeSnazzyInfoWindow = new elems[0].default(options); 둜 λ³€κ²½ν•΄μ•Ό ν•˜μ§€λ§Œ 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„± μ†”λ£¨μ…˜μ΄ μ•„λ‹™λ‹ˆλ‹€(angular5/webpack3μ—μ„œλŠ” μž‘λ™ν•˜μ§€ μ•ŠμŒ). μ–΄λ–»κ²Œ λ°”λ‘œμž‘λŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

@SebastianM 은 Angular 6이 이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ—μ„œ λ§Žμ€ 뢀뢄을 κΉ¨κΈ° λ•Œλ¬Έμ— νŒ¨ν‚€μ§€λ₯Ό ν•˜λ‚˜μ˜ μ£Όμš” λ²„μ „μœΌλ‘œ λ²”ν”„ν•΄μ•Ό ν•œλ‹€κ³  ν™•μ‹ ν•©λ‹ˆλ‹€.

@Epenance λ„€, 그게 μ œκ°€ ν•΄μ•Ό ν•  μΌμž…λ‹ˆλ‹€. 두 개의 λΆ„κΈ°λ₯Ό 관리해야 ν•˜κΈ° λ•Œλ¬Έμ— μ•½κ°„ 짜증이 λ‚©λ‹ˆλ‹€(곧 v6을 μ‚¬μš©ν•˜λŠ” μ‚¬λžŒμ΄ λ„ˆλ¬΄ 적기 λ•Œλ¬Έμ—).

angular-google-mapsλŠ” rxjs-compatλ₯Ό μ‚¬μš©ν•˜λŠ” v6μ—μ„œ 잘 μž‘λ™ν•˜μ§€λ§Œ(@iget-master μ–ΈκΈ‰ μ œμ™Έ) snazzy-info-window μ§€μ‹œλ¬Έμ€ μ§€κΈˆ μ‹€μ œλ‘œ κΉ¨μ‘ŒμŠ΅λ‹ˆλ‹€. κ°€μž₯ κ°„λ‹¨ν•œ 방법은 동적 κ°€μ Έμ˜€κΈ°λ₯Ό μ •μ μœΌλ‘œ λ³€κ²½ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

@SebastianM μ§€κΈˆμ€ λ‹€μŒμ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • AGM νŒ¨ν‚€μ§€λ₯Ό RXJS6+RXJSCompat으둜 μ—…κ·Έλ ˆμ΄λ“œ
  • RXJSCompat을 μ‚­μ œν•˜μž

λͺ¨λ‘ 행볡해야겠죠?

@SebastianM 두 개의 뢄기에 λŒ€ν•΄ ngx-translate μ—…κ·Έλ ˆμ΄λ“œ 방법도 μžˆμŠ΅λ‹ˆλ‹€. 단일 λΆ„κΈ°, λ§ˆμ§€λ§‰ λ¦΄λ¦¬μŠ€λŠ” v6과만 ν˜Έν™˜λ˜λ©° 각도 μ—­ν˜Έν™˜μ„±μ€ μ—†μŠ΅λ‹ˆλ‹€.

그것이 μ ˆλŒ€μ μΈ 방법이라고 λ§ν•˜λŠ” 것이 μ•„λ‹ˆλΌ λ‹€λ₯Έ μ£Όμš” 라이브러리(μ›”κ°„ λ‹€μš΄λ‘œλ“œ μΈ‘λ©΄μ—μ„œ)κ°€ κ·ΈλŸ¬ν•œ 경둜λ₯Ό μ„ νƒν–ˆλ‹€λŠ” 점을 μ§€μ ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€ πŸ˜‰

@jimmykane μ•„λ‹ˆμš” , rxjs 6은 angular 4/5와 ν˜Έν™˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 해결책이 μžˆλŠ” 것 κ°™μ•„μš”...PR이 였고 μžˆμ–΄μš”

@peterpeterparker λ‚˜λŠ” ν˜„μž¬ 5/6 각도인 μ΅œμ‹  두 버전을 μ§€μ›ν•˜λŠ” 것이 합리적이라고 μƒκ°ν•˜λ©° 이전 버전과 ν˜Έν™˜λ˜λŠ” 방법을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€(μ§€κΈˆμ€ 각도 4μ—μ„œλ„ μž‘λ™ν•΄μ•Ό ν•˜μ§€λ§Œ 각도 5/ 6) - κ·ΈλŸ¬λ‚˜ 더 λ…Όμ˜ν•˜κ²Œ λ˜μ–΄ κΈ°μ©λ‹ˆλ‹€.

@SebastianM μ „ν˜€ κ±±μ •ν•˜μ§€ μ•Šκ³  정보λ₯Ό κ°€μ Έμ˜€κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. 이미 μ›Ήμ‚¬μ΄νŠΈλ₯Ό v6으둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν–ˆκΈ° λ•Œλ¬Έμ— μ–΄λ–€ μ‹μœΌλ‘œλ“  λ§Œμ‘±ν•©λ‹ˆλ‹€ πŸ˜‰

IMO, Angular 6으둜의 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ΄ 거의 κ³ ν†΅μŠ€λŸ½μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—(적어도 우리 ν”„λ‘œμ νŠΈμ—μ„œλŠ”) 4 및 5용 버전을 μœ μ§€ν•  μ΄μœ κ°€ μ—†μŠ΅λ‹ˆλ‹€. μœ„ν—˜ν•œ λ³΄μ•ˆ μˆ˜μ •μ„ μ œκ³΅ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

@SebastianM 은 기본적으둜 μ—…κ·Έλ ˆμ΄λ“œν•΄μ•Ό ν•©λ‹ˆλ‹€.

Angular 6 지원을 μœ„ν•œ μ•ˆμ •μ μΈ λ¦΄λ¦¬μŠ€κ°€ μžˆμŠ΅λ‹ˆκΉŒ? rxjs-compat으둜 잘 μž‘λ™ν•˜μ§€λ§Œ μ΅œλŒ€ν•œ 빨리 μ œκ±°ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

이봐..이거에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

였! 방금 Angular 6으둜 μ—…κ·Έλ ˆμ΄λ“œν–ˆλŠ”λ° ν˜„μž¬ λ…Όμ˜ 쀑인 Snazzy-info-window에 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

였λ₯˜: μž‘νžˆμ§€ μ•ŠμŒ(약속 쀑): TypeError: elems[0]은(λŠ”) μƒμ„±μžκ°€ μ•„λ‹™λ‹ˆλ‹€.
TypeError: elems[0]은(λŠ”) μƒμ„±μžκ°€ μ•„λ‹™λ‹ˆλ‹€.
snazzy-info-window.js:130μ—μ„œ

이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법을 μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ?

κ°μ‚¬ν•©λ‹ˆλ‹€!

@manuelsanchezaponte μ§€κΈˆμ€ @john-hi μ†”λ£¨μ…˜μ΄ μž‘λ™ν•˜κ³  node_modules/@agm/snazzy-info-window/directives/snazzy-info-window.js μ—μ„œ 라인 130을 _this._nativeSnazzyInfoWindow = new elems[0].default(options); 둜 λ³€κ²½ν•©λ‹ˆλ‹€. νŒ¨ν‚€μ§€κ°€ angular 6을 μ§€μ›ν•˜λŠ” λ™μ•ˆ 이것은 μž„μ‹œ μ†”λ£¨μ…˜μž…λ‹ˆλ‹€.

@LordShiroe κ°€ λ§žμŠ΅λ‹ˆλ‹€. λΉ λ₯Έ μˆ˜μ •μΈ 것 κ°™μŠ΅λ‹ˆλ‹€. AGM은 v6으둜 μ—…κ·Έλ ˆμ΄λ“œν•˜λŠ” λ§ˆμ§€λ§‰ μ°¨λ‹¨κΈ°μž…λ‹ˆλ‹€.

감사 ν•©λ‹ˆλ‹€ @SebastianM λΉ λ₯Έ μˆ˜μ •μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€! 맀λ ₯처럼 μž‘λ™ν•©λ‹ˆλ‹€. πŸ₯‡

와 당신은 λΉ λ₯Έ ν…ŒμŠ€ν„°μž…λ‹ˆλ‹€ :D μž‘λ™ν•˜λŠ” 것이 κΈ°μ˜λ‹€ πŸ˜…

@SebastianM thx 많이 πŸ‘

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰