2011-02-10 17 views
6

Quiero usar algunas características para javascript en el lado del servidor. Creo que prototype está verificando el tipo de navegador, pero por supuesto node.js no es un navegador. Me sale el siguiente error:¿Cómo usar Prototype.js con 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 es la versión 1.7, Node.js es la versión 0.2.6

+0

¿Qué es exactamente lo que quiere usarlo ¿para? –

Respuesta

6

El prototipo está escrito para ser modular. Esto significa que puede usar solo las partes útiles que extienden Matriz y Clase y Función (¡Me encantan esos bits!) Y omita las partes que tratan con el navegador y el DOM (los bits que son lentos en IE y que no existen en el nodo).

Comience por ir a https://github.com/sstephenson/prototype y luego seleccione las piezas deseadas de src/prototype/ y src/prototype/lang/.

Te deseo suerte en un desafío tan fascinante.

+0

Gracias! Parece que src/prototype/lang.js es un archivo Sprocket para incluir solo los bits de idioma que quiero. – projectshave

2

Si usted tiene un vistazo a la fuente de Prototype.js, que está estrechamente ligado a el entorno del navegador, que no es proporcionado por el nodo (ya que no es un navegador web).

jsdom intenta burlarse del entorno del navegador, y se ha utilizado para successfully ejecutar JQuery en el lado del servidor. Su experiencia puede ser diferente.

+0

De hecho, todo el kilometraje con jsdom puede variar con cada versión de jsdom. La última vez que traté de usarlo en google.com, simplemente explotó. Realmente muestra en gran medida lo roto que realmente está el entorno del navegador. –

4

respuesta tardía, pero estoy seguro de que todavía puede ser útil para algunas personas: hace

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

pocos días, hice algo así a mí mismo, y me di cuenta que ya se había hecho .. Este repositorio es difícil de encontrar incluso con la búsqueda github.

+0

Acabo de arreglar el nombre de este repositorio para prototype.node.js ... Honestamente lo hice solo para demostrarme que era posible. El nuevo enlace es https://github.com/Rixius/prototype.node.js – Rixius

+0

No he tocado esto en bastante tiempo, pero lo estoy iniciando para que funcione en una compilación reciente de nodos y me asegure funciona bien – Rixius

+0

Thx, edité el enlace. – Robin

0

Hay underscore.js especialmente para Node.js, que implementa la mayoría de las funciones prototipos queridos:

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

es más rápido como el propio prototipo, ya que no se extiende cualquiera de los incorporada en objetos JavaScript
Debido a esto, la sintaxis es ligeramente diferente:

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

Si estas buscando Prototipos String funciones como trim, echar un vistazo a underscore.string