npm (енгл.Node Package Manager) је менаџер пакета за ЈаваСкрипт програмски језик. Он је такође подразумевани менаџер пакета за ЈаваСкрипт радно окружење Node.js. Састоји се од конзоле, која се још назива npm и онлајн базе података јавних и плаћених приватних пакета, који се називају npm регистри. Овим регистрима се приступа преко клијентске конзоле, док се доступни пакети могу претраживати на npm вебсајту. Менаџером пакета и регистрима управља компанија npm (енгл.npm, Inc.)
Историјат
npm је у потпуности написан у ЈаваСкрипту и развио га је Ајзек Шлутер због тога што је сматрао да се модулирање пакета до тад "грозно" обављало и проналазећи недостатке у сличним пројектима као што су PEAR (PHP) и CPAN (Перл).
Опис
npm је садржан и препоручен у Node.js инсталационом програму.[3] npm се састоји од клијентске конзоле која се користи за интеракцију са удаљеним регистрима. Конзола омогућава корисницима коришћење и дистрибуцију ЈаваСкрипт модула који су доступни у регистру.[4] Пакети су у регистру у CommonJS формату и садрже датотеку са метаподацима у JSON формату.[5] Преко 477.000 пакета је тренутно доступно у главном npm регистру.[6] Регистар не поседује механизам за проверу уноса, што значи да доступни пакети могу бити лошег квалитета, несигурни и малициозни.[5] Уместо тога, npm се ослања на пријаве корисника на основу којих уклањају пакете који крше политику регистра тиме што су несигурни, малициозни или слабог квалитета.[7] npm нуди статистику која садржи број преузимања као и број зависних пакета како би помогао програмерима да оцене квалитет пакета.[8]
У марту 2016. године, npm је дошао у жижу медијске пажње[9] након што је пакет под називом left-pad, од кога је зависио велики број популарних ЈаваСкрипт пакета, повучен из регистра као резултат расправе.[10] Иако је пакет поново објављен након 3 сата[11] учињена је велика штета, што је довело до тога да npm промени своју политику која се тиче повлачења пакета како би предупредио сличне догађаје у будућности.[12]
Коришћење
npm може да управља пакетима који су локалне зависности на одређеном пројекту, као и глобално инсталираних ЈаваСкрипт алата.[13] Када се користи као менаџер зависности на локалном пројекту, npm може да инсталира, помоћу само једне команде, све зависности пројекта помоћу package.json фајла.[14] У овом фајлу свака зависност може да специфицира низ валидних верзија користећи семантички верзионисану шему, која омогућава програмерима да аутоматски ажурирају своје пакете а да притом избегну непожељне промене које доводе пуцања кода.[15] npm такође нуди алате за верзионисање који омогућавају програмерима да означе своје пакете одређеном ознаком верзије.[16]
Алтернативе
Постоји неколико алтернатива npm-у отвореног кода за инсталирање модуларног ЈаваСкрипт кода, као што су ied, pnpm, npm-install, npmd, и Yarn, од којих овај последњи развијен од стране Фејсбука и представљен у октобру 2016. године.[17] Сви су они компатибилни са јавним npm регистром кога подразумевано користе, али корисницима нуде другачије искуство са клијентском конзолом, које се обично огледа у побољшању перформанси и детерминистичким алгоритмима у односу на друге npm клијенте.[18]