Решавање ноде_модула помоћу Иарн Плуг'н'Плаи

Смањите време инсталирања на 70%. Питајте ме како! ?

Свако ко ме познаје може да потврди да сам дугогодишњи заљубљеник у ЈаваСцрипт и читав његов екосистем . Као Фронт-енд инжењер, менаџери пакета засновани на чворовима били су пресудан део мог скупа алата од 2013. године.

Прво сам користио Бовер, који је првенствено био усредсређен на фронт-енд свет. Затим, 2015. године, нажалост (у реду, не баш ) сам схватио да Бовер умире и да је НПМ, задати менаџер пакета за Ноде, такође био пут за фронт-енд. У почетку ми је било необично да користим НПМ за друге ствари осим за Ноде модуле, али навикао сам на идеју и неприметно мигрирао.

Коначно, само годину дана касније, Фацебоок нам је дао предиво, модерну и брзу алтернативу НПМ-у. Свидело ми се на први поглед! Али неке ствари су и даље биле проблематичне ...

Наслеђени проблеми у предиву

Поред брзине, Иарн је донео низ предности у поређењу са НПМ верзијом у то време, као што су датотеке закључавања, ванмрежни режим, мрежна отпорност, контролне суме и друге. Ипак, предиво је неке познате проблеме позајмио од НПМ-а:

ноде_модулес овде, тамо, свуда

За сваки пројекат на вашој машини који користи НПМ или предиво node_modulesкреира се фасцикла. Није битно да ли 10 пројеката користи потпуно исту верзију датог модула, он ће се копирати изнова у сваку node_modulesфасциклу ових пројеката.

Стварање нове фасцикле ноде_модулес траје заиста дуго

Чак и када је направио велики помак у погледу брзине инсталације, предиво је било ограничено ограничењима ноде_модулес. Само стварање директоријума ноде_модулес траје до 70% времена потребног за покретање yarn install(са топлом кеш меморијом). Огромна количина датотека се креира на свакој инсталацији. Дакле, не кривите то за пређу.

Зависности нису додате у пацкаге.јсон

Ево сценарија за вас: Ваша апликација савршено ради у развоју, али се сруши у производњи. Након вишесатне истраге, коначно схватате да сте заборавили да додате зависност свом package.json. Да, може се догодити.

Спора резолуција модула током извођења

На време покретања апликације јако утиче начин на који Ноде решава зависности. Губи време на упите над системом датотека да би се открило одакле ће се решити дата зависност.

Пређа Плуг'н'Плаи у помоћ!

Све горе наведене проблеме тим Иарн је решио објављивањем функције Плуг'н'Плаи прошлог септембра.

Када омогућите ПнП, уместо да копирате сваку потребну датотеку из кеш меморије у node_modulesфасциклу, ево шта Иарн ради:

  1. Ствара једну датотеку са табелама статичке резолуције. Ове табеле ће садржати гомилу важних информација, као што су: пакети доступни у стаблу зависности, како су повезани између себе и своје локације на диску.
  2. Користи се посебан разрешивач који помаже Ноду да открије где је свака зависност инсталирана (у фолдеру кеш пређе). Ослани се искључиво на табеле резолуције које су претходно креиране. Како ове табеле садрже информације о целокупном стаблу зависности, поступак решавања ноде_модулес више неће морати пуно да врши statи readdirпозива током извођења , што значајно смањује време покретања апликације. А пошто Иарн зна све ваше зависности, жалиће се ако покушате да увезете модул који није присутан у вашем package.json:

Коришћење пређе Плуг'н'Плаи

Претварање пројекта у употребу ПнП-а једноставно је као 1-2. Само треба да додате installConfigодељак у свој package.json, са pnpкључем подешеним на true, попут овог:

{ "installConfig": { "pnp": true }}
Напомена: Треба вам Иарн в1.12 + да бисте користили Плуг'н'Плаи.

Након тога, само покрените yarn installи све у вашој node_modulesфасцикли биће избрисано. Од сада ће се свака зависност решавати директно из вруће кеш меморије предива.

Коришћење ПнП-а у новом Реацт пројекту са цреате-респонсе-апп

Ако користите цреате-респонсе-апп 2+, добра вест је да она одлично функционише са Иарн Плуг'н'Плаи! Само додајте --use-pnpопцију create-react-appкоманди и спремни сте:

npx create-react-app your-app-name --use-pnp

Могући проблеми

Како ништа није савршено на свету, ПнП може имати нових проблема када се користи у пројектима ослањајући се на прилагођену логику инсталирања. Ако су вам потребне додатне информације о овим потенцијалним новим издањима, детаљно објашњење можете пронаћи у овом раду.

Закључак

Плуг'н'Плаи решава неке заиста досадне проблеме у предиву. Поред тога, драматично побољшава кеширање зависности од ЦИ-ова, штеди време инсталације и омогућава нашим зградама да пређу на ствар: покретање тестова!

И то је то! Забавите се са предивом ПнП.