Protractor: NPM 릴리슀 νŒ¨ν‚€μ§€λŠ” `globals.ts`λ₯Ό `globals.d.ts`둜 λŒ€μ²΄ν•΄μ•Ό ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2016λ…„ 08μ›” 18일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: angular/protractor

버그 μ‹ κ³ 

  • λ…Έλ“œ 버전: 6.3.1
  • 각도기 버전: 4.0.3
  • νƒ€μ΄ν”„μŠ€ν¬λ¦½νŠΈ 버전: 2.0.0

    κ°œμš”

이것은 protractor/globals κ°€μ Έμ˜€λŠ” μ†ŒμŠ€ 파일이 μžˆλŠ” typescript ν”„λ‘œμ νŠΈμ—λ§Œ ν•΄λ‹Ήλ©λ‹ˆλ‹€. 특히 protractor/globals κ°€μ Έμ˜¬ λ•Œ NPM λ¦΄λ¦¬μŠ€μ—λŠ” ν•΄λ‹Ή μ •μ˜ 파일( globals.d.ts ) λŒ€μ‹  globals.ts 파일이 ν¬ν•¨λ˜μ–΄ 있기 λ•Œλ¬Έμ— typescript μ»΄νŒŒμΌλŸ¬λŠ” μ†ŒλΉ„ν•˜λŠ” typescript ν”„λ‘œμ νŠΈμ˜ 곡톡 μ†ŒμŠ€ 루트λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€. 각도기 global.ts 쒅속성( node_modules/protractor )κ³Ό μ†ŒλΉ„ ν”„λ‘œμ νŠΈμ˜ μ†ŒμŠ€κ°€ ν¬ν•¨λœ λͺ¨λ“  μœ„μΉ˜(예: src/test/**/*.ts ) μ‚¬μ΄μ˜ 곡톡 경둜둜 μ΄λ™ν•©λ‹ˆλ‹€. 이것은 μ»΄νŒŒμΌλŸ¬κ°€ λͺ¨λ“  μƒμœ„ 디렉토리가 ν¬ν•¨λœ μ†ŒμŠ€ νŒŒμΌμ„ 좜λ ₯ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.

이것은 μˆœμ „νžˆ νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ»΄νŒŒμΌλŸ¬κ°€ 컴파일된 νŒŒμΌμ„ 좜λ ₯ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€. μ»΄νŒŒμΌμ€ 잘 되고 κ°λ„κΈ°λŠ” μ˜ˆμƒλŒ€λ‘œ (ꡉμž₯히) μ†Œλͺ¨λ©λ‹ˆλ‹€.

λ²ˆμ‹ 단계

λ‚΄κ°€ 잘λͺ» μ„€λͺ…ν•˜κ³  μžˆλŠ” μ‹œλ‚˜λ¦¬μ˜€λ₯Ό 더 잘 μ„€λͺ…ν•˜λ €λ©΄ 이 예제 ν”„λ‘œμ νŠΈ λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

μ œμ•ˆ 된 해법

λ‚˜λŠ” μ—¬κΈ°μ„œ 이것을 ν•΄κ²°ν•˜λŠ” 것이 두 κ°€μ§€μ˜ 쑰합이 될 것이라고 μƒκ°ν•©λ‹ˆλ‹€.

  1. globals.ts 파일이 컴파일될 λ•Œ μ •μ˜ 파일이 μƒμ„±λ˜λ„λ‘ ν˜„μž¬ κΏ€κΊ½κΏ€κΊ½ 컴파일 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€. 그리고
  2. 각도기 NPM 릴리슀 ν”„λ‘œμ„ΈμŠ€(μˆ˜λ™ λ˜λŠ” μžλ™)λ₯Ό μ—…λ°μ΄νŠΈν•˜μ—¬ NPM 릴리슀 νŒ¨ν‚€μ§€μ—μ„œ globals.ts νŒŒμΌμ„ μ œκ±°ν•˜κ³  컴파일된 μžλ°”μŠ€ν¬λ¦½νŠΈ 파일과 ν•΄λ‹Ή μ •μ˜ 파일만 λ‚¨κΉλ‹ˆλ‹€.

이것이 νƒ€λ‹Ήν•˜λ‹€λ©΄ μ†”λ£¨μ…˜μ˜ 첫 번째 뢀뢄을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ ν’€ λ¦¬ν€˜μŠ€νŠΈλ₯Ό μ œμΆœν•˜κ² μŠ΅λ‹ˆλ‹€. NPM에 λŒ€ν•œ 릴리슀 ν”„λ‘œμ„ΈμŠ€κ°€ μ—¬μ „νžˆ ν”„λ‘œμ νŠΈμ˜ 릴리슀 λ¬Έμ„œλ₯Ό λ”°λ₯΄λŠ” 경우 globals.ts νŒŒμΌμ„ μ œκ±°ν•˜λŠ” λ‹¨κ³„λ‘œ 이λ₯Ό μ—…λ°μ΄νŠΈν•  μˆ˜λ„ μžˆμ§€λ§Œ μ‹€μ œλ‘œ 릴리슀λ₯Ό μˆ˜ν–‰ν•˜λŠ” μ‚¬λžŒμ΄ 더 잘 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것을 생각해 λ³΄μ•˜κ³  Typescript μ»΄νŒŒμΌλŸ¬κ°€ μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜κ³  μžˆλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ μ—¬μ „νžˆ Typescript에 μ –μ–΄ 있기 λ•Œλ¬Έμ— λ™μ˜ν•˜μ§€ μ•ŠμœΌλ©΄ μ•Œλ €μ£Όμ‹­μ‹œμ˜€.

(νŽΈμ§‘: 버그 ν…œν”Œλ¦Ώμ„ λ°˜μ˜ν•˜λ„λ‘ ν˜•μ‹ μ—…λ°μ΄νŠΈ)

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

@cnishina μ˜ˆμ œκ°€ 도움이 global.ts νŒŒμΌμ„ μ œκ±°ν•˜μ§€λ§Œ ν•΄λ‹Ή globals.d.ts 선언이 없을 κ²ƒμž…λ‹ˆλ‹€. ν”„λ‘œμ νŠΈλ₯Ό μ†ŒλΉ„ν•˜κΈ° μœ„ν•΄ protractor/globals importλ₯Ό typescript μ»΄νŒŒμΌλŸ¬μ— 보이지 μ•Šκ²Œ λ§Œλ“œμ‹œκ² μŠ΅λ‹ˆκΉŒ?

λ”°λΌμ„œ λ‚΄ μ œμ•ˆμ˜ 첫 번째 뢀뢄은 globals.d.ts 선언을 μœ„ν•΄ 컴파일된 globals.js λ₯Ό μ œκ±°ν•˜λŠ” 것이 μ•„λ‹ˆλΌ NPM νŒ¨ν‚€μ§€μ— λ‹€μŒμ„ ν¬ν•¨ν•˜λ„λ‘ λ‘˜ λ‹€ κ°–λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

  • μ „μ—­.js
  • globals.d.ts

globals.ts μ†ŒμŠ€ 파일 없이.

global.ts νŒŒμΌμ„ μ»΄νŒŒμΌν•  λ•Œ --declaration ν”Œλž˜κ·Έμ™€ ν•¨κ»˜ tscλ₯Ό μ‚¬μš©ν•˜μ—¬ 이것이 달성될 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ•„λž˜μ™€ 같이 tsc:globals gulp μž‘μ—…μ„ λ³€κ²½ν•˜λ©΄ νŠΈλ¦­μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜μ§€λ§Œ package.json에도 μ—…λ°μ΄νŠΈν•΄μ•Ό ν•  수 μžˆλŠ” tsc 및 tsc:w μž‘μ—…μ΄ μžˆμŒμ„ μ•Œμ•˜μŠ΅λ‹ˆλ‹€. λΉ„μ „μ—­ μ»΄νŒŒμΌμ„ μ—­μœΌλ‘œ μˆ˜μ •ν•˜μ§€ μ•ŠλŠ” 경우:

gulp.task('tsc:globals', function(done) {
  runSpawn(done, 'node', ['node_modules/typescript/bin/tsc', '--declaration', 'globals.ts'],
    'ignore');
});

빠진 것이 있으면 μ•Œλ €μ£Όμ„Έμš”. λΉ λ₯Έ μˆ˜μ •μ— λ‹€μ‹œ ν•œ 번 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€! 그건 κ·Έλ ‡κ³ , Typescript와 ν•¨κ»˜ 각도기λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 정말 λŒ€λ‹¨ν•œ μΌμž…λ‹ˆλ‹€!

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

@tmeneau 이번 ν˜Έμ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€: github μ˜ˆμ œκ°€ 정말 μ’‹μ•˜μŠ΅λ‹ˆλ‹€... πŸ‘ πŸ‘ πŸ‘

λ”°λΌμ„œ 이것은 outDir을 μ‚¬μš©ν•  λ•Œμ˜ λΆ€μž‘μš©μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ outDir κ°€ output 둜 μ„€μ •λ˜λ©΄ 트랜슀파일된 파일 외에도 output/node_modules/protractor/globals.js 도 νŠΈλžœμŠ€νŒŒμΌλ©λ‹ˆλ‹€. (λ‹Ήμ‹œ) λͺ‡ 가지 μ‹€ν—˜μ„ ν•œ ν›„ TypeScript 파일이 μ—†μœΌλ©΄ 파일 ν˜•μ‹μ„ κ°€μ Έμ˜¬ 수 μ—†κΈ° λ•Œλ¬Έμ— μ›λž˜ global.ts νŒŒμΌμ„ ν¬ν•¨ν–ˆμŠ΅λ‹ˆλ‹€.

μ œμ•ˆμ„ μ‚΄νŽ΄λ³΄λ €λ©΄:

  1. μ „μ—­ 이름 κ³΅κ°„μ—μ„œ λ³€μˆ˜λ₯Ό ν• λ‹Ήν•˜κΈ° λ•Œλ¬Έμ— globals.tsλŠ” μ„ μ–Έ 파일 *d.ts일 수 μ—†κΈ° λ•Œλ¬Έμ— μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  2. exampleTypescript μ‹€ν—˜ν•œ ν›„ 이것이 μž‘λ™ν•˜λŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. ν•΄λ‹Ή νŒŒμΌμ„ κ²Œμ‹œν•˜μ§€ μ•Šκ³  각도기λ₯Ό TypeScript 2둜 μ—…κ·Έλ ˆμ΄λ“œν•˜κΈ° μœ„ν•΄ .npmignoreλ₯Ό μ—…λ°μ΄νŠΈν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ°Έμ‘°: https://github.com/angular/protractor/pull/3485

@cnishina μ˜ˆμ œκ°€ 도움이 global.ts νŒŒμΌμ„ μ œκ±°ν•˜μ§€λ§Œ ν•΄λ‹Ή globals.d.ts 선언이 없을 κ²ƒμž…λ‹ˆλ‹€. ν”„λ‘œμ νŠΈλ₯Ό μ†ŒλΉ„ν•˜κΈ° μœ„ν•΄ protractor/globals importλ₯Ό typescript μ»΄νŒŒμΌλŸ¬μ— 보이지 μ•Šκ²Œ λ§Œλ“œμ‹œκ² μŠ΅λ‹ˆκΉŒ?

λ”°λΌμ„œ λ‚΄ μ œμ•ˆμ˜ 첫 번째 뢀뢄은 globals.d.ts 선언을 μœ„ν•΄ 컴파일된 globals.js λ₯Ό μ œκ±°ν•˜λŠ” 것이 μ•„λ‹ˆλΌ NPM νŒ¨ν‚€μ§€μ— λ‹€μŒμ„ ν¬ν•¨ν•˜λ„λ‘ λ‘˜ λ‹€ κ°–λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

  • μ „μ—­.js
  • globals.d.ts

globals.ts μ†ŒμŠ€ 파일 없이.

global.ts νŒŒμΌμ„ μ»΄νŒŒμΌν•  λ•Œ --declaration ν”Œλž˜κ·Έμ™€ ν•¨κ»˜ tscλ₯Ό μ‚¬μš©ν•˜μ—¬ 이것이 달성될 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ•„λž˜μ™€ 같이 tsc:globals gulp μž‘μ—…μ„ λ³€κ²½ν•˜λ©΄ νŠΈλ¦­μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜μ§€λ§Œ package.json에도 μ—…λ°μ΄νŠΈν•΄μ•Ό ν•  수 μžˆλŠ” tsc 및 tsc:w μž‘μ—…μ΄ μžˆμŒμ„ μ•Œμ•˜μŠ΅λ‹ˆλ‹€. λΉ„μ „μ—­ μ»΄νŒŒμΌμ„ μ—­μœΌλ‘œ μˆ˜μ •ν•˜μ§€ μ•ŠλŠ” 경우:

gulp.task('tsc:globals', function(done) {
  runSpawn(done, 'node', ['node_modules/typescript/bin/tsc', '--declaration', 'globals.ts'],
    'ignore');
});

빠진 것이 있으면 μ•Œλ €μ£Όμ„Έμš”. λΉ λ₯Έ μˆ˜μ •μ— λ‹€μ‹œ ν•œ 번 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€! 그건 κ·Έλ ‡κ³ , Typescript와 ν•¨κ»˜ 각도기λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 정말 λŒ€λ‹¨ν•œ μΌμž…λ‹ˆλ‹€!

예... πŸ‘ globals.d.ts λŠ” protractor/globals κ°€μ Έμ˜€κΈ°κ°€ μž‘λ™ν•˜λ„λ‘ ν•˜λ €λ©΄ μ—¬μ „νžˆ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. PR을 μ—…λ°μ΄νŠΈν–ˆμŠ΅λ‹ˆλ‹€. 감사 ν•΄μš”!

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