JavaScript na serveru: moduly a npm

node.js logo

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.

Seriál: Node.js - s JavaScriptem na serveru (13 dílů)

  1. JavaScript na serveru: Začínáme s Node.js 23.11.2010
  2. JavaScript na serveru: Patří budoucnost Node.js? 21.9.2012
  3. JavaScript na serveru: Architektura a první Hello World 5.10.2012
  4. JavaScript na serveru: moduly a npm 12.10.2012
  5. JavaScript na serveru: začínáme programovat e-shop 19.10.2012
  6. JavaScript na serveru: MongoDB, Mongoose a AngularJS 26.10.2012
  7. JavaScript na serveru: Testování a kontinuální integrace 2.11.2012
  8. JavaScript na serveru: REST API 9.11.2012
  9. JavaScript na serveru: implementace REST API 16.11.2012
  10. JavaScript na serveru: nástroje a dokumentace 23.11.2012
  11. Začínáme s AngularJS 30.11.2012
  12. AngularJS direktivy a testování 7.12.2012
  13. JavaScript na serveru: CoffeeScript a šablonovací systémy 14.12.2012

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.

Jakub pracoval na několika zajímavých projektech, za nejvýznamnější považuje vytvoření e-commerce řešení Shopio.cz. Poslední rok se plně věnuje Node.js, frameworku AngularJS a NoSQL databázím.

Komentáře: 5

Přehled komentářů

blizz Re: JavaScript na serveru: moduly a npm
langpa package.json
Michal Novák Globalni instalace
Martin Hassman Re: Globalni instalace
Zumbice Re: Globalni instalace
Zdroj: http://www.zdrojak.cz/?p=3717