React의 구성 요소 라이브러리 개발에서 라이브러리의 의존 관계를 지정해야 합니다
8435 단어 npmReactTypeScriptNode.js
나는 처음으로 React의 구성 요소 라이브러리를 개발했다.
이번에는 도서관 의존 관계로 조금 막혔을 때 조사한 내용을 주로 다룬다.
구성 요소 라이브러리 개발에 참고할 글
나는 아래의 문장을 참고했다.매우 알기 쉽다.
root
├ sample-app (動作確認用プロジェクト)
│ ├ src
│ │ └ index.js
│ └ package.json
└ palette-component (コンポーネントライブラリプロジェクト)
├ src
│ ├ canvas.tsx (ライブラリに含めるコンポーネント)
│ ├ palette.tsx (ライブラリに含めるコンポーネント)
│ └ index.tsx (コンポーネント参照用ファイル)
└ package.json
구성 요소 라이브러리 개발 중 막힌 점동작을 확인할 때, React가 오류로 화를 낸다
다음 순서대로 돌아가다가 갑자기 리액트가 실수를 해서 욕을 먹었어요.
Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.
useState
입니다.root
├ sample-app (動作確認用プロジェクト)
│ ├ src
│ │ └ index.js ((1)のreactを参照しながら、(2)のreactを参照しているCanvasコンポーネントとPaletteコンポーネントを呼び出す)
│ ├ node_modules
│ │ └ react (1)
│ └ package.json
└ palette-component (コンポーネントライブラリプロジェクト)
├ src
│ ├ canvas.tsx ((2)のreactを参照しながら、Canvasコンポーネントを提供する)
│ ├ palette.tsx ((2)のreactを参照しながら、Paletteコンポーネントを提供する)
│ └ index.tsx
├ node_modules
│ └ react (2)
└ package.json
Canvas
부품이든 Palette
부품이든 (1)의react를 참조하지 않으면 오류가 발생하여 정상적으로 작동할 수 없습니다.다음 기사를 참고하여 해결했습니다.
sample-app 프로젝트 인용 nodemodules
react
와react-dom
하npm link
에서 두드리기 명령,palette-component 프로젝트npm link react
에서 두드리기npm link react-dom
명령을 통해sample-app 프로젝트와palette-component 프로젝트가 참조하는React를 통일할 수 있다.yarn link
"명령을 사용하여 해결했다.구성 요소 라이브러리를 개발할 때 소프트웨어 패키지의 의존 관계에 대해 큰 의식이 없어 개발을 진행하고 있다.그래서 다음과 같은 상태다.
palette-component 프로젝트의 패키지입니다.json의dependencies에
react
와react-dom
함유package.json
"dependencies": {
"react": "^17.0.2",
"react-dom": "^17.0.2",
}
이런 상태에서 프로그램 라이브러리를 호출하는 항목은 다음과 같이 구성되어 있으며 프로그램 라이브러리를 사용하는 사람은 나와 같은 고통을 겪게 된다.some-app (ライブラリを呼び出すアプリ)
├ src
│ └ index.js ((1)のreactを参照しながら、(2)のreactを参照しているCanvasコンポーネントと、Paletteコンポーネントを呼び出す)
├ node_modules
│ ├ react(1)
│ └ simple-palette-component ((2)のreactを参照しながらCanvasコンポーネントとPaletteコンポーネントを提供するライブラリ)
│ └ node_modules
│ └ react(2)
└ package.json
이번 개발에서 오류가 발생했기 때문에 라이브러리처럼 다른 프로젝트 참조를 전제로 하는 상황에서 특히 의존 관계에 주의해야 한다는 것을 간혹 알아차릴 수 있다.이번 일은 많이 반성했어, 패키지.json이 정의할 수 있는 의존 관계의 정의에 대해 우리는 npm가 정식으로 정리한 내용을 다시 보기로 결정했다.
dependencies
의존관계가 있는 포장의 버전을 지정할 수 있을 것 같아요.
굵은 글씨로'개발에만 쓰이는 것은 여기에 두지 마세요'라고 적혀 있다.미안합니다.
devDependencies
개발에서만 사용하며 자신이 만든 모듈을 누가 사용했을 때 필요하지 않은 의존관계가 있는 프로그램 라이브러리 등을 기록하는 곳(테스트 도구 등)이다.
대상이 된 포장된 루트 폴더
npm link
나 npm install
를 두드리면 대체할 수 있다고 적혀 있다.그렇구나.peerDependencies
"이 모듈을 사용할 때, 전제는 이perDependencies의 프로그램 라이브러리 도구를 사용해야 한다."이런 뜻을 표시하기 위해서인 것 같습니다(어렵습니다··).
npm의 버전 행동도 달라진다. npm의 버전 3~6에서perDependencies는 자동으로 설치되지 않는 규격이지만 npm의 버전 7부터 자동으로 설치되는 규격으로 바뀐 것 같다.
perDependencies에서 지정한 프로그램 라이브러리와 도구의 버전에 대한 추천은 일정한 폭이 있습니다.
포장을 공개하지 않으면 인상에 잘 쓰이지 않는다.
(기타는
peerDependenciesMeta
, optionalDependencies
등등...이번엔 얘기 안 할게...)React의 구성 요소 라이브러리 의존 관계는 어떻게 정의해야 합니까
이번 경우엔 의존 관계를 어떻게 풀어야 좋을까? 조금 고민해 보기로 했다.
react
또는 react-dom
는 설치 대상의 주 항목이 참조하는 node입니다.modules 안에 있는 걸 참조하고 싶어요.useState
를 사용하기 때문에 React의ver를 사용합니다.16.80 이후react
react-dom
"devDependencies": {
"react": "^17.0.2",
"react-dom": "^17.0.2",
}
"peerDependencies": {
"react": ">=16.8.0",
"react-dom": ">=16.8.0",
}
(사실 유명한 구성 요소 라이브러리가 왜 존재하는지 참고하고 자체 제작한 구성 요소 라이브러리의 패키지.json이 어떻게 존재해야 하는지를 생각했을 뿐이다.)
총결산
Reference
이 문제에 관하여(React의 구성 요소 라이브러리 개발에서 라이브러리의 의존 관계를 지정해야 합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/daichihasegawa0923/items/8105cad1af5d6da3eae5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)