ugrás a tartalomhoz

Node.js alapok

Poetro · 2010. Nov. 16. (K), 11.46
Node.js alapok

A Node.js (vagy másnéven Node) egy rendszer, melyben JavaScriptben írhatunk szerver oldali alkalmazásokat. Maga a rendszer C/C++-ban íródott, és egy esemény alapú I/O rendszert takar a Google V8 JavaScript motorja felett.

Célok

A sorozatban megjelent

A Node célja, hogy egy egyszerű felületet adjon, arra, hogy skálázható hálózati alkalmazások írására. Azt tudjuk, hogy a JavaScript a világon a jelenleg legnépszerűbb programozási nyelv, többek között ezért esett erre a nyelvre a választás. A JavaScript nyelvnek vannak más sajátosságai, amelyek szintén előtérbe kerülnek a rendszer használata során. Ahogy a böngészőben, úgy Node alatt is egyetlen esemény hurokban (event loop) fut a program, és ez adja az egyik legfontosabb előnyt.

A Node.js-t úgy írták meg, hogy (szinte) minden esemény aszonkron legyen, ezért az program sosem blokkolódik, azaz nem kell várni, hogy egy művelet befejeződjön, vele párhuzamosan futtathatunk további műveleteket. Ez pontosan ugyan úgy működik, mint a böngészőben levő XHR kérések, vagy más események, mint például a click, mouseover. Ez az alkalmazás folyamatosabb futását, több alkalmazás párhuzamosítását, valamint az egész rendszer optimálisabb működését teszi lehetővé.

Telepítés

Szinte akár milyen operációs rendszerre telepíthetjük a Node-ot, Linuxtól kezdve a Mac OS X-en át a Solarisra. Fordíthatjuk ezen kívül Windows alatt Cygwin-en, FreeBSD-re és OpenBSD-re. A rendszer telepítése elég egyszerű, letöltjük az aktuális stabil változatot, konfiguráljuk, és fordítjuk (make). A fordításhoz szükségünk van egy C++ (gcc) fordítóra, és a Python 2.4 vagy újabb változatára.

$ mkdir node-latest-install
$ cd node-latest-install
$ curl http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1
$ ./configure
$ make install

Ez lefordítja a Node.js-t valamint a benne található V8-as motort is, azaz azt nem kell külön letölteni és telepíteni. Ezen írás idején a Node stabil változata a 0.2.4 ami a V8 2.3.8 változatával érkezik. A jelenleg fejlesztés alatt levő változat a 0.3.0.

Ismerkedés

Amennyiben a telepítés sikeresen lezajlott, mentsük el a következő JavaScript alkalmazást hello.js néven:

console.log('Hello');
setTimeout(function () {
  console.log('World!');
}, 2000)

Majd futtassuk a következőképpen:

$ node hello.js

Ekkor előbb a konzolon megjelenik, hogy Hello, majd 2 másodperccel később, hogy World!.

Az egyik lényeges különbség például a PHP-hoz képest – azon kívül, hogy JavaScript-ben írjuk az alkalmazásunkat –, hogy nincsen szükségünk HTTP szerverre (mint amilyen az Apache httpd), mivel mi magunk írjuk a HTTP szerverünket. Írjuk is meg az első hasonló alkalmazásunkat httpszerver.js néven:

var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');

A következő módon tudjuk futtatni:

$ node httpszerver.js

Ekkor a programunk a 8124-es porton várakozik a HTTP kérésekre, és csak annyit ír ki a böngészőben a http://127.0.0.1:8124/ URL-re látogatva, hogy Hello World.

Modulok

A Node.js alapértelmezetten is rengeteg modullal érkezik, hasonlóan az előbb említett http modulhoz. A modulok a CommonJS specifikáció szerint íródtak, és ennek megfelelően a require('modulneve'); paranccsal tudjuk behúzni őket az alkalmazásunkba. Ezek egy objektumot tesznek elérhetővé, és egy változóhoz rendelve később kényelmesen tudjuk használni is őket. Az alap telepítésben elérhető modulokról a Node hivatalos API dokumentációjában olvashatunk.

npm

A Node hivatalos csomagkezelője az npm, amellyel kényelmesen listázhatjuk, telepíthetjük, frissíthetjük és eltávolíthatjuk az elérhető modulokat, valamint mi magunk is publikálhatjuk az általunk fejlesztett modulokat az npm rendszerébe. Rendszerkövetelményei azonosak a Node-éval, telepítése egyszerű:

$ curl http://npmjs.org/install.sh | sh

Jelenleg több mint 600 modul érhető el az npm rendszerében. Természetesen a modulok minősége változó, de azért könnyű találni a konkrét problémát megoldó modulok közül a nekünk megfelelőt.

Az elérhető modulok listáját az npm ls paranccsal érhetjük el, és ezek nevében a split() parancsnak megfelelő paramétert átadva szűrhetünk is, tehát reguláris kifejezéseket is használhatunk. Például:

$ npm ls xml

Ez szűri azon modulokat, melyek nevében az „xml” szerepel.

Amennyiben további részletekre vagyunk kíváncsiak egy modullal kapcsolatban használhatjuk a view parancsot, mely egy JSON objektumban írja le a modult, például nevét, leírását, szerzőjét, a repository-t, ahol elérhető a forráskód, a modul weboldalát stb.

A modulokat az install paranccsal telepíthetjük.

$ npm install underscore

A frissítésre az update eltávolításra az uninstall parancs szolgál. További segítséghez használjuk a help utasítást.

Példa alkalmazás

Írtam egy kicsit összetettebb alkalmazást a jQuery API dokumentáció helyi szintű tükrözéséhez és megjelentéséhez. Ehhez a következő modulokra van szükségünk: EJS, Express, Underscore és Connect. Ezeket egyszerűen telepíthetjük:

$ npm install underscore ejs connect express

Az EJS egy JavaScript template keretrendszer, ezt használjuk majd a megjelenítéshez. Az Underscore egy funkcionális programozást segítő függvénytár. A Connect egy összetett keretrendszer, amely többek között HTTP kéréseket, routingot, GET/POST/süti feldolgozást, statikus fájlok kiszolgálását segíti. Az Express pedig a Connect-re épülő Sinatra-ra hasonlító fejlesztői keretrendszer.

Építsük fel az alkamlazásunk gerincét tartalmazó app.js fájlt.

var express = require('express'),
    http = require('http'),
    underscore = require('underscore')._,
    apiURL = 'api.jquery.com',
    app = express.createServer(express.logger()),
    apiClient = http.createClient(80, apiURL),
    apiRequest = apiClient.request('GET', '/jsonp/', {'host': apiURL}),  // Indítunk egy kérést az API oldalhoz
    database = [],
    paths = [];

// Segédfüggvény reguláris kifejezések escapelésére.
underscore.escapeRegex = function (text) {
  return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}
app.dynamicHelpers({
    basepath: function(){
        // "this" is the app, we can
        // dynamically provide the "home"
        // setting to all views
        return this.set('home');
    }
});
// Az alkalmazásunk "ejs"-t használ renderelésre.
app.set('view engine', 'ejs');

// Kezeljük az API kérést.
apiRequest.on('response', function (response) {
  var data = '';
  response.setEncoding('utf8');

  // Várjuk, hogy érkezzen adat
  response.on('data', function (chunk) {
    // Megjött az adat
    if (!data) {
      // Az első csomagból levesszük az első karaktert, az nem fog kelleni, mivel a válasz JSONP
      chunk = chunk.substring(1);
    }
    data += chunk;
  });
  response.on('end', function () {
    var rePath = new RegExp('^(?:https?:\\/\\/)?' + underscore.escapeRegex(apiURL) + '\\/(.*?)\\/?');

    // Levesszük az utolsó karatert is, mivel az is a JSONP része.
    data = data.substring(0, data.length - 1);

    // Jelezzük, hogy megjött az összes adat.
    console.log('RESPONSE END');
    // Feldolgozzuk az adatot az 'adatbázisunkba' (JS Ojbektum).
    database = JSON.parse(data);

    // Kicsit átszervezzük az adatokat.
    underscore.map(database, function (value, index) {
      value.path = value.url.replace(rePath, '$1').replace(/\./, '_');
      value.desc = value.desc.replace(/\/Selectors\/(\w+)/g, '$1-selector');
      paths[index] = value.path;

      return value;
    });
  });
});
// Ténylegesen el is küldjük a kérést.
apiRequest.end();

// Kezeljük a kérést ami a `/`-re érkezik
app.get('/', function (request, response) {
  var i = 0,
      item,
      basepath = app.set('home'),
      output = '';
  // Kilistázzuk az összes elérhető függvényt.
  response.render('index', {locals: { entries : database }});
});
// Kezelük a kérést, ami egyetlen jQuery függvényre vonatkozik
app.get('/:method', function (request, response) {
  var method = request.params.method,            // Ebben lesz a függvény neve.
      index = underscore.indexOf(paths, method); // Megkeressük az adatbázisban
      entry = index !== -1 && database[index];   // Megvan az elem?

  if (entry) {
    // Megvan az elemünk, írjuk ki a leírását.
    response.render('entry', {locals: { entry: entry }});
  }
  else {
    // Nincs meg a függvény.
    response.send(method + ' does not exist', 404);
  }
});

// A 3000-es porton figyelünk HTTP csatlakozásokat.
app.listen(3000);
console.log('Server running at http://127.0.0.1:3000/');

Az alkalmazáshoz kapcsolódó template fájlokat helyezzük a views almappába. Három ilyen template állományt használunk.

A HTML keretért felelős views/layout.ejs:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8">
  <title>jQuery API - Node.js application by Poetro</title>
</head>
<body>
  <h1>jQuery API - Node.js application by Poetro</h1>
  <%- body %>
</body>
</html>

Az index oldalunkon megjelenítendő listázást végző views/index.ejs:

<h2>Available functions:</h2>
<dl>
  <% for (var i = 0; i < entries.length; i++) { %>
  <dt><a href="<%= entries[i].path %>"><%= entries[i].title %></a></dt>
  <dd><%- entries[i].desc %></dd>
  <% } %>
</dl>

Valamint az egyes elemek megjelenítését végrehajtó views/entry.ejs:

<h2><%= entry.title %></h2>
<dl>
  <dt>Proof that it is generated</dt>
  <dd><%= Math.floor(Math.random() * 9e8) + 1e8 %></dd>
  <dt>Description</dt>
  <dd><%- entry.desc %></dd>
  <dt>Type</dt>
  <dd><%= entry.type %></dd>
  <dt>Original entry</dt>
  <dd><a href="<%= entry.url %>"><%= entry.title %></a></dd>
  <dt>Returns</dt>
  <dd><%= entry.return %></dd>
</dl>
<div id="description">
  <%- entry.longdesc %>
</div>

Böngészőnkben a http://localhost:3000/ URL-re látogatva a következőhöz hasonló oldal fogad majd minket, amennyiben mindent jól csináltunk:

jQuery API index oldal
jQuery API index oldal

Ha innen az egyik függvény nevére kattunk, akkor a következőhöz hasonló oldalra jutunk:

jQuery API add() függvény
jQuery API add() függvény

Zárszó

Amint látszik, egy még igencsak friss kezdeményezésről van szó, ugyanakkor már most rengeteg fejlesztő, és ennek megfelelően sok elérhető fejlesztés van a projekt mögött. Amennyiben mutatkozik igény egy cikksorozatra, akkor részletesebben bemutatom a lehetőségeket, pár igencsak használható modult, és hogy mire érdemes, és milyen hatékonysággal lehet használni a Node.js-t.

 
Poetro arcképe
Poetro
1998 óta foglalkozik webfejlesztéssel, amikor is a HTML és a JavaScript világa elvarázsolta. Azóta jópár évet dolgozott reklámügynökségeknél, és nemzetközi hírportálok fejlesztésével. Legfőképpen Drupal fejlesztéssel, site buildinggel és JavaScripttel, azon belül is jQuery-vel és Node.js-sel foglalkozik.
1

Jó cikk lett! Már én is

duplabe · 2010. Nov. 16. (K), 13.19
Jó cikk lett! Már én is ismerkedtem a node.js-el (redises pubsub chat alkalmazáska). Szerintem jöhet a folytatás :)
2

Releváns előadások

Bártházi András · 2010. Nov. 16. (K), 13.49
Szuper, kérjük a további cikkeket! :)

Releváns lehet az előadásom a témáról:
http://www.slideshare.net/ba78/nodejs-3602172
3

nagyon könnyen lehet olyan

kuka · 2010. Nov. 16. (K), 14.38
nagyon könnyen lehet olyan látványos eredményeket elérni vele, amit LAMP környezetben "sehogysem"
Erről adnál valami részletet is, légy szíves? Ha nem mást, egy példát. Köszönöm.
4

Többszörös forgalom

Poetro · 2010. Nov. 16. (K), 14.40
Ugyanannyi memória és processzor használattal el lehet érni több mint 10-szer több oldalletöltést ugyanazon a gépen. Gondolom ez eléggé inspiráló.
5

Talán ha érteném. :( Például,

kuka · 2010. Nov. 16. (K), 14.53
Talán ha érteném. :( Például, hogy mi az a "több". És persze mi volna a kevesebb.
6

Példa

Poetro · 2010. Nov. 16. (K), 15.11
A fenti alkalmazás 100 konkurens felhasználó esetén összesen legfeljebb 50Mb memóriát fogyaszt, és másodpercenként 400 felhasználót tud kiszolgálni. Nem hiszen, hogy ezt nagyon überelni lehetne PHP esetében, ahol felhasználónként fogsz legalább 5-20Mb memóriát fogyasztani, egy hasonló összetettségű alkalmazással, és akkor se fogsz tudni kiszolgálni 100-200 felhasználónál többet másodpercenként.
$ ab -n1000 -c100 -k "http://127.0.0.1:3000/"
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests


Server Software:        Node
Server Hostname:        127.0.0.1
Server Port:            3000

Document Path:          /
Document Length:        39383 bytes

Concurrency Level:      100
Time taken for tests:   2.397611 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    1000
Total transferred:      40645643 bytes
HTML transferred:       40424836 bytes
Requests per second:    417.08 [#/sec] (mean)
Time per request:       239.761 [ms] (mean)
Time per request:       2.398 [ms] (mean, across all concurrent requests)
Transfer rate:          16555.23 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   1.4      0       8
Processing:     2  230  74.0    223     351
Waiting:        1  108  64.0    107     250
Total:          2  230  74.4    223     353
És azt is hozzá kell tenni, hogy az alkalmazásom nem optimális, és csak egyetlen magot használ. De ez már a következő cikkem témája.
7

Úgy értsem, hogy LAMP vs.

kuka · 2010. Nov. 16. (K), 15.31
Úgy értsem, hogy LAMP vs. LNMP összehasonlítást csinálsz?
9

LNMP?

Poetro · 2010. Nov. 16. (K), 16.22
Egészen eddig a percig nem tudtam, hogy mi az, hogy LNMP, de gondolom te a Linux+Nginx+MySQL+PHP-ra gondolsz. Nem, nincs szándékomban ilyen összehasonlítást csinálni.
12

Nem, csak támpont nélkül

kuka · 2010. Nov. 16. (K), 20.14
Nem, csak támpont nélkül elmélkedtem, mert nem értem, hogy az
el lehet érni több mint 10-szer több oldalletöltést
minél több.

Mivel eredetileg LAMP-pal kapcsolatban kérdeztem és te összehasonlítással válaszoltál, úgyhogy megpróbáltam felállítani az egyenlőtlenséget: egyik oldalon L+A+M+P, másik oldalon gondolom valami hasonló, csak a négy alkotó közül az egyik Node.js lesz. Az LNMP kérdésem erre vonatkozott: hol jön a képletbe a Node.js.

Az összehasonlítást (és persze a cikket) köszönöm, de egyelőre nem állt össze a kép. Úgyhogy én is várom a téma következő cikkét.
13

LAMP / LNMP

Poetro · 2010. Nov. 16. (K), 20.44
Épp az a lényeg, hogy a LAMP/LNMP-ból el lehet el lehet hagyni a HTTP kiszolgálást, azaz az nginx / Apache httpd kikerül a képből, mivel a HTTP kiszolgálást maga a Node.js alkalmazásod végzi. Persze lehet elé rakni egy reverse proxy-t, pl. nginx, de nincs rá szükség. Azaz marad az Oprendszer + NoSQL + Node.js trio, nevezd ahogyan akarod.
16

Most már világos a felállás,

kuka · 2010. Nov. 17. (Sze), 10.55
Most már világos a felállás, köszönöm.
8

Hasznos cikk volt, köszönjük!

Dylan · 2010. Nov. 16. (K), 15.35
Hasznos cikk volt, köszönjük! Jöhet a folytatás! :)
Nem hallottam még erről, de kifejezetten elkezdett most foglalkoztatni.
Adatbázis kapcsolatok terén hogy áll a node?
10

Adatbázisok

Poetro · 2010. Nov. 16. (K), 16.26
Adatbázis kapcsolatok terén hogy áll a node?

Azt kell, hogy mondjam, hogy elég jól, főleg a NoSQL adatbázisok terén, de természetesen létezik már MySQL és PostgreSQL csatoló is.
11

Tetszik ez a node.js,

inf · 2010. Nov. 16. (K), 17.07
Tetszik ez a node.js, felteszem majd AWS szerveremre kipróbálni. Tetszik, hogy sokkal könnyedebb az egész, mint mondjuk egy php+apache, és ami külön bejön, hogy a webszerver részébe is bele tudok nyúlni. Engem az érdekelne, hogy a webszerverrel kapcsolatban milyen biztonsági dolgok vannak beépítve.

Nekem van igényem ilyen cikkekre, érdekesek.
14

php elasni, js-t isteniteni ?

city99 · 2010. Nov. 16. (K), 22.05
Az egyik lényeges különbség például a PHP-hoz képest – azon kívül, hogy JavaScript-ben írjuk az alkalmazásunkat –, hogy nincsen szükségünk HTTP szerverre (mint amilyen az Apache httpd), mivel mi magunk írjuk a HTTP szerverünket


1: miota nem lehet parancssorbol futattni phpt?
2: miert ne lehetne php-ban irni http servert ?

Lehet hogy nekem kopott meg a tudasom az elmult evekbe, de az is lehet hogy a cikk irojanak nincs tapasztalata php-val.

alapvetoen a tema erdekes, varom a kovetkezo reszt...
15

nem

Poetro · 2010. Nov. 16. (K), 22.16
Nem hinném, hogy a PHP-t el kellene ásni. Mindkettőnek megvan a maga helye. Van amikor a PHP optimálisabb, van amikor pedig a Node.js.
És elárulom, van tapasztalatom PHP-val, az utóbbi 10 évben igencsak sokat foglalkoztam PHP-val, bár lehet más szemszögből vizsgáltam a PHP-t mint amire gondolsz. És tudom, és szoktam használni a PHP-t parancssorban, de nem ez a leggyakoribb használata. Felteszem, lehet HTTP szervert írni PHP-ban is, de nem hiszem, hogy teljesítményben fel tudná venni a versenyt akár csak az Apache httpd-del, vagy a Node.js-sel.
17

hát a cikk alapján komolyan

szabo.b.gabor · 2010. Nov. 17. (Sze), 13.09
hát a cikk alapján komolyan megfordult a fejemben, hogy a php-nak hosszútávon annyi.. persze ez nem igaz, de afelett nem lehet szemet hunyni, hogy nagyságrendekkel gyorsabb ez a megoldás.

nagyon nagyon hasznos cikk. még még :)
18

hát a cikk alapján komolyan

inf · 2010. Nov. 17. (Sze), 19.33
hát a cikk alapján komolyan megfordult a fejemben, hogy a php-nak hosszútávon annyi..

Én nem ítélnék ennyire elhamarkodottan, még simán kinőheti ezt a 10x-es különbséget is, ha teleszórják szeméttel. :-)
19

Node.js v0.2.5 és v0.3.1

Poetro · 2010. Nov. 17. (Sze), 21.00
Tegnap megjelent a v0.2.5-es stabil, és a v0.3.1 fejlesztői változat. A fejlesztői változatban immár a V8 2.5.3 verzióját használják.
20

azért azt ne felejtsük el

nándi · 2010. Nov. 17. (Sze), 22.21
azért azt ne felejtsük el, hogy ez még nem production ready cucc de egyértelműen van benne potenciál. Hasznos lehet még a témában: http://howtonode.org/
23

production ready

Bártházi András · 2010. Nov. 21. (V), 22.32
Hát, ez eléggé nézőpont kérdése. Én már hónapok óta használom production környezetben, mindenféle probléma nélkül a node.js-t. Nulla fagyással fut, nincs vele semmi probléma.
24

node.js fejlesztés

nándi · 2010. Nov. 24. (Sze), 00.11
Susmusról van szó?:) Fél szemmel követem a node.js körüli eseményeket. Májusban még arról beszélt a fejlesztő hogy tele van hibával és nem production ready.
A 2010es js confon meg 9 challeng-ről beszélt ami a node.js előtt áll fejlesztésben. Azóta furcsa mód már megváltozott annak a pdf-nek a tartalma. :) Lehet hogy olyan gyorsan fejlődik a kód hogy akár már élesbe is lehet tenni. Bátraké a szerencse.
21

Ez csodás

Cooty13 · 2010. Nov. 17. (Sze), 22.30
Nagyon tetszik! Nagyon jó felismerni, hogy a JS nem csak böngészőben futtatható, illetve JavaScript nyelv != HTML DOM JavaScript API.
Ezek szerint lehetséges akár, Windows alatt futtatható asztali alkalmazásokat is írni JS-ben? Ha, igen hogyan? Ehhez milyen keretrendszer, fejlesztői környezet kell?
22

JScript.NET

Poetro · 2010. Nov. 17. (Sze), 22.40
Ahhoz, hogy Windows asztali alkalmazásokat tudj írni, és futtatni, telepíteni kell egy .NET keretrendszert, és máris tudsz JScript.NET-et fordítani .exe-re.
25

Biztonság?

Burnee · 2010. Dec. 9. (Cs), 10.33
Szia!

Köszi a cikket, engem érdekel a folytatás!

Tudnál esetleg pár szót írni a node.js biztonsági paramétereiről?
26

Mire gondolsz?

Poetro · 2010. Dec. 9. (Cs), 11.28
Nem teljesen tudom, hogy mire gondolsz. A HTTP Parser modul minden kiadással egyre jobb lesz. Ráadásul a C++-ban íródott részeket egyre minimálisabbra próbálják szorítani, így az azokban levő esetleges hibáktól próbálnak megszabadulni, és mindent, amit lehet JavaScript-ben megírni. Az, hogy egy alkalmazás mennyire biztonságos, általában az alkalamzás fejlesztőjétől függ, nem a használt programozási nyelvtől illetve keretrendszertől.
27

node.js npm install gond

spoty · 2010. Dec. 17. (P), 17.21
Kedves egybegyűltek!

Tud valaki abban segíteni, hogy miért nem lehet az npm-et felinstallálni?
Ezt az üzenetet kapom:

$ node ./cli.js install npm
npm info it worked if it ends with ok
npm info using npm##kukac##0.2.12-1
npm info using node##kukac##v0.2.4
npm ERR! Error connecting to server http://registry.npmjs.org/npm
npm ERR! Error: ETIMEOUT, Timeout while contacting DNS servers
npm ERR! at Timer.callback (dns:15:13)
npm ERR! at node.js:772:9
npm ERR! Report this *entire* log at <http://github.com/isaacs/npm/issues>
npm ERR! or email it to <npm-##kukac##googlegroups.com>
npm ERR! Just tweeting a tiny part of the error will not be helpful.
npm not ok

Előre is köszönöm, ha valakinek van ötlete!
28

Tűzfal

Poetro · 2010. Dec. 17. (P), 19.37
Nem akadályozza meg esetleg tűzfal, hogy a program kimenjen az internetre? Mert találkoztam már ilyennel. Egyébként pedig az npm-et érdemes a cikkben említett módon telepíteni, frissíteni pedig az
$ npm update npm
paranccsal.
29

Re: tűzfal

spoty · 2010. Dec. 17. (P), 20.38
Nem akadályozza tűzfal, de az előbb elfelejtettem leírni, hogy cygwin-ben fut az egész.
Megpróbáltam az általad leírt módon is telepíteni ( bár ennek a vége ugyanaz a szkript, ami elakad ), de értelemszerűen ez is leállt azon a bizonyos ponton.
A node.js telepítése sikerült, ez az npm, ami kifogott rajtam :)
30

cygwin

Poetro · 2010. Dec. 17. (P), 21.19
Az én gépemen is cygwin fut, és teljesen szépen le is fut a telepítés. Bár lehet nálam a telepített cygwin csomagok különböznek.
31

A probléma megoldva

spoty · 2010. Dec. 18. (Szo), 15.37
Köszi Poetro, hogy próbáltál segíteni, közben a gond megoldódott.

A megoldás kulcsa:
az/etc/resolv.conf-ban ezt a két sort el kell még helyezni:
nameserver 8.8.8.8
nameserver 8.8.4.4

Enélkül nem működik, de ezek után minden rendben :)