2011-02-10 15 views
6

Chcę użyć niektórych funkcji dla javascript po stronie serwera. Myślę, że prototyp sprawdza typ przeglądarki, ale oczywiście node.js nie jest przeglądarką. Pojawia się następujący błąd:Jak korzystać z Prototype.js z Node.js?

$ node 
> require('./prototype') ; 
ReferenceError: navigator is not defined 
    at /home/guest/projects/javascript/prototype.js:14:5 
    at Object.<anonymous> (/home/guest/projects/javascript/prototype.js:23:4) 
    at Module._compile (node.js:462:23) 
    at Module._loadScriptSync (node.js:469:10) 
    at Module.loadSync (node.js:338:12) 
    at loadModule (node.js:283:14) 
    at require (node.js:411:14) 
    at cwdRequire (repl:29:10) 
    at [object Context]:1:1 
    at Interface.<anonymous> (repl:96:19) 

prototype.js jest wersja 1.7, node.js jest wersja 0.2.6

+0

Co dokładnie chcesz go użyć dla? –

Odpowiedz

6

Prototyp jest napisany jako modułowy. Oznacza to, że możesz używać tylko przydatnych części, które rozszerzają Array i Class and Function (kocham te bity!) I pomijają części, które dotyczą przeglądarki i DOM (bity, które są wolne w IE i nie istnieją w węźle).

Zacznij od przejścia do https://github.com/sstephenson/prototype, a następnie wybierz żądane części z src/prototype/ i src/prototype/lang/.

Życzę powodzenia w tak fascynującym wyzwaniu.

+0

Dzięki! Wygląda na to, że src/prototype/lang.js to plik Sprocket, który zawiera tylko żądane bity języka. – projectshave

2

Jeśli spojrzeć na źródła prototype.js, jest ściśle związany z środowisko przeglądarki, które nie jest dostarczane przez węzeł (ponieważ nie jest przeglądarką internetową).

jsdom próbuje sfałszować środowisko przeglądarki i był używany do successfully uruchamiania JQuery po stronie serwera. Twój przebieg może się różnić.

+0

W rzeczywistości każdy przebieg z jsdom może się różnić w zależności od wersji jsdom. Ostatnim razem, gdy próbowałem go użyć w witrynie google.com, po prostu eksplodował. To naprawdę pokazuje w dużym stopniu, jak bardzo złamane jest środowisko przeglądarki. –

4

Późne odpowiedź, ale jestem pewien, że to może jeszcze być przydatne dla niektórych ludzi:

https://github.com/Rixius/prototype.node.js

Kilka dni temu, zrobiłem sobie coś takiego, i zrozumiał, że już zostało zrobione .. To powtórzenie jest trudne do znalezienia nawet przy wyszukiwaniu Github.

+0

Naprawiłem nazwę tego repozytorium na prototype.node.js ... Szczerze mówiąc, udało mi się udowodnić, że to możliwe. Nowy link to https://github.com/Rixius/prototype.node.js – Rixius

+0

Nie tknąłem tego od dłuższego czasu, ale uruchamiam go, aby działał na najnowszej kompilacji węzła i upewniał się, działa poprawnie. – Rixius

+0

Thx, edytowałem link. – Robin

0

Jest underscore.js zwłaszcza dla node.js, który realizuje większość prototypów ukochane funkcje:

Underscore is a utility-belt library for JavaScript that provides a lot of 
the functional programming support that you would expect in Prototype.js. 

szybszym jak sam prototyp, ponieważ nie rozciąga któregokolwiek z wbudowanej w obiektach JavaScript.
Ze względu na to, składnia jest nieco inna:

// prototype.js: 
anArray.each(function(){ ... }); 
// underscore.js: 
_ = require('underscore'); 
_.each(anArray, function(){ ... }); 

Jeśli szukasz dla prototypów String funkcje jak trim, rzucić okiem na underscore.string