Protractor: TS2440: ๊ฐ€์ ธ์˜ค๊ธฐ ์„ ์–ธ์ด 'PluginConfig'์˜ ๋กœ์ปฌ ์„ ์–ธ๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 11์›” 06์ผ  ยท  27์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: angular/protractor

์•ˆ๋…•ํ•˜์„ธ์š”!

๋ฒ„๊ทธ ์‹ ๊ณ 
๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

[at-loader] ./node_modules/protractor/built/index.d.ts:5:10 ์˜ค๋ฅ˜
TS2440: ๊ฐ€์ ธ์˜ค๊ธฐ ์„ ์–ธ์ด 'PluginConfig'์˜ ๋กœ์ปฌ ์„ ์–ธ๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

[at-loader] ./node_modules/protractor/built/index.d.ts:5:24 ์˜ค๋ฅ˜
TS2440: ๊ฐ€์ ธ์˜ค๊ธฐ ์„ ์–ธ์ด 'ProtractorPlugin'์˜ ๋กœ์ปฌ ์„ ์–ธ๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

  • ๋…ธ๋“œ ๋ฒ„์ „: 10.5.0
  • ๊ฐ๋„๊ธฐ ๋ฒ„์ „: ~5.1.2
  • ๊ฐ๋„ ๋ฒ„์ „: ^4.2.4
  • ๋ธŒ๋ผ์šฐ์ €: any
  • ์šด์˜ ์ฒด์ œ ๋ฐ ๋ฒ„์ „ Windows 10
  • ๊ฐ๋„๊ธฐ ๊ตฌ์„ฑ ํŒŒ์ผ

const { ์ŠคํŽ™ ๋ฆฌํฌํ„ฐ } = require('jasmine-spec-reporter');

export.config = {
allScriptsTimeout: 11000,
์‚ฌ์–‘: [
'./e2e/ */ .e2e-spec.ts'
],
๋Šฅ๋ ฅ: {
'๋ธŒ๋ผ์šฐ์ € ์ด๋ฆ„': 'ํฌ๋กฌ'
},
์ง์ ‘ ์—ฐ๊ฒฐ: ์‚ฌ์‹ค,
baseUrl: ' http://localhost :4200/',
ํ”„๋ ˆ์ž„์›Œํฌ: '์žฌ์Šค๋ฏผ',
jasmineNodeOpts: {
showColors: ์‚ฌ์‹ค,
๊ธฐ๋ณธ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๊ฐ„๊ฒฉ: 30000,
์ธ์‡„: ํ•จ์ˆ˜() {}
},
์ค€๋น„() {
require('๋…ธ๋“œ').register({
ํ”„๋กœ์ ํŠธ: 'e2e/tsconfig.e2e.json'
});
jasmine.getEnv().addReporter(new SpecReporter({ ์‚ฌ์–‘: { displayStacktrace: true } }));
}
};

  • ๋ฒ„๊ทธ ์žฌํ˜„ ๋‹จ๊ณ„ - npm run build ์‹คํŒจ

๊ธฐ๋Šฅ ์š”์ฒญ
ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ์„ธ์š”

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ตœ์ƒ์˜ ์†”๋ฃจ์…˜์€ ์•„๋‹ˆ์ง€๋งŒ tsconfig.json์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"skipLibCheck": true

๋ชจ๋“  27 ๋Œ“๊ธ€

์˜ค๋Š˜๋ถ€ํ„ฐ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(Protractor 5.4.2 ๋ฐ Angular 8 ์‚ฌ์šฉ)

๊ฐ๋„๊ธฐ 5.4.2 ๋ฐ Angular 8๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ

์˜ค๋Š˜ Typescript ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋™์•ˆ ์ด ๋ฌธ์ œ์— ๋ถ€๋”ช์ณค์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” AngularJS๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ฉฐ Protractor 5.4.1 ๋ฐ 5.4.2 ๋ชจ๋‘์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Typescript 3.6.4(3.6.x)์—์„œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ Typescript 3.7.2(3.7.x)์—์„œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#local -and-imported-type-declarations-now-conflict

๊ณ ์ณ์ฃผ์„ธ์š”; ์šฐ๋ฆฌ๋Š” ๋ฌดํšจ ํ•ฉ์ฒด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค! :)

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ”„๋กœ์ ํŠธ๋Š” ๊ฐ๋„๊ธฐ 5.4.2์— ์žˆ์œผ๋ฉฐ TypeScript 3.7๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ฐฑํฌํŠธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(ํ™•์‹คํžˆ ์ž‘๋™ํ•จ).
89fbf75d4103db2cd20fd0c1c4ca7efebc52c049
37bef24331c1012bfc2cc7d3fa259a00e69bd192
๋งˆ์Šคํ„ฐ์—์„œ 5.4.2๋กœ

5.4.2๋Š” npmjs.com์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์‹  ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.
6.0.0์—๋Š” ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋‚ด ํ”„๋กœ์ ํŠธ์— ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
( https://github.com/angular/protractor/blob/6.0.0/CHANGELOG.md )

CC: @sandersn @heathkit

#5325์˜ ์ค‘๋ณต

ํŽธ์ง‘: ๋‚˜๋Š” Angular ํŒ€์ด ์•„๋‹ˆ๋ผ Typescript ํŒ€์—์„œ ์ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ถ„๋ช…ํžˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ƒˆ๋กœ์šด 5.* ๋ฒ„์ „์„ ์ถœํŒํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ฒ ๋‹ค๊ณ  ๋งํ•œ ๋ช‡๋ช‡ ํŒ€์›๋“ค๊ณผ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆด์ง€๋งŒ ๊ทธ ๊ณผ์ •์ด ๊ฐ„๋‹จํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜ ์ €๋Š” typescript ๋ฒ„์ „์„ 3.7.x์—์„œ 3.6.x๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค matcasey

@sandersn์„ ๋ช…ํ™•ํžˆ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜์˜ ๋‹ค์Œ ์งˆ๋ฌธ์ด ๋  ๊ฒƒ์ด์—ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ๋ฆ„ ์ œ์–ด์— ์˜์กดํ•˜์ง€ ์•Š์œผ๋ฉฐ 6.0.0์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๊ฒŒ์‹œ๋œ ํŒจํ‚ค์ง€์—๋„ ์•„์ง ์ˆ˜์ • ์‚ฌํ•ญ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŒ€์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์—ฌ๊ธฐ์— ๋Œ“๊ธ€์„ ๋‹ฌ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ฉฐ์น , ๋ช‡ ๋‹ฌ ๋˜๋Š” ๊ทธ ์ด์ƒ์„ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘: ๋„์›€์„ ๋“œ๋ฆฌ๊ณ  ์‹ถ์ง€๋งŒ ๋ณด๋ฅ˜๋Š” ์ƒˆ ๋ฒ„์ „์„ ์ถœ์‹œํ•˜๋Š” ๋ฐ "๊ทธ๋ƒฅ"์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. :)

ํŽธ์ง‘ 2: ์šฐ๋ฆฌ ์‹œ์Šคํ…œ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์ด TS 3.7๋กœ ์˜ฎ๊ฒจ๊ฐ”๊ธฐ ๋•Œ๋ฌธ์— ์ €์—๊ฒŒ ์žˆ์–ด ๋‘ ๊ฐ€์ง€ ๋‹จ์  ์ค‘ ๋œ ๋‚˜์œ ๊ฒƒ์€ tsconfig: https:// www.typescriptlang.org/docs/handbook/module-resolution.html#path -mapping

@mattcasey ํ˜„์žฌ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์˜ฌ๋ฐ”๋ฅธ ๋‚ด๋ณด๋‚ด๊ธฐ ๊ฒฝ๋กœ๋กœ index.d.ts ํŒŒ์ผ์„ ๋ณต์‚ฌํ•œ ๋‹ค์Œ ๊ฒฝ๋กœ ๋งคํ•‘์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๋„๊ธฐ๋ฅผ ์ƒˆ ํŒŒ์ผ์— ๋งคํ•‘ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์—…๋ฐ์ดํŠธ ์œ ํ˜•/๋…ธ๋“œ ์ข…์†์„ฑ
npm install -g @types/node@8

์œ ํ˜•/๋…ธ๋“œ๊ฐ€ devDependencies ๋ฐ ์ข…์†์„ฑ์— ๋‚˜์—ด๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

"dependencies": { ... "@types/node": "^8.10.59", ... }, "devDependencies": { ... "@types/node": "^8.10.59", ... }

typescript 3.7.2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์—์„œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ "as" ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import { module as otherModuleName } from "./module"

๋˜๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชจ๋“ˆ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ ์ €๋Š” typescript ๋ฒ„์ „์„ 3.7.x์—์„œ 3.6.x๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค matcasey

"typescript": "~3.6"์„ package.json ํŒŒ์ผ์— ๋„ฃ์€ ๋‹ค์Œ ํ„ฐ๋ฏธ๋„์—์„œ "npm install"์„ ์‹คํ–‰ํ•˜๋ฉด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  3.6.4๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์—ฌ๊ธฐ์—, ๋‚˜๋Š”์— ์žˆ์—ˆ๋‹ค npm uninstall -g typescript ์ •๋„์˜ ๋กœ์ปฌ ๋ฒ„์ „ ๊ฒƒ์„ tsc ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ทจํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  PATH ๋ฅผ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐโ€ฆ

@ woppa684 ๋‚ด ์ˆ˜์ •์€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ฐ๋„๊ธฐ์— ๋Œ€ํ•œ ๊ณ ์œ ํ•œ ์œ ํ˜•์„ ๋งŒ๋“ค๊ณ  Typescript์— node_modules ๋‚ด๋ถ€์˜ ์œ ํ˜•์„ ๋ฌด์‹œํ•˜๋„๋ก ์ง€์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด protractor.d.ts (๋‚ด ํ”„๋กœ์ ํŠธ์˜ test-e2e/protractor.d.ts ) ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// Note: This stub exists to override Protractor types which are incompatible with TS 3.7 as of 5.4.2 and 6.0.0
declare module 'protractor' {
    let browser: any;
    let element: any;
    let by: any;
    let ExpectedConditions: any;
    let until: any;
    let Key: any;
}

๊ทธ๋Ÿฐ ๋‹ค์Œ tsconfig์—์„œ:

{
  ...
  "compilerOptions": {
    ...
    "paths": {
      "protractor": ["test-e2e/protractor.d.ts"]
    }
  }
}

์ด๋ฅผ ํ†ตํ•ด ๊ฐ๋„๊ธฐ ๋ฉ”์„œ๋“œ๊ฐ€ ๋” ์ด์ƒ ํ˜•์‹ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋Š” Typescript 3.7์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•œ ๋Œ€์•ˆ ์†”๋ฃจ์…˜์€ https://github.com/angular/protractor/pull/5326/ ์˜ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์ •๋œ ๊ฐ๋„๊ธฐ ๋นŒ๋“œ ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค

์šฐ๋ฆฌ๋Š” ๊ฐ๋„๊ธฐ ๋Œ€์‹  ์ž„์‹œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค

// package.json
"protractor": "tomyam1/protractor-ts3.7-fix"

Angular๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ๋ธŒ์˜ต์Šค์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ง‰ ์ผ์–ด๋‚˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋Œ์•„๊ฐ€์„œ ๊ทธ๊ฒƒ์ด ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์„ ๋•Œ๋ถ€ํ„ฐ package.json๊ณผ package-lock.json์„ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
Angular๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ typescript ๋ฒ„์ „์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ๋ฐ๋ธŒ์˜ต์Šค์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹คํŒจํ•œ ๊ฒƒ์€ vs build ๋ถ€๋ถ„๋ฟ์ž…๋‹ˆ๋‹ค. npm/ng ํ•ญ๋ชฉ์€ ์ž˜ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
๋ชจ๋“  ๊ฒƒ์ด ๋‚ด ์‹œ์Šคํ…œ์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
https://developercommunity.visualstudio.com/content/problem/855096/npm-ng-suddenly-not-working-conflict-pluginconfig.html

typescript 3.7.2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์—์„œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ "as" ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import { module as otherModuleName } from "./module"

๋˜๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชจ๋“ˆ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@anicarrr , ๊ท€ํ•˜๊ฐ€ ์ œ๊ณตํ•œ ๋‘ ๋ฒˆ์งธ ๋‹ต๋ณ€์— ๋Œ€ํ•œ ์˜ˆ๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ตœ์ƒ์˜ ์†”๋ฃจ์…˜์€ ์•„๋‹ˆ์ง€๋งŒ tsconfig.json์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"skipLibCheck": true

typescript 3.7.2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์—์„œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ "as" ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
import { module as otherModuleName } from "./module"
๋˜๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชจ๋“ˆ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@anicarrr , ๊ท€ํ•˜๊ฐ€ ์ œ๊ณตํ•œ ๋‘ ๋ฒˆ์งธ ๋‹ต๋ณ€์— ๋Œ€ํ•œ ์˜ˆ๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋‚ด ๋ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

export default myModule

๋”ฐ๋ผ์„œ ๊ฐ€์ ธ์˜ฌ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์›ํ•˜๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import whateverName from myModule

์ด๊ฒƒ์€ https://github.com/angular/protractor/pull/5326 ์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค

fyi: ๊ทธ๋™์•ˆ tsc ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜ "skipLibCheck": true ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์‚ฌ๋žŒ๋“ค์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”!

๋ฒ„๊ทธ ์‹ ๊ณ 
๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

[at-loader] ./node_modules/protractor/built/index.d.ts:5:10 ์˜ค๋ฅ˜
TS2440: ๊ฐ€์ ธ์˜ค๊ธฐ ์„ ์–ธ์ด 'PluginConfig'์˜ ๋กœ์ปฌ ์„ ์–ธ๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

[at-loader] ./node_modules/protractor/built/index.d.ts:5:24 ์˜ค๋ฅ˜
TS2440: ๊ฐ€์ ธ์˜ค๊ธฐ ์„ ์–ธ์ด 'ProtractorPlugin'์˜ ๋กœ์ปฌ ์„ ์–ธ๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

  • ๋…ธ๋“œ ๋ฒ„์ „: 10.5.0
  • ๊ฐ๋„๊ธฐ ๋ฒ„์ „: ~5.1.2
  • ๊ฐ๋„ ๋ฒ„์ „: ^4.2.4
  • ๋ธŒ๋ผ์šฐ์ €: any
  • ์šด์˜ ์ฒด์ œ ๋ฐ ๋ฒ„์ „ Windows 10
  • ๊ฐ๋„๊ธฐ ๊ตฌ์„ฑ ํŒŒ์ผ

const { ์ŠคํŽ™ ๋ฆฌํฌํ„ฐ } = require('jasmine-spec-reporter');

export.config = {
allScriptsTimeout: 11000,
์‚ฌ์–‘: [
'./e2e/ */ .e2e-spec.ts'
],
๋Šฅ๋ ฅ: {
'๋ธŒ๋ผ์šฐ์ € ์ด๋ฆ„': 'ํฌ๋กฌ'
},
์ง์ ‘ ์—ฐ๊ฒฐ: ์‚ฌ์‹ค,
baseUrl: ' http://localhost :4200/',
ํ”„๋ ˆ์ž„์›Œํฌ: '์žฌ์Šค๋ฏผ',
jasmineNodeOpts: {
showColors: ์‚ฌ์‹ค,
๊ธฐ๋ณธ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๊ฐ„๊ฒฉ: 30000,
์ธ์‡„: ํ•จ์ˆ˜() {}
},
์ค€๋น„() {
require('๋…ธ๋“œ').register({
ํ”„๋กœ์ ํŠธ: 'e2e/tsconfig.e2e.json'
});
jasmine.getEnv().addReporter(new SpecReporter({ ์‚ฌ์–‘: { displayStacktrace: true } }));
}
};

  • ๋ฒ„๊ทธ ์žฌํ˜„ ๋‹จ๊ณ„ - npm run build ์‹คํŒจ

๊ธฐ๋Šฅ ์š”์ฒญ
ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ์„ธ์š”

์•ˆ๋…•ํ•˜์„ธ์š” SachinBN์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์— ์„ค์น˜๋œ Typescript์˜ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. VS Code ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค(๋”ฐ์˜ดํ‘œ ์ œ์™ธ).

"npm install -g [email protected] "

์™„๋ฃŒ๋˜๋ฉด ์•„๋ž˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ VS Code์—์„œ ํ”„๋กœ์ ํŠธ์˜ typescript ๋ฒ„์ „์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

"tsc -v"

3.6.2๋ฅผ ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. package.json ํŒŒ์ผ์— ๋™์ผํ•œ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๋ฒ„์ „์ด 3.6.2๋กœ ๋ณ€๊ฒฝ๋˜๋ฉด "tsc"๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ฌธ์•ˆ ์ธ์‚ฌ,

์•„๋ฉ”์•ผ

๋‚ด ๊ฐ๋„ ์•ฑ์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ์ œ์•ˆ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๊ฐ๋„๊ธฐ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฌธ์„ ์ œ๊ฑฐํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹๋‹ค:

'๊ฐ๋„๊ธฐ'์—์„œ { ์š”์†Œ } ๊ฐ€์ ธ์˜ค๊ธฐ
'๊ฐ๋„๊ธฐ'์—์„œ { ์•ฝ์† } ๊ฐ€์ ธ์˜ค๊ธฐ

๊ทธ๋ƒฅ ์ œ๊ฑฐํ•˜๋ฉด ์˜ˆ์ƒ๋Œ€๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
๋‚ด ๊ฒƒ์ด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์ฝ”๋“œ๋„ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ฌธ์•ˆ ์ธ์‚ฌ,
๋‹ˆ์‹ฏ ์ง„์ฃผ๋ฐ”๋””์•ผ

npx tsc -v
Version 3.8.3

์ตœ์‹  ๋…ธ๋“œ ๋ฐ NPM.

๋‚ด ํŒŒ์ผ

import * as mysql from "mysql2";

const config =
    process.env.NODE_ENV == "prod"
        ? {
            connectionLimit: 10,
            host: "*********.rds.amazonaws.com",
            user: "admin",
            database: "p_" + process.env.PROJECT_ID,
            password: "*********",
            prefix: `p_${process.env.PROJECT_ID}_`
        }
        : {
            connectionLimit: 10,
            host: "host.docker.internal",
            user: "root",
            database: "i**_project",
            password: "root",
            prefix: ""
        };


export const db = mysql.createPool(config);
export const prefix = config.prefix;

๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค

npm run start

> [email protected] start /workspaces/icod-prt
> npx tsc && node build/index.js

typings/modules/mysql2/index.d.ts:677:1 - error TS2440: Import declaration conflicts with local declaration of 'Connection'.

677 import Connection = require('~mysql2~mysql/lib/Connection');
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

typings/modules/mysql2/index.d.ts:679:1 - error TS2440: Import declaration conflicts with local declaration of 'PoolConnection'.

679 import PoolConnection = require('~mysql2~mysql/lib/PoolConnection');
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

typings/modules/mysql2/index.d.ts:680:1 - error TS2440: Import declaration conflicts with local declaration of 'Pool'.

680 import Pool = require('~mysql2~mysql/lib/Pool');
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

typings/modules/mysql2/index.d.ts:682:1 - error TS2440: Import declaration conflicts with local declaration of 'PoolCluster'.

682 import PoolCluster = require('~mysql2~mysql/lib/PoolCluster');
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

typings/modules/mysql2/index.d.ts:684:1 - error TS2440: Import declaration conflicts with local declaration of 'Query'.

684 import Query = require('~mysql2~mysql/lib/protocol/sequences/Query');

๋•Œ๋•Œ๋กœ TypeScript ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ด์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๋ฅผ ๋น„๋‚œํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜ .spec.ts ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์„ ์ž‘์—…ํ•˜๋Š” ๋™์•ˆ OP์˜ ์ •ํ™•ํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์— ๊ฐ๋„๊ธฐ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— npm uninstall protractor ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž„์‹œ๋กœ ์ œ๊ฑฐํ•œ ๋‹ค์Œ TypeScript์—์„œ ์‹ค์ œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ERROR in src/app/.../...spec.ts:12:30 - error TS2307: Cannot find module 'protractor'.
12 import { EventEmitter } from 'protractor';

์›์ธ์€ Visual Studio Code๊ฐ€ ์„ค๋ช…ํ•  ์ˆ˜ ์—†์ด ์ •์ƒ์ ์ธ import { EventEmitter } from '@angular/core'; ๋Œ€์‹  ์ด ์ž๋™ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฌธ์„ ์ƒ์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์•„์ง 4.0.2์—์„œ ์ด๊ฒƒ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.. ํ 

๋‚ด ๊ฐ๋„ ์•ฑ์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ์ œ์•ˆ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๊ฐ๋„๊ธฐ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฌธ์„ ์ œ๊ฑฐํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹๋‹ค:

'๊ฐ๋„๊ธฐ'์—์„œ { ์š”์†Œ } ๊ฐ€์ ธ์˜ค๊ธฐ
'๊ฐ๋„๊ธฐ'์—์„œ { ์•ฝ์† } ๊ฐ€์ ธ์˜ค๊ธฐ

๊ทธ๋ƒฅ ์ œ๊ฑฐํ•˜๋ฉด ์˜ˆ์ƒ๋Œ€๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
๋‚ด ๊ฒƒ์ด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์ฝ”๋“œ๋„ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ฌธ์•ˆ ์ธ์‚ฌ,
๋‹ˆ์‹ฏ ์ง„์ฃผ๋ฐ”๋””์•ผ

์ €์—๊ฒŒ๋Š” Protractor ๋Œ€์‹  Protractor EventEmitter ๋ฅผ ๊ฐ€์ ธ์˜จ VSCode์˜ ์ž๋™ ๊ฐ€์ ธ์˜ค๊ธฐ @angular/core . ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰