"수출"을 패키지로 어떻게 사용할 수 있나요.json은 nested submodules와 TypeScript?
Node.js/의 new-ish 기능을 활용하여 다음 작업을 수행하고자 합니다:
"exports": {
".": "./dist/index.js",
"./foo": "./dist/path/to/foo.js"
}
사용자는 다음을 수행할 수 있습니다:
import { foo } from 'my-package/foo';
TypeScript 4.5가 입력되어야 하는데 작동하지 않는 것 같다. 저는 TS 4.5.2를 사용하여 간단한 패키지를 만들고 있으며, TS 4.5.2를 사용하는 프로젝트에서 그 패키지를 소비하고 있습니다. 나는 다른 사람들을 살펴보았지만 그 문제와 그것이 오늘 작동되어야 하는지에 대한 합의점을 찾을 수 없는 것 같다.
나는 여전히 좀 더 자세한 구문을 사용하여 가져올 수 있다:
import { foo } from 'my-package/dist/path/to/foo.js';
수출을 위한 객체 표기도 시도해 보았지만 소용이 없었습니다:
"exports": {
".": { "require": "./dist/index.js", "import": "./dist/index.js" },
"./foo": { "require": "./dist/path/to/foo.js", "import": "./dist/path/to/foo.js" }
}
이 기능은 오늘 TypeScript 프로젝트에서 사용할 준비가 되었나요? 만약 그렇다면, 내가 놓치고 있는 게 뭐지? tsconfig에 대한 세부 사항은 소스 프로젝트와 소비 프로젝트 모두에 유용할 것입니다. TS 컴파일러는 또는 필드(나는 확실히 TS 4.5.2를 사용하고 있다)에 대해 불만을 제기한다.
어떤 오류가 발생하는지, 또는 어떤 다른 방식으로 TypeScript가 당신에게 효과가 없는 것처럼 보이는지 알지 못한 채(왜 그렇게 중요한 정보를 공유하고 싶어하지 않는지 모르겠다), 나는 당신의 섹션에 유형 정보가 누락되어 있는 것처럼 보인다. 일반적으로 .d.ts 파일이 해당 .js 파일 옆에 있는 경우 내보내기 섹션은 다음과 같습니다:
"exports": {
".": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
},
"./foo": {
"types": "./dist/path/to/foo.d.ts",
"default": "./dist/path/to/foo.js"
}
}
Pipefy에서 만든 디자인 시스템 패키지에 중첩 폴더를 사용하려고 했는데, 심층적인 연구 끝에 사용 방법을 찾았습니다.
패키지는 React 구성요소를 내보내고, 우리는 이와 같이 이들을 가져오기 위해 사용한다
나중에 , , , , 등과 같은 토큰을 디자인 시스템 라이브러리에 추가했지만 인덱스에서 모든 것을 가져오는 것은 원하지 않으며 생산적이지 않습니다.
철저한 조사 끝에 TypeScript를 사용하여 중첩 폴더를 내보내는 방법을 찾았습니다. 나의 목적은 이런 토큰을 사용하는 것이다
이렇게 TypeScript lib을 사용하려면 파일 내부를 사용해야 합니다.
여기서 이렇게 써요
"typesVersions": {
"*": {
"index": [
"lib/components/index.d.ts"
],
"tokens": [
"lib/tokens/index.d.ts"
]
}
},
나한테는 정말 매력적으로 통했어, 너한테도 통할 거야!
TypeScript는 널리 퍼지지 않고 (또는 )를 사용하는 경우에만 내보내기 맵을 존중합니다. (기본값은 와 동일한 값으로 설정되어 있지만 이에 대한 설명서를 찾기가 어렵습니까?
업데이트: TypeScript 5에는 내보내기 맵도 존중하는 옵션도 있습니다. 이 둘의 차이점은 다음과 같다:
- 가져오기의 상대 경로에서 파일 확장명을 필요로 하지 않음
- 내보내기 맵에서 내보내기 조건과 일치하지만 일치하지는 않습니다(TSConfig 참조에는 아직 문서화되어 있지 않음)...TypeScript 팀에서 확인한 문제 스레드를 아직 찾지 못했습니다.)
참조: 및
많은 TS 라이브러리(Microsoft 자체 라이브러리 포함)에서 파일 확장명이 명시되지 않은 상대적인 가져오기와 같은 문제로 인해 현재 오류가 발생했습니다.
Node.js는 v12.7.0(2019년 7월)부터 지원됩니다
제가 이 질문을 했을 때(2021년 12월), NodeJS는 거의 2.5년 동안 이 분야를 지원해 왔습니다. 타이프스크립트가 이를 뒷받침한다고 보는 것이 타당해 보였다.
당시 최신 버전의 타입스크립트(4.5)는 이 필드를 지원하지 않았다.
이는 수출을 지원하겠다고 해서 특히 혼란스러웠다.
활자 스크립트 4.7 (2022년 6월) 최종적으로 수출 지원
를 사용하는 것은 해결책이 아닙니다
몇몇 사람들은 이것을 사용할 것을 제안했지만 이것은 TypeScript에만 특화된 완전히 별개의 기능이다. 의 필드는 노드의 기능이므로 npm 모듈과 함께 작동해야 합니다.
따라서 Typcript 프로젝트가 있고 패키지를 사용하는 패키지를 가져올 수 있는 경우.json "exports"에서는 다음 작업을 수행해야 합니다:
- TypeScript 프로젝트가 TS v4.7 이상을 사용하고 있어야 합니다
- 또는 를 사용해야 합니다.
'개발하자' 카테고리의 다른 글
FastApi에서 Asyncio 하위 프로세스를 실행하면 구현되지 않은 오류가 발생함 (0) | 2023.11.08 |
---|---|
socket.io 을 fastapi 앱에 마운트하고 연결된 모든 클라이언트에 브로드캐스트를 전송하는 방법 (0) | 2023.11.07 |
이 Kubernetes 배포 환경에서 ErrrImagePull 오류가 발생하는 이유는 무엇입니까? (0) | 2023.11.06 |
스벨테 입력 번호 유효성 검사. 글자 입력을 막을 수 없다 (0) | 2023.11.06 |
펄럭임: 자동 완성 제안은 이름 대신 '객체의 인스턴스'를 표시합니다 (0) | 2023.11.05 |