2013-08-03 5 views
5

Phantom und Meteor sind von Knoten gebaut, und Casper ist ab Phantom gebaut. Warum brauchen sie jeweils ihre eigene separate ausführbare Datei, anstatt die Bibliotheken require bis Node.js zu sein?Warum brauchen Phantom, Casper und Meteor ihre eigenen ausführbaren Dateien?

(. Ich finde, es macht sie härter zu arbeiten, vor allem unter Windows)

+1

Nun, nicht sicher über Meteor, aber Phantom scheint nicht wirklich Knoten zu verwenden. Es hat nur einige der gleichen Inspirationen (va CommonJS) und implementiert einige ähnliche Module (fs, child_process). Die beste Vermutung für einen Meteor ist, dass er Kontrolle darüber haben will, wie das Projekt strukturiert ist. –

+3

Nirk ist richtig. Die Voraussetzung bei der Verwendung von Phantom ist die CommonJS-Bibliothek, nicht Knoten: https://github.com/ariya/phantomjs/wiki/API-Reference#module-api ... und ja, ich habe festgestellt, dass PhantomJS und Windows nicht immer nett spielen zusammen. BENUTZEN SIE LINUX! – cliffbarnes

Antwort

7

PhantomJS ist völlig unabhängig von Knoten:

http://phantomjs.org/faq.html

F: Warum ist PhantomJS nicht geschrieben als Node.js Modul?

A: Die kurze Antwort: "Niemand kann zwei Herren dienen."

Eine längere Erklärung ist wie folgt.

Ab sofort ist es technisch sehr anspruchsvoll, dies zu tun.

Jedes Node.js-Modul ist im Wesentlichen "ein Slave" für den Kern von Node.js, d. H. "Der Master". In seinem aktuellen Zustand muss PhantomJS (und sein eingeschlossenes WebKit) die volle Kontrolle (in einer synchronen Angelegenheit) über alles haben: Ereignisschleife, Netzwerkstapel und JavaScript-Ausführung.

Wenn PhantomJS nur direkt von einem Skript verwendet werden soll, das in Node.js ausgeführt wird, kann eine solche "lose Bindung" erreicht werden, indem ein PhantomJS-Prozess gestartet und mit ihm interagiert wird.

CasperJS ist auf dem Knoten aufgebaut, also ist es offensichtlich kein Knotenmodul für sich. In diesem Fall können Sie SpookyJS mit Knoten verwenden.

Meteor sollte wirklich enger mit Knoten gekoppelt sein. Es gibt ein ähnliches Framework Derby für die Verwendung als ein Modul gebaut.