ð npmã¯ããå€ãïŒpnpmãéçºäœéšãçéã«ããçç±
ã¯ããã«
npm install
ãå®è¡ããŠãã³ãŒããŒãæ·¹ãã«ãã...ããããªçµéšã¯ãããŸãããïŒ ãããžã§ã¯ãã倧ãããªãã«ã€ããŠè¥å€§åãã node_modules
ãã©ã«ããããã€çµãããåãããªãããã±ãŒãžã®ã€ã³ã¹ããŒã«æéã«ãå€ãã®éçºè
ãæ©ãŸãããŠããŸãã
ãã®èšäºã§ã¯ããããªæ©ã¿ã解決ãããããããªã次äžä»£ã®ããã±ãŒãžãããŒãžã£ãŒ pnpm
ã«ã€ããŠãnpm
ãšã®éããæ¯èŒããªããããã®æ žå¿çãªä»çµã¿ãšå
·äœçãªã¡ãªããã培åºçã«è§£èª¬ããŸãã
ãã®èšäºãèªã¿çµããé ã«ã¯ããã£ãšããªãã®ãããžã§ã¯ãã«ã pnpm
ãå°å
¥ããããªãã¯ãã§ãïŒ
ããããããã±ãŒãžãããŒãžã£ãŒãšã¯ïŒ
æ¬é¡ã«å
¥ãåã«ãnpm
ã pnpm
ãå±ãããããã±ãŒãžãããŒãžã£ãŒãã®åœ¹å²ãç°¡åã«ããããããŸãããã
Node.jsç°å¢ã«ãããããã±ãŒãžãããŒãžã£ãŒã¯ãäž»ã«ä»¥äžã®ãããªåœ¹å²ãæ ã£ãŠããŸãã
-
äŸåé¢ä¿ã®ç®¡ç: ãããžã§ã¯ããå¿
èŠãšããã©ã€ãã©ãªïŒããã±ãŒãžïŒã
package.json
ãã¡ã€ã«ã«åºã¥ããèªåã§ã€ã³ã¹ããŒã«ã»æŽæ°ã»åé€ããŸãã - ããã±ãŒãžã®ã€ã³ã¹ããŒã«: äžçäžã®éçºè ãå ¬éããŠãã䟿å©ãªããã±ãŒãžããç°¡åãªã³ãã³ãã§èªåã®ãããžã§ã¯ãã«å°å ¥ã§ããŸãã
-
ã¹ã¯ãªããã®å®è¡:
npm run dev
ã®ããã«ãpackage.json
ã«å®çŸ©ããã³ãã³ããå®è¡ã§ããŸãã
npm
(Node Package Manager) ã¯ãNode.jsãã€ã³ã¹ããŒã«ãããšããã©ã«ãã§ä»å±ããŠãããæãã¹ã¿ã³ããŒãã§åºã䜿ãããŠããããã±ãŒãžãããŒãžã£ãŒã§ãã
npm
ã¯é
ããŠéãã®ãïŒ ð€ node_modules
ã®èª²é¡
ãªã npm
ã¯éåžžã«äŸ¿å©ã§ãããç¹ã«å€§èŠæš¡ãªãããžã§ã¯ãã«ãããŠãããã©ãŒãã³ã¹ããã£ã¹ã¯å®¹éã®é¢ã§ããã€ãã®èª²é¡ãæ±ããŠããŸãããã®åå ã¯ãnode_modules
ãã©ã«ãã®ç®¡çæ¹æ³ã«ãããŸãã
npm
v3以éã¯ãäŸåé¢ä¿ãããã©ãããªæ§é ãã§ç®¡çããããã«ãªããŸãããããã¯ãäŸåããã±ãŒãžãããã«äŸåããŠããããã±ãŒãžïŒå«äŸåïŒããå¯èœãªéã node_modules
ã®ãããã¬ãã«ã«é
眮ããä»çµã¿ã§ãã
my-project/
âââ node_modules/
âââ express (ãããžã§ã¯ãã®çŽæ¥ã®äŸå)
âââ chalk (expressãäŸåããŠãã)
âââ ... (ä»ã®å€ãã®äŸåããã±ãŒãžãããã«äžŠã¶)
ãã®ãã©ããæ§é ã«ã¯ã¡ãªããããããŸãããäž»ã«3ã€ã®èª²é¡ãçãã§ããŸãã
課é¡1: ãã£ã¹ã¯å®¹éã®å§è¿« ðŸ
æå€§ã®èª²é¡ã¯ããã£ã¹ã¯ã¹ããŒã¹ã®éå¹çæ§ã§ãã
äŸãã°ãããªãã®PCã«ãããžã§ã¯ãAãšãããžã§ã¯ãBããããäž¡æ¹ã react@18.0.0
ã䜿ã£ãŠãããšããŸããnpm
ã¯ãããããã®ãããžã§ã¯ãã® node_modules
ãã©ã«ãã«ãå
šãåã react@18.0.0
ã®ãã¡ã€ã«ãäžžããšã³ããŒããŸãã
PCäžã«åãããŒãžã§ã³ã®ããã±ãŒãžãããã€ãéè€ããŠååšããããšã«ãªãããããžã§ã¯ããå¢ããã»ã©ãã£ã¹ã¯å®¹éã倧ããå§è¿«ããŠããŸããŸãã
課é¡2: ã€ã³ã¹ããŒã«é床ã®é ã ð¢
ããã±ãŒãžã®ã€ã³ã¹ããŒã«æã«ã¯ã倧éã®ãã¡ã€ã«ããã£ã¹ã¯ã«æžã蟌ãå¿ èŠããããŸããäŸåé¢ä¿ãè€éãªã¢ãã³ãªããã³ããšã³ããããžã§ã¯ãã§ã¯ããã®ãã¡ã€ã«æ°ã¯æ°äžãæ°åäžã«ãã®ãŒããŸãã
ãã£ãã·ã¥æ©èœã¯ãããã®ã®ãäŸåé¢ä¿ã®è§£æ±ºããã¡ã€ã«ã®ã³ããŒã«æéãããããç¹ã«2åç®ä»¥éã®ã€ã³ã¹ããŒã«ã§ãåŸ ããããããšãå€ãã§ãã
課é¡3: 幜éäŸåïŒãã¡ã³ãã äŸåïŒã®ãªã¹ã¯ ð»
ããã¯ãnpm
ã®ãã©ããæ§é ãçã¿åºãæœåšçã«å±éºãªåé¡ã§ãã
äŸãã°ãããªãã®ãããžã§ã¯ãã A
ãšããããã±ãŒãžã«ã®ã¿äŸåããŠãããšããŸãããã®ããã±ãŒãž A
ããå
éšã§ B
ãšããããã±ãŒãžã«äŸåããŠããå Žåãnpm
㯠B
ã node_modules
ã®ãããã¬ãã«ã«é
眮ããŸãã
ãã®çµæãããªã㯠package.json
ã« B
ã远å ããŠããªãã«ãããããããã³ãŒãå
ã§ import B from 'B'
ã®ããã« B
ãçŽæ¥åŒã³åºããŠããŸããŸããããã**幜éäŸåïŒPhantom DependencyïŒ**ã§ãã
äžèŠäŸ¿å©ã«æãããããããŸããããããå°æ¥ A
ãã¢ããããŒãã㊠B
ã䜿ããªããªã£ãå Žåãããªãã®ã³ãŒãã¯çªç¶åããªããªããŸããæå³ããäŸåããŠããŸãããšã§ããããžã§ã¯ãã®ä¿¡é Œæ§ãä¿å®æ§ãæãªããããªã¹ã¯ãããã®ã§ãã
pnpm
ç»å ŽïŒâš ãã®é«éåãšå¹çåã®ç§å¯
æäžäž» ããã§ç»å Žããã®ã pnpm
(performant npm) ã§ããpnpm
ã¯ãnpm
ãšã®äºææ§ãä¿ã¡ãªãããåè¿°ãã課é¡ãæ ¹æ¬ãã解決ããããã«èšèšãããŸããã
ãã®ç§å¯ã¯ã**ãã³ã³ãã³ãã¢ãã¬ã¹å¯èœãªã¹ãã¢ããšãã·ã³ããªãã¯ãªã³ã¯ã**ãšãã2ã€ã®æ žå¿çãªæè¡ã«ãããŸãã
ç§å¯1: ã³ã³ãã³ãã¢ãã¬ã¹å¯èœãªã°ããŒãã«ã¹ãã¢
pnpm
ã¯ãããŠã³ããŒãããããã±ãŒãžããããžã§ã¯ãã® node_modules
ã«çŽæ¥ã³ããŒããŸããã代ããã«ãPCäžã®åäžã®å ŽæïŒé垞㯠~/.pnpm-store
ïŒã«ããã¹ãŠã®ããã±ãŒãžãéäžç®¡çããŸãããããã°ããŒãã«ã¹ãã¢ãšåŒã³ãŸãã
ãã®ã¹ãã¢ã¯ãã³ã³ãã³ãã¢ãã¬ã¹å¯èœãã§ãããããã±ãŒãžã®ããŒãžã§ã³ã ãã§ãªãããã®ãã¡ã€ã«å 容ïŒã³ã³ãã³ãïŒã«åºã¥ããŠäžæã«èå¥ã»ä¿åãããŸãã
ããã«ãããã©ã®ãããžã§ã¯ãã§äœ¿ãããŠããããšãåãããŒãžã§ã³ã®ããã±ãŒãžã¯PCäžã«ãã 1ã€ããååšããªãç¶æ ãå®çŸããŸãããã£ã¹ã¯å®¹éã®ç¡é§ãäžæ°ã«è§£æ¶ãããã®ã§ãã
ç§å¯2: ã·ã³ããªãã¯ãªã³ã¯ã«ããéæ³
ã§ã¯ããããžã§ã¯ãã¯ã©ããã£ãŠããã±ãŒãžãå©çšããã®ã§ããããïŒããã§ã·ã³ããªãã¯ãªã³ã¯ãç»å ŽããŸããã·ã³ããªãã¯ãªã³ã¯ãšã¯ããã¡ã€ã«ããã©ã«ããžã®ãã·ã§ãŒãã«ãããã®ãããªãã®ã§ãã
pnpm
ã¯ããããžã§ã¯ãã® node_modules
ã«ãããã±ãŒãžã®å®äœã§ã¯ãªããã°ããŒãã«ã¹ãã¢ã«ããå®äœãžã®ã·ã³ããªãã¯ãªã³ã¯ãäœæããŸãã
my-project/
âââ node_modules/
âââ .pnpm/ <-- äŸåé¢ä¿ã®å®äœãžã®ãªã³ã¯ãããã«éçŽããã
â âââ express@4.17.1/
â â âââ node_modules/
â â âââ express -> (ã¹ãã¢ãžã®ãªã³ã¯)
â â âââ chalk -> (ã¹ãã¢å
ã®chalkãžã®ãªã³ã¯)
â âââ chalk@5.0.0/
â âââ node_modules/
â âââ chalk -> (ã¹ãã¢ãžã®ãªã³ã¯)
âââ express -> ./.pnpm/express@4.17.1/node_modules/express (ãããžã§ã¯ãããèŠãããªã³ã¯)
â»äžèšã¯æ§é ãç°¡ç¥åããã€ã¡ãŒãžã§ãã
ãªã³ã¯ãäœæããã ããªã®ã§ããã¡ã€ã«ã®ã³ããŒã«æ¯ã¹ãŠåŠçãå§åçã«é«éã§ããæ¢ã«ã¹ãã¢ã«å¿
èŠãªããã±ãŒãžãããã°ãããŠã³ããŒãããäžèŠã«ãªããŸããããã pnpm
ã®ã€ã³ã¹ããŒã«ãçéã§ããçç±ã§ãã
ãã¡ã³ãã äŸåããã®è§£æŸ
pnpm
ã® node_modules
æ§é ã¯ãnpm
ãšéã£ãŠãã©ããã§ã¯ãããŸããããããžã§ã¯ãã® node_modules
ã®ãããã¬ãã«ã«ã¯ãpackage.json
ã«çŽæ¥èšè¿°ãããäŸåé¢ä¿ãžã®ã·ã³ããªãã¯ãªã³ã¯ããé
眮ãããŸããã
ããã«ããã幜éäŸåãæ§é çã«çºçããªããªããŸããã³ãŒãå ã§å©çšã§ããã®ã¯ãããªããæç¢ºã«äŸåé¢ä¿ãšããŠè¿œå ããããã±ãŒãžã®ã¿ã§ããããã«ãããæå³ããªãäŸåãé²ããããä¿¡é Œæ§ã®é«ãå ç¢ãªãããžã§ã¯ããæ§ç¯ã§ããŸãã
äžç®ã§ãããïŒnpm vs pnpm æ¯èŒè¡š
ãããŸã§ã®å 容ã衚ã§ãŸãšããŠã¿ãŸãããã
æ©èœ | npm (Node Package Manager) | pnpm (performant npm) |
---|---|---|
node_modules æ§é |
ãã©ããæ§é | ã·ã³ããªãã¯ãªã³ã¯ãå©çšããéãã©ããæ§é |
ãã£ã¹ã¯äœ¿çšé | ðŽ ãããžã§ã¯ãããšã«ã³ããŒããããå€ã | ð¢ ã°ããŒãã«ã¹ãã¢ã§å ±æããããéåžžã«å°ãªã |
ã€ã³ã¹ããŒã«é床 | ð¢ æ¯èŒçé ã | ð éåžžã«é«éïŒç¹ã«2åç®ä»¥éïŒ |
äŸåé¢ä¿ã®å³æ Œã | â ïž å¹œéäŸåïŒãã¡ã³ãã äŸåïŒã®ãªã¹ã¯ãã | â æ§é çã«å¹œéäŸåãé²ããä¿¡é Œæ§ãé«ã |
ã¢ãã¬ãå¯Ÿå¿ | åºæ¬çãªã¯ãŒã¯ã¹ããŒã¹æ©èœã®ã¿ | éåžžã«åŒ·åãªã¯ãŒã¯ã¹ããŒã¹æ©èœããã€ãã£ãã§ãµããŒã |
ãããpnpmãå§ãããïŒð åºæ¬çãªäœ¿ãæ¹
pnpm
ã®é
åãäŒãã£ãã§ããããïŒ å°å
¥ã¯ãšãŠãç°¡åã§ãä» npm
ã䜿ã£ãŠããæ¹ãªãããã«ä¹ãæããããŸãã
ã€ã³ã¹ããŒã«æ¹æ³
npm
ã䜿ã£ãŠã°ããŒãã«ã«ã€ã³ã¹ããŒã«ããã®ãäžçªç°¡åã§ãã
npm install -g pnpm
ããã§ pnpm
ã³ãã³ãã䜿ããããã«ãªããŸãã
ãã䜿ãã³ãã³ã察æ¯è¡š
ã»ãšãã©ã® npm
ã³ãã³ãã¯ãpnpm
ã«çœ®ãæããã ãã§åãããã«åäœããŸãã
ããããããš | npm ã³ãã³ã | pnpm ã³ãã³ã |
---|---|---|
äŸåé¢ä¿ãã€ã³ã¹ããŒã« | npm install |
pnpm install (or pnpm i ) |
ããã±ãŒãžã远å | npm install <pkg> |
pnpm add <pkg> |
éçºçšã®ããã±ãŒãžã远å | npm install <pkg> --save-dev |
pnpm add <pkg> --save-dev (or -D ) |
ããã±ãŒãžãåé€ | npm uninstall <pkg> |
pnpm remove <pkg> (or pnpm rm ) |
ã¹ã¯ãªãããå®è¡ | npm run <script> |
pnpm <script> |
ããã±ãŒãžãäžæçã«å®è¡ | npx <pkg> |
pnpm dlx <pkg> |
pnpm run <script>
ã pnpm <script>
ã®ããã« run
ãçç¥ããŠæžããã®ã¯ãå°å³ãªããå¬ãããã€ã³ãã§ããã
pnpmã«ããã¡ãªããã¯ããïŒç¥ã£ãŠããããæ³šæç¹
pnpm
ã¯çŽ æŽãããããŒã«ã§ãããå
¬å¹³ãæãããã«ããã€ãã®æ³šæç¹ã«ãè§ŠããŠãããŸãã
-
ãšã³ã·ã¹ãã ã®æç床:
npm
ã¯é·å¹Žã®æŽå²ãšå§åçãªãŠãŒã¶ãŒæ°ãèªããŸããpnpm
ã®ãšã³ã·ã¹ãã ãæ¥éã«æé·ããŠããŸãããéåžžã«çšãªã±ãŒã¹ã§ãç¹å®ã®ããŒã«ãpnpm
ã®ã·ã³ããªãã¯ãªã³ã¯æ§é ãæ£ããè§£éã§ããªãå¯èœæ§ã¯ãŒãã§ã¯ãããŸãããïŒãã ããçŸåšã§ã¯ã»ãšãã©ã®äž»èŠãªããŒã«ãã©ã€ãã©ãªãå¯Ÿå¿æžã¿ã§ãïŒ -
ã·ã³ããªãã¯ãªã³ã¯ã®å¶çŽ:
pnpm
ã®æ žå¿ã§ããã·ã³ããªãã¯ãªã³ã¯ã¯ãäžéšã®å€ãããŒã«ãç¹æ®ãªç°å¢ïŒäŸ: ç¹å®ã®ä»®æ³åç°å¢ããã¡ã€ã«ã·ã¹ãã ïŒã§ã¯ãäºæãã¬æåã瀺ãããšãçšã«ãããŸãã
ãšã¯ããããããã®ãã¡ãªããã¯ã»ãšãã©ã®éçºè
ã«ãšã£ãŠã¯åé¡ã«ãªãããpnpm
ãããããé床ã»å¹çã»ä¿¡é Œæ§ãšãã倧ããªã¡ãªãããäžåãããšãã»ãšãã©ã§ãã
ãŸãšãïŒpnpmã§å¿«é©ãªéçºäœéšãæã«å ¥ããã
ä»åã¯ãpnpm
ããªã npm
ãããé«éã§å¹ççãªã®ãããã®ä»çµã¿ãã解説ããŸããã
- npmã®èª²é¡: ãã£ã¹ã¯ã®ç¡é§é£ããé ãã€ã³ã¹ããŒã«ã幜éäŸåã®ãªã¹ã¯ã
- pnpmã®è§£æ±ºç: ã°ããŒãã«ã¹ãã¢ãšã·ã³ããªãã¯ãªã³ã¯ã«ããããã£ã¹ã¯äœ¿çšéãæ¿æžãããã€ã³ã¹ããŒã«ãçéåããäŸåé¢ä¿ã峿 Œã«ç®¡çããã
ããããªããæ¥ã
ã®éçºã§ npm install
ã®åŸ
ã¡æéã«ã¹ãã¬ã¹ãæããŠããããnode_modules
ã®ãµã€ãºã«é ãæ©ãŸããŠããããããªããpnpm
ã¯ãŸãã«æäžäž»ãšãªãã§ãããã
ç§»è¡ã¯ãšãŠãç°¡åã§ãããŸãã¯å人ã®å°ããªãããžã§ã¯ãããã§ããpnpm
ã®é©ãã¹ãéããšå¿«é©ããäœéšããŠã¿ãŠãã ããããã£ãšããã npm
ã«ã¯æ»ããªããªããŸããïŒ
åè / åç §
Discussion