TypeScript와 피어 종속성을 사용하는 방법에 대한 팁

2270 단어 npmtypescript
나는 최근에 이 문제에 직면했고 내가 저지른 단순한 실수를 깨달았을 때 꽤 어리석은 느낌이 들었습니다. 그래서 다른 사람의 시간을 절약할 수 있기를 바라며 공유하겠습니다...

기본 애플리케이션에서도 사용되는 종속성을 사용하는 NPM 패키지를 개발할 때 이를 피어 종속성으로 나열하는 것을 고려할 수 있습니다.

React를 "종속성"에서 "peerDependencies"로 이동하는 이 예를 살펴보십시오.

-  "dependencies": {
-    "react": "^16.8.4 || ^17.0.0"
-  },
   "devDependencies": {
     "@docusaurus/theme-classic": "^2.0.1",
     "@types/react": "^18.0.17"
+  },
+  "peerDependencies": {
+    "react": "^16.8.4 || ^17.0.0"
   }


React는 이제 피어 종속성이므로 기본 애플리케이션이 자체 종속성에 나열해야 합니다. 또한 TypeScript의 문제 없이 이 패키지를 계속 개발할 수 있습니다(이유를 알 수 있습니까?).

이제 다른 패키지인 @docusaurus/theme-classic 에 주목하십시오. 나는 이것도 피어 종속성으로 만들고 싶었기 때문에 그렇게 했습니다.

   "devDependencies": {
-    "@docusaurus/theme-classic": "^2.0.1",
     "@types/react": "^18.0.17"
   },
   "peerDependencies": {
+    "@docusaurus/theme-classic": "^2.0.1",
     "react": "^16.8.4 || ^17.0.0"
   }
 }


하지만 이렇게 변경한 후 TypeScript는 만족스럽지 않았습니다. 😔 해당 모듈에서 가져오기를 시도했을 때 일반적인 "모듈 또는 해당 유형 선언을 찾을 수 없습니다"오류가 발생했습니다. 동료 종속성을 이해하려고 머리를 긁적이며 꽤 오랜 시간을 보냈습니다. 패키지 관리자 CLI가 피어 종속성을 자동으로 설치하지 않는다는 것을 알고 있었지만 React와 같은 다른 패키지는 작동하는 반면 이 패키지는 작동하지 않는 이유를 알 수 없었습니다.
@docusaurus/theme-classic 패키지는 자체 유형 선언을 제공하므로 피어 종속성으로 이동하면 해당 유형이 모두 제거됩니다.

이 문제를 해결하기 위해 내가 찾은 가장 간단한 해결책은 해당 종속성을 "devDependencies"에 복제하는 것입니다. 이렇게 하면 패키지를 개발하는 동안 로컬로 설치되고 기본 응용 프로그램에서 사용할 때 피어 종속성으로 상태를 유지합니다.

   "devDependencies": {
+    "@docusaurus/theme-classic": "^2.0.1",
     "@types/react": "^18.0.17"
   },
   "peerDependencies": {


나는 또한 install-peers 패키지로 플레이를 시도했습니다. 이 패키지는 모든 피어 종속성을 개발 종속성으로 설치한다고 주장하지만 그다지 성공하지 못했습니다.

이 문제에 대한 자신만의 해결책이 있다면 듣고 싶습니다!

좋은 웹페이지 즐겨찾기