Přejít k navigační liště

Zdroják » JavaScript » JavaScript na serveru: moduly a npm

JavaScript na serveru: moduly a npm

Články JavaScript, Různé

V tomto díle se podrobněji seznámíme se správcem balíčků v Node.js. A povíme si také něco málo o práci s moduly a o souboru package.json, který je součástí každého projektu a výrazně vám usnadní práci.

Co jsou moduly

V tomto seriálu budu považovat pojmy modul či balíček za synonyma. Modul může být jak jednoduchý skript o 5 řádcích kódu, tak kompletní MVC framework či testovací nebo jiný nástroj.

Moduly můžeme rozdělit na dvě kategorie:

  • ty, které jsou dodávané jako součást Node.js a
  • ty, které jsou komunitní a instalují se podle potřeby.

Ty první instalovat nemusíte a jejich přehled najdete v oficiální API dokumentaci. Na Githubu navíc můžete procházet přímo jejich zdrojové kódy v JavaScriptu.

Ty druhé, komunitní, vytvořili ostatní programátoři a spravují se nejčastěji přes npm. O nich také bude řeč ve zbytku dnešního článku.

npm

npm je balíčkovací systém podobný Ruby gems. V Node.js balíčky (moduly) instalujete podobným způsobem jako např. programy v Linuxu přes nástroj APT. Nástroj npm není jediný správce balíčků pro Node.js, ale je zdaleka nejpoužívanější a je součástí základní instalace Node.js.

Všechny moduly je možné procházet přes webové rozhraní na npmjs.org. Kromě hlavního webu je dobré vědět o Node Toolbox, kde jsou moduly řazeny do mnoha kategorií a také o nástroji Nipster, kde je možné moduly procházet např. podle toho, jak jsou oblíbené na Githubu. Vedle zmíněných nástrojů můžete moduly hledat na wiki projektu (zde však ani zdaleka nejsou všechny moduly).

S npm se pracuje přes klasický příkazový řádek a všechny moduly se instalují jednoduchým příkazem npm install, takže chceme-li nainstalovat např. balíček moment pro práci s daty a s časem, nainstalujeme ho takto:

npm install moment

Instalace pak může vypadat v prostředí příkazového řádku takto:

Instalování Node Package Manageru

Pokud si otevřete adresář projektu, uvidíte, že byl vytvořen nový adresář node_modules. Zde se instalují všechny moduly, pokud je nechceme instalovat globálně do jednoho hlavního adresáře pro všechny projekty. V takovém případě je potřeba provádět instalaci s parametrem -g. 

Modul moment je poměrně vzácný v tom, že neobsahuje žádné závislosti na jiné balíčky. Mnohem častěji se skládají moduly z mnoha jiných modulů (proč programovat něco, co za mě udělal již dříve někdo jiný?). Zkusme globálně nainstalovat testovací framework Mocha takto:

Instalace testovacího frameworku Mocha

Zde vidíte, že se v tomto případě instalovalo mnoho jiných balíčků, na kterých framework Mocha závisí. Nástroj npm toho nabízí samozřejmě mnohem více, jak můžete vidět v dokumentaci projektu.

package.json

Soubor package.json by měl obsahovat každý projekt či modul. Obsahuje základní informace o projektu jako např. verzi Node.js, na které chcete projekt spouštět (např. populární cloud hosting Heroku umožňuje přesně specifikovat, na které verzi má projekt běžet, takže pokud vyvinete nějaký projekt nad konkrétní verzí Node.js, máte jistotu, že na stejné verzi poběží váš projekt i na ostrém serveru a upgrade na vyšší verzi třeba uděláte až po otestování na nové verzi Node.js).

Podívejme se např. na zkrácenou verzi souboru package.json z modulu socket.io:

{
  "name": "socket.io",
  "version": "0.9.10",
  "description": "Real-time apps made cross-browser & easy with a WebSocket-like API",
  "homepage": "http://socket.io",
  "author": {
    "name": "Guillermo Rauch",
    "email": "guillermo@learnboost.com"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/LearnBoost/socket.io.git"
  },
  "dependencies": {
    "socket.io-client": "0.9.10",
    "policyfile": "0.0.4",
    "redis": "0.7.2"
  },
  "devDependencies": {
    "expresso": "0.9.2",
    "should": "*",
    "benchmark": "0.2.2",
    "microtime": "0.1.3-1",
    "colors": "0.5.1"
  },
  "engines": {
    "node": ">= 0.4.0"
  }
}

Důležitá je zde především sekce dependencies, která obsahuje seznam balíčků, na kterých tento modul závisí včetně konkrétní verze. Pokud si projekt s tímto souborem stáhnete, pak se všechny moduly automaticky nainstalují, pokud zadáte příkaz npm install  (bez dalších parametrů). V takovém případě Node Package Manager hledá soubor package.json a všechny závislosti hned stáhne.

Sekce devDependences udává moduly, které se používají pro vývoj balíčku. Najdete zde např. testovací nástroje (expresso, should) či nástroje pro testování rychlosti (benchmark, microtime). Všimněte si, že balíček should nemá určenou přesnou verzi. Znamená to, že při instalaci si npm stáhne nejaktuálnější verzi. Kompletní přehled možností zápisu požadované verze v package.json je dostupný v dokumentaci balíčku semver, který npm interně využívá.

Poslední sekce englines udává, že modul musí být spuštěn na verzi Node.js větší než 0.4.

Jak najít správný balíček

V Node.js můžete instalovat přes 16 tisíc balíčků a každý den přibývají desítky nových. V tak velkém množství balíčků může být někdy problém najít ten pravý modul, pokud máme na výběr z mnoha modulů pro řešení konkrétního problému. Jak tedy vybrat ten správný modul?

Nejlepší je orientovat se podle tří ukazatelů na Githubu ke konkrétnímu modulu:

  1. Počet uživatelů, kteří modul sledují. Ty nejpoužívanější moduly jsou obvykle i nejsledovanější.
  2. Datum poslední úpravy (poslední commit). Záleží hodně na tom, co má modul řešit. Pokud chcete instalovat framework, který má poslední commit před měsícem, pak je lepší se porozhlédnout jinde. Naopak u modulu, který řeší nějaký jednodušší problém (např. převod řetězce na URL) nemusí být datum poslední aktualizace pro výběr rozhodující.
  3. Počet otevřených issues. Vypovídá o tom, jak je balíček chybový a jak často jsou chyby opravovány. Také je dobré se podívat na podíl otevřených a zavřených issues.

Co dále?

Od příštího dílu začneme již s vývojem konkrétní aplikace. Nainstalujeme si potřebné nástroje a první verzi naší aplikaci také pošleme do cloudu.

Komentáře

Subscribe
Upozornit na
guest
5 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
blizz

npm install -g LiveScript

Pavel Lang

Pár doplňujících informací:

  • Originální dokumentace package.json
  • Na nodejitsu je k dispozici package.json cheatsheet
  • npm také poskytuje jednoduchého průvodce na vytvoření package.json, stačí spustit npm init.
  • Pro specifikaci verzí závislostí je výhodné používat zápis "~1.2.3", který je ekvivalentní s ">=1.2.3 <1.3.0"
Michal Novák

„… pokud je nechceme instalovat globálně do jednoho hlavního adresáře pro všechny projekty. V takovém případě je potřeba provádět instalaci s parametrem -g.“

nejsem si jist, jestli chapu vetu spravne, ale nemelo by byt „pokud je chceme instalovat do hlavniho…. pouzijeme parametr -g“ ?

Martin Hassman

Jak se na to dívám, změna by měla být spíš v druhé větě a bude to správně: „V *opačném* případě je potřeba provádět instalaci s parametrem -g.“ Soudím dle dokumentace, kde stojí, že globální přepínač *zapne* použití globálního adresáře: https://npmjs.org/doc/install.html

Zumbice

Dekuji za objasneni a za diky za cely serial. Tesim se na dalsi dily. :)

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.

Pocta C64

Za prvopočátek své programátorské kariéry vděčím počítači Commodore 64. Tehdy jsem genialitu návrhu nemohl docenit. Dnes dokážu lehce nahlédnout pod pokličku. Chtěl bych se o to s vámi podělit a vzdát mu hold.