Skip to content

Latest commit

Β 

History

History
30 lines (21 loc) Β· 4.95 KB

File metadata and controls

30 lines (21 loc) Β· 4.95 KB

μ»΄νŒŒμΌλŸ¬λŠ” ν™˜κ²½ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 파일과 디렉터리λ₯Ό κ°μ‹œν•˜λŠ” 방법 ꡬ성을 μ§€μ›ν•©λ‹ˆλ‹€.

ν™˜κ²½ λ³€μˆ˜ TSC_WATCHFILE을 μ‚¬μš©ν•˜μ—¬ 파일 κ°μ‹œ μ„€μ • (Configuring file watching using environment variable TSC_WATCHFILE)

μ˜΅μ…˜ μ„€λͺ…
PriorityPollingInterval fs.watchFile을 μ‚¬μš©ν•˜μ§€λ§Œ μ†ŒμŠ€ 파일, μ„€μ • 파일 및 λˆ„λ½λœ νŒŒμΌμ— λŒ€ν•΄ λ‹€λ₯Έ 폴링 μ£ΌκΈ°(polling intervals)λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
DynamicPriorityPolling 자주 μˆ˜μ •λ˜λŠ” νŒŒμΌμ„ 자주 ν΄λ§ν•˜κ³  λ³€κ²½λ˜μ§€ μ•Šμ€ νŒŒμΌμ„ 덜 자주 폴링 ν•˜λŠ” 동적 큐λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
UseFsEvents 파일 μ‹œμŠ€ν…œ 이벀트λ₯Ό μ‚¬μš©ν•˜λŠ” fs.watchλ₯Ό μ‚¬μš©ν•˜μ—¬ 파일 λ³€κ²½/생성/μ‚­μ œμ— λŒ€ν•œ μ•Œλ¦Όμ„ λ°›μŠ΅λ‹ˆλ‹€. (fs.watchλŠ” OSλ§ˆλ‹€ λ‹€λ₯΄κ²Œ μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€.) 예λ₯Ό λ“€μ–΄. λ¦¬λˆ…μŠ€λŠ” watcher μˆ˜μ— μ œν•œμ΄ 있으며 fs.watchλ₯Ό μ‚¬μš©ν•˜μ—¬ watcherλ₯Ό λ§Œλ“€μ§€ λͺ»ν•˜λ©΄, fs.watchFileλ₯Ό λŒ€μ‹  μ‚¬μš©ν•˜μ—¬ watcherλ₯Ό λ§Œλ“€κ²Œ λ©λ‹ˆλ‹€.
UseFsEventsWithFallbackDynamicPolling 이 μ˜΅μ…˜μ€ fs.watchλ₯Ό μ‚¬μš©ν•˜μ—¬ κ°μ‹œμžλ₯Ό λ§Œλ“€μ§€ λͺ»ν•œ 경우 폴링이 동적 큐λ₯Ό 톡해 μˆ˜ν–‰λœλ‹€λŠ” 것을 μ œμ™Έν•˜κ³ λŠ” UseFsEvents μ˜΅μ…˜κ³Ό λΉ„μŠ·ν•©λ‹ˆλ‹€.(동적 큐에 λŒ€ν•œ 것은 DynamicPriorityPollingμ˜΅μ…˜μ—μ„œ μ„€λͺ…ν•˜μ˜€μŠ΅λ‹ˆλ‹€.).
UseFsEventsOnParentDirectory 이 μ˜΅μ…˜μ€ fs.watch(파일 μ‹œμŠ€ν…œ 이벀트 μ‚¬μš©ν•˜λŠ”)둜 파일의 μƒμœ„ 디렉터리λ₯Ό κ°μ‹œν•©λ‹ˆλ‹€. λ‹€λ§Œ, CPU μ‚¬μš©λŸ‰μ΄ λŠ˜μ–΄λ‚˜κ³  μ •ν™•λ„λŠ” λ–¨μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
default (no value specified) ν™˜κ²½ λ³€μˆ˜TSC_NONPOLLING_WATCHERκ°€ true둜 μ„€μ •λ˜λ©΄ 파일의 μƒμœ„ 디렉터리λ₯Ό κ°μ‹œν•©λ‹ˆλ‹€. (UseFsEventsOnParentDirectory와 동일).false 일 λ•ŒλŠ” fs.watchFile을 μ‚¬μš©ν•˜μ—¬ 250ms μ‹œκ°„ μ œν•œκ³Ό ν•¨κ»˜ λͺ¨λ“  νŒŒμΌλ“€μ„ κ°μ‹œν•©λ‹ˆλ‹€.

ν™˜κ²½ λ³€μˆ˜TSC_WATCHDIRECTORYλ₯Ό μ‚¬μš©ν•˜μ—¬ 디렉터리 κ°μ‹œ μ„€μ • (Configuring directory watching using environment variable TSC_WATCHDIRECTORY)

기본적으둜 nodeμ—μ„œ λ””λ ‰ν„°λ¦¬μ˜ μž¬κ·€μ μΈ κ°μ‹œλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” ν”Œλž«νΌμ—μ„œ, 디렉터리 κ°μ‹œ κΈ°λŠ₯은 TSC_WATCHDIRECTORYμ—μ„œ μ„ νƒν•œ λ‹€μ–‘ν•œ μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ ν•˜μœ„ 디렉터리에 λŒ€ν•œ 디렉터리 watcherλ₯Ό μž¬κ·€μ μœΌλ‘œ μƒμ„±ν•¨μœΌλ‘œμ¨ μ§€μ›λ©λ‹ˆλ‹€. 기본적으둜 μž¬κ·€ 디렉터리 κ°μ‹œ(예: windows)λ₯Ό μ§€μ›ν•˜λŠ” ν”Œλž«νΌμ—μ„œλŠ” 이 ν™˜κ²½ λ³€μˆ˜μ˜ 값이 λ¬΄μ‹œλ©λ‹ˆλ‹€.

μ˜΅μ…˜ μ„€λͺ…
RecursiveDirectoryUsingFsWatchFile fs.watchFile을 μ‚¬μš©ν•˜μ—¬ 폴링 κ°μ‹œ(CPU cycles μ‚¬μš©)인 디렉터리 및 ν•˜μœ„ 디렉터리λ₯Ό κ°μ‹œν•©λ‹ˆλ‹€.
RecursiveDirectoryUsingDynamicPriorityPolling 동적 폴링 큐λ₯Ό μ‚¬μš©ν•˜μ—¬ 디렉터리 및 ν•˜μœ„ 디렉터리에 λŒ€ν•œ 변경사항을 폴링 ν•©λ‹ˆλ‹€.
default (no value specified) fs.watchλ₯Ό μ‚¬μš©ν•˜μ—¬ 디렉터리 및 ν•˜μœ„ 디렉터리λ₯Ό κ°μ‹œν•©λ‹ˆλ‹€.

λ°°κ²½ (Background)

컴파일러의 --watch κ΅¬ν˜„μ€ nodeμ—μ„œ μ œκ³΅ν•˜λŠ” fs.watch와 fs.watchFile에 μ˜μ‘΄ν•˜λ©°, 이 두 방법 λͺ¨λ‘ μž₯단점이 μžˆμŠ΅λ‹ˆλ‹€.

fs.watchλŠ” 파일 μ‹œμŠ€ν…œ 이벀트λ₯Ό μ‚¬μš©ν•˜μ—¬ 파일/λ””λ ‰ν„°λ¦¬μ˜ λ³€κ²½ 사항을 μ•Œλ¦½λ‹ˆλ‹€. ν•˜μ§€λ§Œ OS에 따라 λ‹€λ₯΄λ©°, μ•Œλ¦Όμ€ μ™„μ „νžˆ 믿을 μˆ˜κ°€ μ—†κ³ , λ§Žμ€ OSμ—μ„œ μ˜ˆμƒλŒ€λ‘œ λ™μž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ˜ν•œ, 생성할 수 μžˆλŠ” watcher의 μˆ˜μ— μ œν•œμ΄ μžˆμ„ 수 있으며(예: linux), 파일 μˆ˜κ°€ λ§Žμ€ ν”„λ‘œκ·Έλž¨μ„ μ‚¬μš©ν•˜λ©΄ 맀우 λΉ λ₯΄κ²Œ μ†Œμ§„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이 μž‘μ—…μ€ 파일 μ‹œμŠ€ν…œ 이벀트λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— CPU cycle에 많이 κ΄€μ—¬ν•˜μ§„ μ•ŠμŠ΅λ‹ˆλ‹€. μ»΄νŒŒμΌλŸ¬λŠ” 일반적으둜 fs.watchλ₯Ό μ‚¬μš©ν•˜μ—¬ 디렉터리λ₯Ό κ°μ‹œν•©λ‹ˆλ‹€. (예: μ„€μ • νŒŒμΌμ— ν¬ν•¨λœ μ†ŒμŠ€ 디렉터리, λͺ¨λ“ˆ 확인을 μ‹€νŒ¨ν•œ 디렉터리 ... λ“±) λ³€κ²½ 사항에 λŒ€ν•œ μ•Œλ¦Όμ—μ„œ λˆ„λ½λœ 정밀도λ₯Ό μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μž¬κ·€ κ°μ‹œ κΈ°λŠ₯은 Windows와 OSXμ—μ„œλ§Œ μ§€μ›λ©λ‹ˆλ‹€. 즉, λ‹€λ₯Έ OS듀은 μž¬κ·€μ  νŠΉμ„±μ„ λŒ€μ²΄ν•  무언가가 ν•„μš”ν•©λ‹ˆλ‹€.

fs.watchFile은 폴링을 μ‚¬μš©ν•˜λ―€λ‘œ CPU μ£ΌκΈ°λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ΄λŠ” 파일/디렉터리 μƒνƒœμ— λŒ€ν•œ μ—…λ°μ΄νŠΈλ₯Ό 받을 수 μžˆλŠ” κ°€μž₯ μ‹ λ’°ν•  수 μžˆλŠ” λ©”μ»€λ‹ˆμ¦˜μž…λ‹ˆλ‹€. μ»΄νŒŒμΌλŸ¬λŠ” 일반적으둜 fs.watchFile을 μ‚¬μš©ν•˜μ—¬ μ†ŒμŠ€ 파일, ꡬ성 파일 및 λˆ„λ½λœ 파일(λˆ„λ½λœ 파일 μ°Έμ‘°)을 κ°μ‹œν•˜λŠ”λ° μ΄λŠ” CPU μ‚¬μš©λŸ‰μ΄ ν”„λ‘œκ·Έλž¨μ˜ 파일 μˆ˜μ— 따라 λ‹¬λΌμ§„λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.