Typescript: 파일이 이미 포함 된 파일과 λŒ€μ†Œ 문자 만 닀름 : λŒ€μ†Œ λ¬ΈμžλŠ” μ •ν™•ν•˜μ§€λ§Œ μƒλŒ€ 경둜

에 λ§Œλ“  2018λ…„ 07μ›” 05일  Β·  44μ½”λ©˜νŠΈ  Β·  좜처: microsoft/TypeScript

Error TS1149: File name 'C:/Project/frontend/scripts/State.ts' differs from already included file name '../frontend/scripts/State.ts' only in casing.

μ°Έμ‘°μ—μ„œ λŒ€μ†Œ 문자λ₯Ό μ„Έ 번 ν™•μΈν–ˆκ³  μ‹€μ œ νŒŒμΌμ—λ„ λŒ€μ†Œ λ¬Έμžκ°€ μ •ν™•ν•©λ‹ˆλ‹€. λ‚΄κ°€ 말할 μˆ˜μžˆλŠ” ν•œ, 이것은 μƒλŒ€ κ²½λ‘œκ°€ 잘λͺ»λœ λŒ€ / μ†Œλ¬Έμžλ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬ΈμΌκΉŒμš”, μ•„λ‹ˆλ©΄ μƒλŒ€ 경둜 자체 λ•Œλ¬ΈμΌκΉŒμš”?

Macκ³Ό Linuxμ—μ„œλŠ” 잘 μ»΄νŒŒμΌλ˜μ§€λ§Œ Windowsμ—μ„œλŠ”μ΄ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

Bug Fix Available

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

μ΅œκ·Όμ— λ˜‘κ°™μ€ 였λ₯˜λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.
인터넷 검색을 ν•œ ν›„ 이것을 발견 ν–ˆμŠ΅λ‹ˆλ‹€ . λ§ˆμ§€λ§‰ λ‹΅μž₯이 λˆˆμ— λ•λ‹ˆλ‹€. κ·Έλž˜μ„œ Visual Studio Codeμ—μ„œ μž‘μ—…μ€‘μΈ 폴더λ₯Ό λ‹«κ³  λ‹€μ‹œ μ—΄μ—ˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  κ²ƒμ΄λ‘œλ“œ 된 ν›„ 였λ₯˜κ°€ μ—†μœΌλ©° tsconfig.json νŒŒμΌμ„ μ—‰λ§μœΌλ‘œ λ§Œλ“€ ν•„μš”κ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

도움이 λ˜μ—ˆκΈ°λ₯Ό λ°”λžλ‹ˆλ‹€

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

λ²„κ·Έμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ μž¬ν˜„ ν•  방법이 ν•„μš”ν•©λ‹ˆλ‹€. μš°λ¦¬κ°€ μ‚¬μš©ν•  μˆ˜μžˆλŠ” νŒŒμΌμ— λŒ€ν•œ zip νŒŒμΌμ΄λ‚˜ μ €μž₯μ†Œ λ˜λŠ” μ„€λͺ…이 μžˆμŠ΅λ‹ˆκΉŒ?

결과적으둜 λ¬Έμ œλŠ” 타사 λͺ¨λ“ˆ 인 tsifyμ—μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 우리 ν”„λ‘œμ νŠΈλŠ” 1.0.1을 μ‚¬μš©ν•˜κ³  μžˆμ—ˆκ³  forceConsistentCasingInFileNames λŠ” 4.0.0κΉŒμ§€ μ§€μ›λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λ‚΄ ꡬ성 μš”μ†Œ κ°€μ Έ 였기 쀑 ν•˜λ‚˜μ— λ™μΌν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. ꡬ성 μš”μ†Œ 디렉터리 이름은 λŒ€λ¬Έμž "H"둜 κ°€μ Έ μ˜€λ €κ³ ν–ˆλ˜ 것과 λ™μΌν•œ "h"둜 κΈ°λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ·Έκ²ƒμ€ν•΄μ•Όν•œλ‹€ "
app.moudule의 "./Historical/graph-data/graph-data.component"μ—μ„œ "import {GraphDataComponent} from"./historical/graph-data/graph-data.component ";"μ—μ„œ {GraphDataComponent} κ°€μ Έ 였기 TS.

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

μ•ˆλ…•ν•˜μ„Έμš”, λ‚˜λŠ” μ—¬μ „νžˆμ΄ λ¬Έμ œμ— μ§λ©΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€-였λ₯˜ TS1149 : 파일 이름 'src / models / headers / userRole.ts'κ°€ 이미 포함 된 파일 이름 'src / models / headers / UserRole.ts'와 λŒ€μ†Œ 문자 만 λ‹€λ¦…λ‹ˆλ‹€.
λ‚˜λŠ” 그것을 고치기 μœ„ν•΄ μ—¬λŸ¬ 가지 방법을 μ‹œλ„ν–ˆμ§€λ§Œ 운이 μ—†λ‹€. λ‚˜λŠ” 창문을 μ‚¬μš©ν•˜κ³ μžˆλ‹€.

λ‚˜λŠ” λ˜ν•œ 같은 λ¬Έμ œμ— μ§λ©΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
μ§€κΈˆμ€ λ‹€μŒμ„ μ„€μ •ν•˜μ—¬ "해결됨":
"forceConsistentCasingInFileNames": false,
tsconfig.json

μ΅œκ·Όμ— λ˜‘κ°™μ€ 였λ₯˜λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.
인터넷 검색을 ν•œ ν›„ 이것을 발견 ν–ˆμŠ΅λ‹ˆλ‹€ . λ§ˆμ§€λ§‰ λ‹΅μž₯이 λˆˆμ— λ•λ‹ˆλ‹€. κ·Έλž˜μ„œ Visual Studio Codeμ—μ„œ μž‘μ—…μ€‘μΈ 폴더λ₯Ό λ‹«κ³  λ‹€μ‹œ μ—΄μ—ˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  κ²ƒμ΄λ‘œλ“œ 된 ν›„ 였λ₯˜κ°€ μ—†μœΌλ©° tsconfig.json νŒŒμΌμ„ μ—‰λ§μœΌλ‘œ λ§Œλ“€ ν•„μš”κ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

도움이 λ˜μ—ˆκΈ°λ₯Ό λ°”λžλ‹ˆλ‹€

λ‚˜λŠ”μ΄ 같은 문제λ₯Ό λ§Œλ‚¬λ‹€.

  • μž‘μ—… 곡간을 μ œκ±°ν•΄λ„ λ„μ›€μ΄λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
  • forceConsistentCasingInFileNamesλ₯Ό 변경해도 λ„μ›€μ΄λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

제 κ²½μš°μ—λŠ” 디렉토리 μ–΄λ”˜κ°€μ—μ„œ 였λ₯˜κ°€ λ°œμƒν•˜κ³  λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€ ...? κ·Έλž˜μ„œ λ‚˜λŠ” 그것듀을 λͺ¨λ‘ 고치기 μœ„ν•΄ λ‹€μŒμ„ μˆ˜ν–‰ν•΄μ•Όν–ˆλ‹€.

  1. 디렉토리 이름을 "OriginalDirectoryName" => "AnotherName" 와 같이 λ³€κ²½ν•©λ‹ˆλ‹€.
  2. VsCodeλŠ” μ†ŒμŠ€μ˜ 디렉토리 이름을 μ—…λ°μ΄νŠΈν•˜λ €κ³  μ‹œλ„ν•˜λ―€λ‘œ λͺ‡ 초 λ™μ•ˆ 기닀리면 λͺ¨λ“  파일이 μƒˆ 디렉토리 μ΄λ¦„μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜μ–΄μ•Ό 함을 ν‘œμ‹œν•©λ‹ˆλ‹€.
  3. File -> Save All둜 μ΄λ™ν•˜μ—¬ λͺ¨λ‘ μ €μž₯
  4. 디렉터리 이름을 λ‹€μ‹œ "AnotherName" => "OriginalDirectoryName" λ³€κ²½ν•©λ‹ˆλ‹€.
  5. λ‹€μ‹œ λ§ν•˜μ§€λ§Œ 파일 μ—…λ°μ΄νŠΈλ₯Ό μ‹œλ„ν•˜λ―€λ‘œ λͺ¨λ‘ μ €μž₯ν•©λ‹ˆλ‹€.
  6. VsCodeλ₯Ό μž¬λΆ€νŒ…ν•˜μ‹­μ‹œμ˜€.

그러면 λ¬Έμ œκ°€ ν•΄κ²°λ©λ‹ˆλ‹€.

camelCase의 파일 이름을 λͺ¨λ“  첫 κΈ€μžλ₯Ό λŒ€λ¬Έμžλ‘œ λ°”κΎΌ 후이 버그가 λ°œμƒν•©λ‹ˆλ‹€.

제 κ²½μš°μ—λŠ” Logger λΌλŠ” νŒŒμΌμ„ λ§Œλ“€μ—ˆμ§€ logger λ‚˜μ€‘μ—

κ·Έλž˜μ„œ VSCode Reload Window κΈ°λŠ₯을 μ‚¬μš©ν•˜μ—¬ VSCodeλ₯Ό λ‹€μ‹œλ‘œλ“œν•˜λ©΄ 였λ₯˜ λ©”μ‹œμ§€κ°€ μ‚¬λΌμ§‘λ‹ˆλ‹€. κ·Έλž˜μ„œ λ‚˜λŠ”μ΄ 였λ₯˜μ— λŒ€ν•œ VSCode μ–΄λ”˜κ°€μ— μΊμ‹œκ°€ μžˆλ‹€κ³  μƒκ°ν•˜κ³  λͺ…ν™•ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆκΉŒ? 파일 이름이 μ˜¬λ°”λ₯Έμ§€ ν™•μΈν•œ 후이 λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ μ‹œλ„ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” λ˜‘κ°™μ€ λ¬Έμ œκ°€ 있으며 μ–΄λ–€ 이유둜 인해 일뢀 ts νŒŒμΌμ—μ„œ λŒ€λ¬Έμžλ₯Ό μ‚¬μš©ν•˜μ—¬ 호좜 된 λ‹€μŒ μ†Œλ¬Έμžλ‘œ 이름을 λ°”κΎΈκ³  μž‘λ™ν•œλ‹€λŠ” 것을 방금 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

이 λͺ¨λΈ ts νŒŒμΌμ„ μ œκ±°ν•˜κ³  angular-CLI둜 λ‹€μ‹œ 생성 ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

λŒ€μ†Œ 문자λ₯Ό λ³€κ²½ν•˜λ©΄ updateOpen λͺ…λ Ήμ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•©λ‹ˆλ‹€. λ™μΌν•œ λͺ…λ Ήμ—μ„œ 파일이 λ‹€λ₯Έ λŒ€μ†Œ 문자둜 열리고 μ›λž˜ λŒ€μ†Œ 문자둜 λ‹«νžˆλŠ” 방법에 μœ μ˜ν•˜μ‹­μ‹œμ˜€.

Info 69   [10:30:18.128] request:
    {"seq":5,"type":"request","command":"updateOpen","arguments":{"changedFiles":[],"closedFiles":["c:/temp/est/Logger.ts"],"openFiles":[{"file":"c:/temp/est/logger.ts","fileContent":"export class logger {\r\n    \r\n}","scriptKindName":"TS","projectRootPath":"c:\\temp\\est"}]}}
Err 70    [10:30:18.153] Exception on executing command {"seq":5,"type":"request","command":"updateOpen","arguments":{"changedFiles":[],"closedFiles":["c:/temp/est/Logger.ts"],"openFiles":[{"file":"c:/temp/est/logger.ts","fileContent":"export class logger {\r\n    \r\n}","scriptKindName":"TS","projectRootPath":"c:\\temp\\est"}]}}:

    Debug Failure. False expression: Script should not exist and not be open already

    Error: Debug Failure. False expression: Script should not exist and not be open already
        at ProjectService.applyChangesInOpenFiles (c:\Typescript\built\local\tsserver.js:138090:34)
        at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (c:\Typescript\built\local\tsserver.js:138972:46)
        at c:\Typescript\built\local\tsserver.js:140630:88
        at IOSession.Session.executeWithRequestId (c:\Typescript\built\local\tsserver.js:140621:28)
        at IOSession.Session.executeCommand (c:\Typescript\built\local\tsserver.js:140630:33)
        at IOSession.Session.onMessage (c:\Typescript\built\local\tsserver.js:140653:35)
        at Interface.<anonymous> (c:\Typescript\built\local\tsserver.js:141968:27)
        at Interface.emit (events.js:182:13)
        at Interface._onLine (readline.js:290:10)
        at Interface._normalWrite (readline.js:433:12)
        at Socket.ondata (readline.js:149:10)
        at Socket.emit (events.js:182:13)
        at addChunk (_stream_readable.js:283:12)
        at readableAddChunk (_stream_readable.js:264:11)
        at Socket.Readable.push (_stream_readable.js:219:10)
        at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)

이 λ¬Έμ œλŠ” 루트 파일 이름을 ν™•μΈν•˜λŠ” 것보닀 더 κ΄€λ ¨μ΄μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ„ μž¬μ‚¬μš© ν•  λ•Œ μ‹€νŒ¨ν•˜λŠ” 또 λ‹€λ₯Έ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ μžˆλŠ”λ°, μ΄λŠ” κ°„λ‹¨ν•œ ν”„λ‘œκ·Έλž¨ μž¬μ‚¬μš© ν…ŒμŠ€νŠΈμž…λ‹ˆλ‹€.

it("forceConsistentCasingInFileNames works when renaming file with different casing", () => {
            const loggerFile: File = {
                path: `${projectRoot}/logger.ts`,
                content: `export class logger { }`
            };
            const anotherFile: File = {
                path: `${projectRoot}/another.ts`,
                content: `import { logger } from "./logger"; new logger();`
            };
            const tsconfig: File = {
                path: `${projectRoot}/tsconfig.json`,
                content: JSON.stringify({
                    compilerOptions: { forceConsistentCasingInFileNames: true }
                })
            };

            const host = createWatchedSystem([loggerFile, anotherFile, tsconfig, libFile, tsconfig]);
            createWatchOfConfigFile(tsconfig.path, host);
            checkOutputErrorsInitial(host, emptyArray);
            host.writeFile(anotherFile.path, anotherFile.content.replace("./logger", "./Logger"));
            host.runQueuedTimeoutCallbacks();
            checkOutputErrorsIncremental(host, [
                createCompilerDiagnostic(Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, loggerFile.path, `${projectRoot}/Logger.ts`),
            ]); // Currently the errors are not reported in watch mode but will be reported if program is created from scratch.
        });

λ„€, λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν•˜κ³  이전에 μ–ΈκΈ‰ 된 μˆ˜μ • / ν•΄κ²° 방법 쀑 μ–΄λŠ 것도 λ„μ›€μ΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

제 경우 λ©”μ‹œμ§€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

error TS1149: File name '/mnt/c/Users/<username>/Documents/adobe-scripts/InDesign/Create Downloadable 
(2020a)/Illustrator/2015.3/index.d.ts' differs from already included file name '/mnt/c/Users/<username>/Documents/adobe-scripts/InDesign/Create Downloadable (2020a)/illustrator/2015.3/index.d.ts' only in casing.

λΏ‘λΏ‘

일러슀트 λ ˆμ΄ν„°

κ³Ό

μ‚½ν™”κ°€

λ‚˜λŠ” 였λ₯˜ λ©”μ‹œμ§€μ™€ 트랜슀 νŒŒμΌλŸ¬κ°€ λ³΄λŠ” 것을 잘 μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ μ΄ν•΄ν•˜μ§€ λͺ»ν•˜λŠ” 것은 illustrator 의 μ†Œλ¬Έμž 버전을 μ–»λŠ” κ³³μž…λ‹ˆλ‹€. λͺ‡ 번의 검색을 μˆ˜ν–‰ν–ˆμ§€λ§Œ illustrator (μ£Όμ„μ΄λ‚˜ λ¬Έμžμ—΄ λ“±μ—μ„œ μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 경우) 단어가 λͺ¨λ‘ μ†Œλ¬Έμž 인 경우λ₯Ό μ „ν˜€ 찾을 수 μΈμŠ€ν„΄μŠ€ index.d.ts μ μ—μ„œ 파일 Illustrator 폴더 λ‹¨μ–΄λŠ” 디렉토리 이름 κ·ΈλŒ€λ‘œ, μ œλŒ€λ‘œ λŒ€λ¬Έμž.

λΉ„μŠ·ν•œ λ¬Έμ œκ°€ μžˆμ—ˆμ§€λ§Œ 더 이상 μž¬ν˜„ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. VSCode λ²„κ·Έμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€. μ†ŒμŠ€ μ œμ–΄ 메뉴λ₯Ό ν¬ν•¨ν•˜μ—¬ κ²½μš°μ— 따라 이름이 λŒ€λ¬Έμž 인 파일이 μ†Œλ¬Έμž μ΄λ¦„μœΌλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€.

λ•Œλ•Œλ‘œ λˆ„κ΅°κ°€κ°€ 폴더 이름을 'foo'μ—μ„œ 'Foo'둜 λ³€κ²½ν•  수 있으며 git pull λ₯Ό μˆ˜ν–‰ ν•  λ•Œ 폴더 이름이 μ—…λ°μ΄νŠΈλ˜μ§€ μ•Šκ±°λ‚˜ λˆ„κ΅°κ°€κ°€ λ³€κ²½ 사항을 ν‘Έμ‹œν•˜λŠ” 것을 μžŠμ—ˆμŠ΅λ‹ˆλ‹€. . 이 경우 λͺ¨λ“  μ½”λ“œ μ°Έμ‘°κ°€ μ •ν™•ν•˜κ³  μ½”λ“œμ— 잘λͺ»λœ 것이 μ—†μœΌλ©° μ’…μ’… ν•΄λ‹Ή ν΄λ”μ˜ νŒŒμΌμ„ μ œλŒ€λ‘œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. TSλ₯Ό κ²λ‚˜κ²Œ λ§Œλ“€λΏμž…λ‹ˆλ‹€.

λ”°λΌμ„œ κ·Όλ³Έ 원인 인 폴더λ₯Ό μ°ΎμœΌμ‹­μ‹œμ˜€. 폴더 이름을 λ³€κ²½ν•˜μ‹­μ‹œμ˜€. 그리고 μ œλŒ€λ‘œ μ»€λ°‹ν•˜μ‹­μ‹œμ˜€.

git mv foo tmp
git mv tmp Foo

commit 및 push 뒀에 μ˜€λŠ” 것은 git repoμ—μ„œ 디렉토리 이름을 λ°”κΎΈλŠ” κ°€μž₯ κ°„λ‹¨ν•œ λ°©λ²•μž…λ‹ˆλ‹€.

Gitμ—λŠ” core.ignorecase 와 같이 λŒ€μ†Œ 문자 ꡬ뢄 μ—¬λΆ€λ₯Ό μ•Œλ €μ£ΌλŠ” ꡬ성 섀정이 μžˆμŠ΅λ‹ˆλ‹€. Git에 λŒ€μ†Œ 문자λ₯Ό κ΅¬λΆ„ν•˜λ €λ©΄μ΄ 섀정을 false μ„€μ •ν•˜λ©΄λ©λ‹ˆλ‹€.

더보기:

https://stackoverflow.com/questions/17683458/how-do-i-commit-case-sensitive-only-filename-changes-in-git/17688308#17688308

λ‚˜λ₯Ό μœ„ν•΄ ν•œ 일은 λͺ¨λ“  이름 λ°”κΎΈκΈ°λ₯Ό μ·¨μ†Œν•˜κ³  μ„œλ²„λ₯Ό μ’…λ£Œν•˜κ³  이름을 λ°”κΎΈλ €λŠ” λͺ¨λ“  파일의 이름을 λ°”κΎΈκ³  μ„œλ²„λ₯Ό λ‹€μ‹œ μ‹œμž‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μΌμ’…μ˜ 캐싱 문제 일 κ²ƒμž…λ‹ˆλ‹€.

VSCodeμ—μ„œ 창을 λ‹€μ‹œλ‘œλ“œν•˜λ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. React ꡬ성 μš”μ†Œλ₯Ό camelCase둜 λ³€κ²½ν•˜κ³  문제λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€. VSCodeμ—μ„œ μΌμ’…μ˜ 캐싱 문제인 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것을 λ°œκ²¬ν–ˆλ‹€. λ‚΄ componentA.tsx ../store/someStore κ°€μ Έ μ™”μ§€λ§Œμ΄ κ°€μ Έ 였기둜 인해이 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ 파일 이름이 SomeStore.ts μž„μ„ μ œμ•ˆν•©λ‹ˆλ‹€ (파일 μ‹œμŠ€ν…œκ³Ό VSCodeκ°€ ν•΄λ‹Ή μœ„μΉ˜μ— someStore.ts λ₯Ό ν‘œμ‹œν•˜λ”λΌλ„ .

파일 이름 '/mypath/store/someStore.ts'λŠ” 이미 포함 된 파일 이름 '/mypath/store/SomeStore.ts'와 λŒ€μ†Œ 문자 만 λ‹€λ¦…λ‹ˆλ‹€. _ts (1149) _

λ‹€λ₯Έ 파일 ( ../store/index.ts )에 잘λͺ»λœ κ°€μ Έ 였기 ( ./SomeStore )κ°€ μžˆμ§€λ§Œ 였λ₯˜λ₯Ό λ°œμƒ μ‹œν‚€μ§€λŠ” _ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. κ°€μ Έ 였기λ₯Ό μˆ˜μ •ν•˜κ³  VSCodeλ₯Ό λ‹€μ‹œ μ‹œμž‘ν•œ ν›„ componentA.tsx 더 이상이 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μˆ˜μ • 사항을 index.ts 되돌리고 VSCodeλ₯Ό λ‹€μ‹œ μ‹œμž‘ν•˜λ©΄ componentA.tsx λ‹€μ‹œ κ°€μ§œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

제 상황을 돕기 μœ„ν•΄ μ œκ°€ ν•œ ν•œ κ°€μ§€λŠ” WSL μ‚¬μš©μ„ μ€‘λ‹¨ν•˜λŠ” 것이 μ—ˆμŠ΅λ‹ˆλ‹€. Cygwin을 ν™œμš©ν•˜λŠ” μ›λž˜ μ‚¬μš©μž 지정 μ„€μ •μœΌλ‘œ λŒμ•„κ°€μ„œ κ·Έ μ΄ν›„λ‘œμ΄ λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” λ˜ν•œ 같은 λ¬Έμ œμ— μ§λ©΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
μ§€κΈˆμ€ λ‹€μŒμ„ μ„€μ •ν•˜μ—¬ "해결됨":
"forceConsistentCasingInFileNames": false,
tsconfig.json

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

인터넷 검색을 ν•œ ν›„ 이것을 발견 ν–ˆμŠ΅λ‹ˆλ‹€ . λ§ˆμ§€λ§‰ λ‹΅μž₯이 λˆˆμ— λ•λ‹ˆλ‹€. κ·Έλž˜μ„œ Visual Studio Codeμ—μ„œ μž‘μ—…μ€‘μΈ 폴더λ₯Ό λ‹«κ³  λ‹€μ‹œ μ—΄μ—ˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  κ²ƒμ΄λ‘œλ“œ 된 ν›„ 였λ₯˜κ°€ μ—†μœΌλ©° tsconfig.json νŒŒμΌμ„ μ—‰λ§μœΌλ‘œ λ§Œλ“€ ν•„μš”κ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

이것은 μ •λ§λ‘œ νš¨κ³Όκ°€ μžˆμ—ˆλ‹€

파일 이름을 μ„€μ • ν•œ λ‹€μŒ λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œ λ³€κ²½ν•˜μ—¬μ΄λ₯Ό μž¬ν˜„ ν•  μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ†ŒμŠ€ λ§€ν•‘μ—μ„œ μ œλŒ€λ‘œ μ—…λ°μ΄νŠΈλ˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 문제 νŒŒμΌμ„ μ‚­μ œν•˜κ³  λ‹€μ‹œ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ„€, 고톡 μŠ€λŸ½μ§€λ§Œ νš¨κ³Όκ°€μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

λ¬Έμ œκ°€ μžˆμ—ˆλŠ”λ° "forceConsistentCasingInFileNames"λ₯Ό μ„€μ •ν•˜μ—¬ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. false
tsconfig.jsonμ—μ„œ λ‹€μ‹œ true둜 μ„€μ •ν•˜μ‹­μ‹œμ˜€.

VSCodeλ₯Ό μž¬λΆ€νŒ…ν•˜κΈ° λ§Œν•˜λ©΄λ©λ‹ˆλ‹€.

파일 이름을 λ³€κ²½ ν•œ ν›„ WebStormμ—μ„œ λΉ„μŠ·ν•œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. 일뢀 IDE μΊμ‹œ 인 κ²ƒμœΌλ‘œ ν™•μ‹ ν•©λ‹ˆλ‹€.

μΊμ‹œλ₯Ό μ§€μš°κ±°λ‚˜ IDEλ₯Ό μž¬λΆ€νŒ…ν•΄λ„ λ„μ›€μ΄λ˜μ§€ μ•ŠμœΌλ©΄ 폴더λ₯Ό μ œκ±°ν•˜κ³  μ €μž₯μ†Œλ₯Ό λ‹€μ‹œ 볡제 ν•œ λ‹€μŒ μƒˆλ‘œ μ„€μΉ˜ν•˜μ‹­μ‹œμ˜€.

λ‚˜λŠ” 이것을 Macμ—μ„œ μ°Ύμ•˜μŠ΅λ‹ˆλ‹€.

λŒ€λ³Έ

  • ComponentA.ts λΌλŠ” 파일
  • componentB.ts μ—λŠ” import ComponentA from './ComponentA';
  • componentC.ts μ—λŠ” import ComponentA from './ComponentA';
  • ComponentA.ts 파일 이름을 componentA.ts둜 λ³€κ²½ν•˜μ‹­μ‹œμ˜€.
  • componentC.ts λ₯Ό import ComponentA from './componentA;'
  • componentB.ts에 λŒ€ν•œ κ°€μ Έ 였기λ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” 것을 잊고 이전 λŒ€λ¬Έμž import ComponentA from './ComponentA;'

였λ₯˜ (λŒ€λž΅) :

 File name '/componentA.ts' differs from already included file name  '/ComponentA.ts'  only in casing. ts(1149)

이유:

Macμ—μ„œ λŒ€μ†Œ 문자λ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•ŠμœΌλ©΄ componentB.ts 의 λ‚˜λ¨Έμ§€ κ°€μ Έ 였기 import ComponentA from './ComponentA;' λ₯Ό λ¨Όμ € ν•΄κ²° ν•œ λ‹€μŒμ΄ κ°€μ Έ 였기 경둜λ₯Ό '캐싱 / 등둝'ν•©λ‹ˆλ‹€.

그런 λ‹€μŒ componentC.ts 의 μ˜¬λ°”λ₯Έ κ°€μ Έ μ˜€κΈ°κ°€ μ •ν™•ν•˜λ”λΌλ„ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

ν•΄κ²° 방법 :

  • componentA.ts / ComponentA.ts 의 λͺ¨λ“  κ°€μ Έ 였기λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.
  • λŒ€μ†Œ 문자 ꡬ뢄을 ν™•μΈν•˜κ³  μˆ˜μ •ν•˜μ‹­μ‹œμ˜€.

제 κ²½μš°μ—λŠ”, componentC.ts 였λ₯˜ κ°€μžˆλŠ” 파일이 μ‹€μ œλ‘œ 올 λ°”λ₯΄κ³  λ©”μ‹œμ§€κ°€ componentC.ts 문제λ₯Ό λ‚˜νƒ€λ‚΄λŠ”λ°λ„ componentB.ts λ₯Ό μˆ˜μ •ν•΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€.

λ‚΄ 파일의 이름을 λ°”κΎΈκ³  gulp λΉŒλ“œλ₯Όν•΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ 이전 μ›λž˜ μ΄λ¦„μœΌλ‘œ λ‹€μ‹œ 이름을 λ°”κΎΈμ—ˆκ³  잘 κ΅¬μΆ•λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ•Œλ¬Έμ— 이름 λ³€κ²½μ˜ κ²½μš°μ—λŠ” μ μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ μ΄μƒν•œ μΊμ‹œμ˜ vue νŒŒμΌμ„ λ”°λΌμ„œ Vetur λΆˆν‰μ„, λ‚˜λŠ” VS μ½”λ“œ (λ‹€μ‹œν–ˆλ‹€ Ctrl + Shirt + P @uniquexiaobaiλŠ” μ‘°μ–ΈμœΌλ‘œ -> μƒˆλ‘œ κ³ μΉ¨ μ°½).

Typescript-Serverλ₯Ό λ‹€μ‹œ μ‹œμž‘ν•˜λ©΄ μΆ©λΆ„ν•©λ‹ˆλ‹€. VSCode λ‹€μ‹œ μ‹œμž‘μ€ κ³Όμž‰μž…λ‹ˆλ‹€.

OSX의 VSC : CMD + Shift + P λ‹€μŒμ— TypeScript: Restart TS server ν•©λ‹ˆλ‹€.

Webstorm을 μ‚¬μš©ν•˜λ©΄ μΊμ‹œλ₯Ό λ¬΄νš¨ν™”ν•˜κ³  μ§€μ›Œμ•Όν•©λ‹ˆλ‹€.
파일> μΊμ‹œ λ¬΄νš¨ν™” / λ‹€μ‹œ μ‹œμž‘

λ‚΄κ°€ 찾은 κ°€μž₯ 짧고 κ°€μž₯ 쒋은 해결책은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

λŒ€μ†Œ 문자 문제λ₯Ό μΌμœΌν‚€λŠ” 단어λ₯Ό μ œκ±°ν•˜μ‹­μ‹œμ˜€.
예
ListsDrawerOfContent 및 ListsDrawerofContent

파일 μ΄λ¦„μ—μ„œ μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€. 그리고 μ»΄νŒŒμΌλŸ¬λŠ” 그것을 μ˜¬λ°”λ₯΄κ²Œ μ»΄νŒŒμΌν–ˆμŠ΅λ‹ˆλ‹€.

그런 λ‹€μŒ λ‚˜μ€‘μ— μ›ν•˜λŠ” μΌ€μ΄μŠ€ ListsDrawerOfContent 둜 이름을 λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€.
맀λ ₯처럼 μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ git을 염두에 λ‘μ‹­μ‹œμ˜€.

https://stackoverflow.com/questions/17683458/how-do-i-commit-case-sensitive-only-filename-changes-in-git

κ°€μ Έ μ˜€κΈ°μ™€ λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 파일 이름을 "a"μ—μ„œ "A"둜 λ°”κΎΌ ν›„ 방금 vs μ½”λ“œλ₯Ό λ‹€μ‹œ μ‹œμž‘ν•œ λ‹€μŒ μž‘λ™ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 같은 λ¬Έμ œκ°€ μžˆμ—ˆλ‹€. VSCode λ‹€μ‹œ μ‹œμž‘ 및 "forceConsistentCasingInFileNames"μ„€μ • : falseλŠ” λ„μ›€μ΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

였λ₯˜ 정보 :( λ””μŠ€ν¬ 기호 만 닀름)
파일 이름 'D : /mycode/devmono2/packages/server-sdk/index.ts'κ°€ 이미 포함 된 파일 이름 'd : /mycode/devmono2/packages/server-sdk/index.ts'μ™€λŠ” λŒ€μ†Œ 문자 만 λ‹€λ¦…λ‹ˆλ‹€. 1149)

μ™œ?

ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€!
λ‚΄ λ¬Έμ œλŠ” κ°„λ‹¨ν•œ λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.

Macμ—μ„œ 둜컬둜 λͺ¨λ“  것이 μž˜λ˜μ—ˆμ§€λ§Œ Jenkins μ„œλ²„ μ—μ„œμ΄ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” λ‹¨μˆœνžˆ 파일 이름이 'quote.ts'μ˜€μ§€λ§Œ 원격 git repo λ‚΄μ—μ„œλŠ” 'Quote.ts'μ˜€μŠ΅λ‹ˆλ‹€.

문제의 원인
κ·Έλž˜μ„œ 파일 이름은 μ›λž˜ 'Quote.ts'μ˜€μŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ 'quote.ts'둜 λ³€κ²½ν–ˆμ§€λ§Œ git은 이것을 λ³€κ²½μœΌλ‘œ 보지 μ•Šμ•˜μœΌλ―€λ‘œ (Mac은 λŒ€μ†Œ 문자λ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•ŠλŠ”λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€) λ”°λΌμ„œ λŒ€μ†Œ 문자 변경이 원격 μ €μž₯μ†Œμ— λ°˜μ˜λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ Jenkins νŒŒμ΄ν”„ 라인이 싀행될 λ•Œ '../../quote.ts'둜 μ°Έμ‘° 될 λ•Œ 'Quote.ts'λ₯Ό λŒμ–΄ λ‚΄λ € 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ μ–΄λ–»κ²Œ ν•΄κ²°ν–ˆλŠ”μ§€

  1. 컀피λ₯Ό λ§ˆμ‹œλ‹€
  2. 원격 μ €μž₯μ†Œμ˜ 파일 이름을 μˆ˜λ™μœΌλ‘œ μ†Œλ¬Έμžλ‘œ λ³€κ²½
  3. git pull 둜컬
  4. νŒŒμ΄ν”„ 라인 μ‹€ν–‰

뢐뢐! 이것이 λˆ„κ΅°κ°€μ—κ²Œ λ„μ›€μ΄λ˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

μ΄λŸ¬ν•œ 였λ₯˜ 쀑 μ•½ 100 개λ₯Ό μƒμ„±ν•˜λŠ” μœ μ‚¬ν•œ λ¬Έμ œκ°€μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ‘ λ™μΌν•œ κ·Όλ³Έ 문제λ₯Ό κ°€μ§€κ³ μžˆλŠ” κ²ƒμ²˜λŸΌ λ³΄μ˜€κΈ° λ•Œλ¬Έμ— μžμ„Ένžˆ 읽지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μ΅œκ·Όμ— λ‚΄κ°€ λ‹Ήμ—°ν•˜κ²Œ μ—¬κΈ°λŠ” WSL2μ—μ„œ 싀행쀑인 λ…Έλ“œλ‘œ μ „ν™˜ ν•œ 것이 문제의 μ›μΈμ΄μ—ˆμŠ΅λ‹ˆλ‹€. μ„±κ³΅ν•˜μ§€ λͺ»ν•œ 지 2 μ‹œκ°„μ΄ μ§€λ‚œ ν›„ μ‹€μ œλ‘œ 전체 λͺ©λ‘μ„ μ‚΄νŽ΄λ³΄κ³  μ‹€μ œ λ²„κ·Έκ°€μžˆλŠ” ν•œ 가지 예λ₯Ό μ°Ύμ•˜μŠ΅λ‹ˆλ‹€.

import {FooInterface} from '../Foo'; // '../foo'μ—¬μ•Όν•©λ‹ˆλ‹€.
import {BarService} from '../Bar'; // '../bar'μ—¬μ•Όν•©λ‹ˆλ‹€.

λ‚˜λŠ” 그것을 μ†Œλ¬Έμžλ‘œ λ³€κ²½ν•˜κ³ , vscodeλ₯Ό λ‹€μ‹œλ‘œλ“œν•˜κ³ , λ‹€μ‹œ λΉŒλ“œν–ˆκ³ , λͺ¨λ“  였λ₯˜κ°€ μ‚¬λΌμ‘ŒμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ μƒκ°ν•˜λŠ” 것은 tsκ°€ 잘λͺ»λœ 경둜 ( 'foo'λŒ€μ‹  'Foo')λ₯Ό κ°€μ Έ 였렀고 μ‹œλ„ν•œ λ‹€μŒ κ²°κ³Όλ₯Ό μΊμ‹œν•˜κ³  λ‚˜λ¨Έμ§€ μ½”λ“œλ₯Ό 처리 ν•  λ•Œ 잘λͺ»λœ μΊμ‹œ 경둜λ₯Ό μ‚¬μš©ν•˜λ €κ³  μ‹œλ„ν•œ κ²ƒμž…λ‹ˆλ‹€.

λ°”λΌκ±΄λŒ€ 이것은 λˆ„κ΅°κ°€λ₯Ό λ„μšΈ κ²ƒμž…λ‹ˆλ‹€!

λ‚΄ IDEλ₯Ό λ‹€μ‹œ μ‹œμž‘ν•˜λ©΄ 였λ₯˜κ°€ μ‚¬λΌμ§‘λ‹ˆλ‹€.

ꡬ성 μš”μ†Œμ—μ„œ λ™μΌν•œ 개체λ₯Ό λ§Œλ“€κ³  μ„±κ³΅μ μœΌλ‘œ μ‹€ν–‰ ν•œ ν›„ ngλ₯Ό μ‹œμž‘ν•œ λ‹€μŒ 개체λ₯Ό μ œκ±°ν•˜κ³  링크λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
κ·Έλ ‡λ‹€λ©΄ 그것은 μΌμ΄μ–΄μ•Όν•©λ‹ˆλ‹€.
λ‚΄ ν”„λ‘œμ νŠΈμ—μ„œλŠ” νš¨κ³Όκ°€μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

이것은 λ‚˜μ—κ²Œ 방금 μΌμ–΄λ‚œ 일이며 ν•΄κ²°λ˜μ§€ μ•Šμ€ 지속적인 λ¬Έμ œμž…λ‹ˆλ‹€. 디렉토리 μ΄λ¦„μ˜ λŒ€μ†Œ 문자λ₯Ό λ³€κ²½ν•˜κ³  λ³€κ²½ 사항을 μ»€λ°‹ν•˜λ €κ³  ν•  λ•Œλ§ˆλ‹€ λ°œμƒν•©λ‹ˆλ‹€. Git은 디렉터리 μ΄λ¦„μ˜ λŒ€ / μ†Œλ¬Έμž 변경을 μΈμ‹ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€.

+1 ......ν•˜μ§€λ§Œ WHYYYYYYYY

방금 λ¬Έμ œμ— μ§λ©΄ν–ˆμŠ΅λ‹ˆλ‹€. vscodeλ₯Ό μ‚¬μš©ν•˜μ—¬ κ°€μ Έ 였렀고 ν•  λ•Œ VSCodeκ°€ 이전 파일 이름과 디렉터리 이름을 μ‚¬μš©ν•˜λŠ” κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¬μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 그것을 μˆ˜μ •ν•˜κ³  tsc μ‹€ν–‰ ν›„ 터미널에 였λ₯˜κ°€ ν‘œμ‹œλ˜μ§€ μ•Šμ•˜μ§€λ§Œ VSCodeμ—μ„œ μ—¬μ „νžˆ ꡬ뢈 ꡬ뢈 ν•œ 쀄을 μ½μ—ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ vscode ( Typescript: Restart TS Server )μ—μ„œ Typescript μ„œλ²„λ₯Ό λ‹€μ‹œ μ‹œμž‘ν–ˆκ³  μ‚¬λΌμ‘ŒμŠ΅λ‹ˆλ‹€. λˆ„κ΅°κ°€μ—κ²Œ λ„μ›€μ΄λ˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

@ninjavang 당신이 λ‚˜λ₯Ό λ„μ™”μŠ΅λ‹ˆλ‹€! λ‚΄ gitlab ci / cd νŒŒμ΄ν”„ λΌμΈμ—μ„œ λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ 원격 μ§€μ μœΌλ‘œ κ°€μ„œ 파일의 경둜λ₯Ό ν™•μΈν–ˆμ„ λ•Œ 두 가지 λ²„μ „μ˜ 파일이 있으며 각각 λŒ€μ†Œ 문자λ₯Ό κ΅¬λΆ„ν•˜λŠ” 버전이 μžˆμŠ΅λ‹ˆλ‹€.

μ›κ²©μ—μ„œ μ›μΉ˜ μ•ŠλŠ” 버전을 μ‚­μ œν•˜κ³  νŒŒμΌμ„ 둜컬둜 λ³΅μ‚¬ν•˜κ³  원격을 ν’€κ³  VS μ½”λ“œλ₯Ό μƒˆλ‘œ 고친 λ‹€μŒ νŒŒμΌμ„ λ‹€μ‹œ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€!

도와 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

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

κ΄€λ ¨ 문제

wmaurer picture wmaurer  Β·  3μ½”λ©˜νŠΈ

siddjain picture siddjain  Β·  3μ½”λ©˜νŠΈ

kyasbal-1994 picture kyasbal-1994  Β·  3μ½”λ©˜νŠΈ

manekinekko picture manekinekko  Β·  3μ½”λ©˜νŠΈ

dlaberge picture dlaberge  Β·  3μ½”λ©˜νŠΈ