타이프스크립트 오류 "입력 파일을 덮어쓰게 되므로 파일을 쓸 수 없습니다..."
Visual Studio 2015 Update 3의 Typescript 2.2.1 프로젝트에서 다음과 같은 오류 목록에 수백 개의 오류가 표시됩니다.
'C:/{my-project}/node_modules/buffer-shims/index.js' 파일은 입력 파일을 덮어쓰므로 쓸 수 없습니다.
항상 이렇게 생겼어요.실제로 구축이 방해되는 것은 아니고, 모든 것이 정상적으로 동작하지만, 에러 리스트는 주의가 산만하고, 에러가 발생했을 때에 「실제」의 에러를 특정하기 어렵습니다.
제 사진이 .tsconfig.json
{
"compileOnSave": true,
"compilerOptions": {
"baseUrl": ".",
"module": "commonjs",
"noImplicitAny": true,
"removeComments": true,
"sourceMap": true,
"target": "ES5",
"forceConsistentCasingInFileNames": true,
"strictNullChecks": true,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"typeRoots": [],
"types": [] //Explicitly specify an empty array so that the TS2 @types modules are not acquired since we aren't ready for them yet.
},
"exclude": ["node_modules"]
}
어떻게 하면 이 모든 오류를 제거할 수 있을까요?
이 예에서는 outDir 옵션을 사용했지만 입력에서 대상 디렉토리를 제외하지 않았습니다.
// Bad
{
"compileOnSave": true,
"compilerOptions": {
"outDir": "./built",
"allowJs": true,
"target": "es5",
"allowUnreachableCode": false,
"noImplicitReturns": true,
"noImplicitAny": true,
"typeRoots": [ "./typings" ],
"outFile": "./built/combined.js"
},
"include": [
"./**/*"
],
"exclude": [
"./plugins/**/*",
"./typings/**/*"
]
}
outDir 내의 파일을 제외하기만 하면 됩니다.
// Good
{
"compileOnSave": true,
"compilerOptions": {
"outDir": "./built",
"allowJs": true,
"target": "es5",
"allowUnreachableCode": false,
"noImplicitReturns": true,
"noImplicitAny": true,
"typeRoots": [ "./typings" ],
"outFile": "./built/combined.js"
},
"include": [
"./**/*"
],
"exclude": [
"./plugins/**/*",
"./typings/**/*",
"./built/**/*" // This is what fixed it!
]
}
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★'아까', '아까', '아까', '아까'라는 옵션의 였습니다.allowJs: true
.
그래서 저는 오류를 없애기 위해 그 선을 삭제해야 했습니다.당신 코드에는 없지만, 아마 도움이 될 거예요.
가 VSCode에 을 자동 에 이 하였습니다.dist/
더입니니다다
import { SomeClass } from '../../dist/xxx/someclass'
문제를 해결하려면 가져오기를 수정하십시오.
import { SomeClass } from './someclass'
여기에는 몇 가지 가능한 원인이 있습니다.
- tsconfig.json:
- ★★
outDir
한 수준의폴더 합니다. "dist"는 가 없습니다('.'.'이렇게 하다.빌드 파일이 이동하는 위치입니다. - ★★
allowJs
회선을 false 또는 삭제합니다.참고: 활성화되어 있습니다. allowJs는 선언 설정/플래그와 충돌합니다.디폴트로는 유효하게 되어 있지 않습니다. - "dist"( 빌드 폴더)에 " 빌드 폴더)를 포함합니다
exclude
.
- ★★
- :json:
- ★★
main
"인덱스" 또는 기타 선택된 이름을 지정합니다."dist/index" ("dist/index") "/"는 "dist/index"입니다. - ★★
types
의 현대식 )typings
)에서 "인덱스에서 "인덱스"로 이동합니다.( d . ts ) 。
- ★★
수많은 다양한 방법을 사용할 수 있지만 단순성과 이해를 높이기 위해 처음에는 "dist", "simple tsconfig.json" 및 "package"를 사용하는 등 일반적인 방식을 고수하는 것이 가장 좋습니다.json 파일이 트리의 동일한 레벨에 있는 경우 등입니다.물론 node_modules의 파일을 찾아보는 것도 이해를 깊게 할 수 있지만, 인생에는 더 보람 있는 일이 있습니다.
TL;DR: 모노 레포 사용?주기 종속성을 확인하십시오!
실수로 이 패키지에 종속된 유형을 패키지에서 가져왔을 수 있습니다.
저도 이 오류가 발생했는데 다른 답변은 전혀 도움이 되지 않았습니다.특정하는 데 시간이 걸렸지만, 적어도 1시간 이상 낭비된 후에 근본적인 오류는 모노 리포에서 패키지 간의 주기적 의존성이었음이 판명되었습니다.
그래서 우리는 실 워크스페이스를 사용하고 있으며, Zilliqas와 매우 유사한 모노 레포 구조를 가지고 있습니다(당사의 레포는 아직 오픈 소스가 아니기 때문에 링크할 수 없습니다).
package A
실수로 (어떻게...Import...)package B
package B
is 에 의존하다package A
- 제가 분명히 말씀드렸듯이packages/packageB/package.json
:
"dependencies": {
...,
"@mycompany/packageA": "^0.0.0",
...
}
이것은 올바른 우물입니다.그러나 불행히도 실수로 다음에서 유형을 가져올 수 있습니다.package B
packages/packageA/_types.ts
하지만 (의존성이 암묵적이고 바람직하지 않고 우발적이기 때문에) 명시적으로 언급하지 않았기 때문에packages/packageA/package.json
아래"dependencies"
컴파일러tsc
)는 의존 사이클을 검출하지 못했지만 아직 구축에 실패했습니다.
네, TypeScript에 멋진 에러 메시지를 보내주셔서 감사합니다.와, 정말 많은 청어들이네요.
tsconfig.json에서 제외된 디렉토리에 'dist'를 추가하면 다음과 같이 됩니다.
{
"exclude": ["node_modules", "dist"]
}
set Dir.
"outDir": "./",
이 힌트는 outDir를 설정하지 않으면 출력이 입력 파일 바로 옆에 배치된다는 것입니다.allowJs 후 JavaScript 파일도 컴파일됩니다.그런 다음 컴파일된 JavaScript 파일이 소스 파일을 덮어씁니다.그냥 이걸 생각나게 하는 거야
어떤 답변도 효과가 없었으므로 이 문제의 원인이 될 수 있는 내용을 공유하겠습니다.
- 해서 '어울리지 않다'를 해요.
outDir
적어도)declarationDir
부터 )까지exclude
.
"exclude": ["node_modules", "types"]
- 의 '' ''가
rootDir
에는 임의의 ''가 되어 있습니다..js
「」를 하지 않는outDir
원래 javascript를이 "javascript"를 할 수 .outDir
.
"outDir": "lib"
- ★★★★★★★★★★★★★★★★★★★★★★타입 스크립트가 컴파일 하는 임의의 장소에서 Import 하는 경우는, 그 타입 선언을 체크해 생성해 주세요.하지 않습니다.
include
★★★★★★★★★★★★★★★★★」exclude
rootDir
를 Import 했을 경우, 사용, 입력, 덮어쓰기, 출력으로 설정되어 있습니다.또, 그 이전의 설정은 존중되지 않습니다.
예를 들어 다음과 같습니다.
- /src
- tsconfig.json
- randomJsFile.js
포함:
"rootDir": "src"
그리고:
"include": ["src/**/*.ts"]
다음에 '가져오다'를 .randomJSfile.js
의 임의의 에 있는 /src " " " " " " " " " " 가 됩니다.*.d.ts
파일 바로 옆에 있는 파일(유형 디렉토리에 출력하지 않음)이 있으면 해당 파일이 덮어쓰게 됩니다.
, Import, Import .rootDir
( node _ model " ) 。
.import config from ../webpack.config.js
★★★*.d.ts
for webpack (하지 않고 되어 있는 breaktypes webpack (types "는 tsconfig "는 "tsconfig "는 "로 설정되어 있습니다)도 Import를 시도합니다.설정을 Import 했을 때, 왜 완전히 랜덤한 Web 팩 타입이 디렉토리에 표시되기 시작했는지 계속 궁금했습니다.
증분 빌드가 활성화되어 있고 일부 시간만 중단되는 경우(또는 이러한 유형을 삭제한 후 (현재로서는) 그대로 남아 있는 것처럼 보이는 경우) 이 기능은 훨씬 더 재미있습니다.
컴파일러에 "outDir" 추가: ".dist" 이 오류가 발생했을 때 tsconfig.json의 옵션이 기능했습니다.이 에러는 Visual Studio Code TypeScript 확장자에서만 출력됩니다.tsc 컴파일러가 아닌 webpack과 함께 ts-loader를 사용하기 때문에 outDir를 지정할 필요가 없었습니다.webpack 설정이 이를 제어하기 때문에 VS 코드 확장이 만족스러우면 좋습니다.
제 경우 실수로 dist directory의 클래스를 포함시켰기 때문입니다.
import {Entities} from "../../dist";
방금 이 선을 제거했고 이제 모든 것이 정상입니다.
틀렸다, , 틀렸다, 틀렸다, 틀렸다.Cannot write file 'xx\xxx.js' because it would overwrite input file
.
다음과 같은 것을 알 수 있습니다.
ifoutDir
지정되지 않았습니다. .ts 파일은 생성된 .ts 파일과 동일한 디렉토리로 출력됩니다.
예기치 않게 소스 파일을 덮어쓰지 않도록 컴파일러에 이 오류가 표시됩니다.
하다, 하다, 하다, 하다를 .outDir
"set "set "set" 입니다.noEmit: true
JavaScript 소스 코드와 같은 컴파일러 출력 파일을 내보내지 않도록 합니다.
아마도 문제의 근원은 같은 모듈을 생성하는 2개의 파일일 것입니다.같은 폴더에 같은 이름의 확장자가 다른2 개의 파일이 있는 경우, 이 에러가 발생합니다.
예:
\index.ts
\index.tsx
솔루션은 이러한 파일 이름 중 하나를 다른 이름으로 변경합니다.
이 문제에는 다양한 이유가 있을 수 있기 때문입니다!에러를 만났을 때의 경험을 공유하겠습니다!
이야기
★★★★★★★★★★★★★★★★★★★★★!두 개 요! 는요!src/index.ts
src/test/logToFile.directTest.ts
.
외 src/test/logToFile.directTest.ts
문제를 해결했다!각 해상도가 같은 파일에 쓰려고 했던 것 같습니다!
선언을 위한 설정은 다음과 같습니다.
{
"compilerOptions": {
"declaration": true,
"declarationDir": "./dist",
"module": "commonjs",
"noImplicitAny": true,
"lib": ["ESNext", "DOM"],
"outDir": "./dist",
"target": "es6",
"moduleResolution": "node",
"resolveJsonModule": true,
"esModuleInterop": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
그리고 모든 것이 올바르게 설정되었습니다!제가 제외된 것을 알 수 있습니다.dist
디렉토리로 이동합니다.그리고 올바르게 설정한다.outDir
필수 항목입니다(그렇지 않으면 오류가 발생할 수 있습니다).그리고 다른 답변은 모두 그 점을 언급하고 있습니다).
다른 저장소 및 패키지와 함께 구성을 사용하고 있는 것 이상입니다.그리고 난 아무 문제 없어!
마지막에는 이렇게 했어요.
import { Logger } from '../..';
내 수입이 틀렸어!
다음과 같이 해야 합니다.
import { Logger } from '..';
모듈을 자체 저장소로 이식하는 동안 Import를 변경하는 것을 잊었습니다!
그리고 내가 파일을 다시 첨부했어!그리고 테스트도 잘 되었고 모두 잘 작동했습니다!
그리고 그 이야기의 혜택을 얻기 위해서!
모든 합리적인 솔루션(또는 해야 할 일)이 존중되어도 문제가 해결되지 않는 경우!ts 파일 내에서 Import를 확인합니다!
Import는 루트(예를 들어)를 참조하고 자동으로 dist로 리다이렉트할 수 있습니다.그래서 .d.ts 파일!일반적으로 타이프 스크립트는 오류를 발생시킵니다!디렉토리 폴더에서는 눈에 띄기 때문에!하지만 그러지 않았어!그리고 그 실수를 저질렀어!
그리고 더 많은 이점을 가져다 주기 위해
오류 설명
간단히 말하면, 다음과 같습니다.
https://github.com/microsoft/TypeScript/issues/6046#issuecomment-210186647
즉, 입력 파일은 명령줄에서 전달되는 파일이거나 명령줄에서 전달되는 파일 중 하나에 종속된 파일입니다.
두 개가 같은 신고 파일에 매핑되면!그리고 그것은 그들이 같은 이름을 공유했을 때 일어날 수 있어요!아니면 신고서 파일 자체를 참조하세요!파일에서 가져왔습니다!잘못된 수입으로 (내 경우처럼)!아니면 그 디스트도 무시당하지 않아!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★!「 」를 dist
및 셋업을 합니다.outDir
이 명령어를 사용하여 입력 파일을 확인할 수 있다는 것은 매우 흥미롭습니다.
tsc --listFiles
문제가 있는 경우는, 리스트내에 선언 파일이 있습니다.
다양한 패키지가 다른 TypeScript 패키지에 대한 참조에 의존하는 꽤 큰 모노레포를 개발하는 동안 이러한 오류가 발생했습니다.을 주지 입니다만, 「VS 에는, 「 Code」vs 「Code」를 때, .tsconfig.json
filename을 클릭합니다.
위의 답변 중 일부는 오류 수를 줄이는 데 도움이 되었지만 VS Code TypeScript 서버를 재시작할 때까지 모든 오류가 마법처럼 사라졌습니다.
VS 코드:
Shift + + - Mac에서 명령 팔레트를 엽니다."TypeScript"를 입력하고 "TypeScript:TS 서버를 재기동합니다.누르다
운이 좋으면 수정 오류는 마법처럼 사라집니다.
저도 같은 문제가 있었어요.제 경우 이름이 같은 파일이 1개 모듈에 2개 있기 때문에 발생합니다.index.ts index.tsx.
그 중 하나의 이름을 바꾸었더니 문제가 해결되었습니다.
저도 같은 문제에 직면했고, 위의 해결책을 시도했습니다.난 아무도 안 통했어그런 다음 빌드 폴더를 삭제했습니다.lib와 build cmd를 다시 실행해 주세요.
tsc --build --explainFiles
d.ts에 되어 있는지 합니다.
예.
dist/index.d.ts
Imported via '..' from file 'mocks/mock-requests.ts'
는 제가 안 .'..'
https://www.typescriptlang.org/tsconfig#explainFiles 를 참조해 주세요.
도 같은 그 는 ★★★★★★★★★★★★★★★★★★★★★ 입니다.exclude
「 」를 지정했을 는, 「 」를 지정합니다.exclude
옵션에서는 출력 디렉토리도 추가해야 합니다.
는 이런 있었다."exclude": ["resources/js/**/*", "node_modules"]
디렉토리는 「Directory 」로 설정되어 있습니다.outDir:"./build"
.
" " " build
되었습니다.
exclude:["resources/js/**/*", "node_modules", "build"]
대부분의 경우 이 문제는 노드 2개로 하나의 프로젝트를 실행하려고 할 때 발생합니다.이 가설의 경우 런 빌드 후 "노드"라는 이름의 프로세스 수를 컴퓨터에서 검정할 수 있습니다.문제를 해결하기 위해 내가 한 일:
스텝 1
비교하다
node -v
그리고.
nvm -ls
, 사용중인 버전.터미널 설정에서 현재 노드 버전:
nvm use {neededVersion}
원칙적으로 nvm에서 불필요한 노드 버전을 삭제합니다(IDE가 노드의 일반 버전을 자동으로 결정하는 데 도움이 됩니다).
스텝 2
IDE 내의 현재 노드를 확인합니다.즉, WebStorm: Prefeakes -> Language & Frameworks -> Node.js 및 NPM | Typescript:노드 인터프리터 - 필요한 버전을 설정합니다.
Typescript 2.3.x로 업데이트하여 문제가 해결된 것 같습니다.
또한 Visual Studio 2017을 사용하는 것도 큰 발전이었다.두 가지 업데이트를 모두 수행하는 것이 좋습니다.
"declaration": true
filetsconfig.json에서 .지금은 신고서가 없어서 도움이 안 됐지만요.
에는 방금 요."module": "commonjs"
로로 합니다."module": "esnext"
그걸 고쳤죠
lerna 패키지 프로젝트 또는 모노레포 프로젝트에서는 다음과 같이 동작할 수 있습니다.
첫 번째, 당신의 프로젝트는 다음과 같습니다.
packages\
core\
tsconfig.json
package.json
common\
tsconfig.json
package.json
tsconfig.base.json
당신의 소포.json
...
"main": "./lib/index.js",
"types": "./lib/index.d.ts",
"files": [
"lib"
],
...
사용하시는 tsconfig.json
{
"extends": "../tsconfig.base.json",
"compilerOptions": {
"outDir": "./lib",
},
}
어떤 방법으로 변경하더라도tsconfig.json
not work(하지 않음)
이것이 저의 해결책입니다.
를 삭제하다outDir:"lib"
first를 사용합니다.rd lib /s /q
및를 실행합니다.tsc
될 거야, 잘 될 거예요.
큰 코드 또는 모노레포 내에서 작업하는 경우 편집기를 재시작하는 것만으로 충분하거나 vscode를 사용하여 타이프스크립트 언어 서버를 재시작하는 것으로 충분할 수 있습니다.
GitHub 문제에서 제시된 바와 같이 문제를 이해하는 가장 좋은 옵션은 traceResolution 플래그를 사용하여 tsc 명령을 실행하는 것입니다.
tsc --traceResolution
저 같은 경우에는 라이브러리와 앱을 동시에 개발해서...
라이브러리에서 가져온 파일을 앱에서 라이브러리로 이동하면 라이브러리에 있는 파일이 자신의 dist 폴더에서 파일을 가져옵니다.
웃긴 건...사실 리팩터링이 최고조에 달하고 있어요파일에 대한 올바른 참조가 유지되었습니다. : )
이 설정은 나에게 유효하다
"allowJs": true
allowJs
다른 답변의 옵션에서는 아마도 내 구성이 프로젝트에서 JavaScript 파일을 허용하지 않을 것이라는 생각이 들었습니다.
다 게 다 하는 거예요.outDir
여기서 사람들이 추천하는 그런 거로 이름을 바꾸면 끝이에요.
물론 보일러 플레이트 프로젝트였고 이 파일은 (TypeScript) 프로젝트 전체에서 유일한 JavaScript 파일이었습니다.
설정하다allowJS: true
되어 있지 않다outDir : true
일, 일, 일, 일, 일, 일.
언급URL : https://stackoverflow.com/questions/42609768/typescript-error-cannot-write-file-because-it-would-overwrite-input-file
'source' 카테고리의 다른 글
echo woocommerce 특정 제품 ID 재고 수량 (0) | 2023.02.26 |
---|---|
리액트 컴포넌트 내보내기가 작동하지 않는 이유는 무엇입니까? (0) | 2023.02.26 |
React Native - npx react-native run-ios가 프로젝트 초기화 후 작동하지 않음 (0) | 2023.02.26 |
제약 조건 이름으로 테이블 이름 가져오기 (0) | 2023.02.26 |
저장소 패턴 - "복잡한" 엔티티와 어떻게 연동되는가? (0) | 2023.02.26 |