Ejecución de YUI 3 del lado del servidor con Node.js
05 de abril 2010 a las 7:45 am por Dav Glass | En Desarrollo | 5 ComentariosPara aquellos que no conocen Node.js , así es como lo describo:
Node.js es un tiempo de ejecución del lado del servidor, sin bloqueo, por eventos de JavaScript integrado en la parte superior del motor V8 JavaScript . Piense en Node.js como un reemplazo viable para su lenguaje de script del lado del servidor, sentado detrás de un servidor http como Apache o Nginx .
Recientemente he estado jugando con Node.js para ver lo que toda la emoción estaba a punto. Así que, naturalmente, me puse a ver lo que se tardaría en llegar YUI 3 para ejecutarse en el nodo. Conocer la arquitectura detrás de YUI 3 , pensé que no sería demasiado duro para ponerlo en marcha.
Desde Node.js no proporciona un nativo DOM, uno podría preguntarse, "¿Por qué utilizar un marco de JavaScript?" Bueno, YUI 3 no tiene que ver con la manipulación del DOM - sino que también contiene un conjunto robusto de herramientas de gestión de la clase / objeto, por no hablar de nuestros propios eventos de gran alcance. Todas estas herramientas son de utilidad inmediata en la programación del lado del servidor.
Primeros pasos
En primer lugar, cabe señalar que YUI será cargado en el ámbito global en Node.js, porque todos YUI 3 módulos invocar YUI.add al inicio del archivo. El objeto YUI se asignará a las exports por objeto la CommonJS pliego de condiciones, pero, una vez que un módulo se utiliza, se necesita un global YUI a asociar. (Esto puede ser algo que evitar en el futuro, pero ese es el punto de partida de esta exploración.)
Lo primero que tenía que hacer era conseguir cargador para el trabajo. Hacer esto era bastante simple, acabo de utilizar el built-in YUI 3 herramientas. El YUI 3 sistema de módulos es robusto y fácil de configurar, así que usar el YUI.add método que fue capaz de crear un nuevo get módulo. Este nuevo módulo acepta los parámetros predeterminados para el lado del cliente Obtener utilidades, pero en lugar de crear un nodo de guión y como YUI de esa manera se obtiene YUI del disco o de la CDN y carga los datos en el proceso actual. Aquí está un fragmento de código simple que muestra cómo se hace esto:
YUI.add ('get', function (Y) { Y. Obtenga = function () {}; Y.Get.script = function (s, cb) { var urls = Y. Array (s), url, i, l = urls.length; for (i = 0; i <l; i + +) { url = urls [i]; if (urls [i] partido (/ ^ https:.? \ / \ / /)) { url = url.replace (. / \ js $ /,''); } Y.log ('URL:' + url, 'info', 'obtener'); / / No tiene por qué ser el bloqueo, por lo que no cuadra. require.async (url, la función (mod) { pass (CB); }); } }; / / Sólo poniendo esto es así no nos errores Y.Get.css = function (s, cb) { Y.log ('Loading CSS:' + s 'depuración', 'obtener'); pass (CB); }; });
Ahora que había Obtenga carga scripts, que quería ser capaz de rastrear lo que estaba haciendo. YUI 3 incluye un atributo de configuración llamado logFn que permite el registro de asistencia en ambientes donde el registro de la consola nativa no podría existir. He utilizado este atributo de configuración para agregar una opción para el objeto global que YUI YUI dice que se debe utilizar una función especial cuando se emiten mensajes de registro. He aquí un vistazo a esa función:
logFn: function (str, t, m) { t = t | | 'info'; m = (m)? '(' + M + ')':''; var o = false; if (str instanceof Object | | str Array instanceof) { / / ¿Hay que usar esto? if (str.toString) { str str.toString = (); Else {} str sys.inspect = (cadena); } } / / Salida de mensajes de registro en stderr sys.error ('[' + t.toUpperCase () + "]:" + m + str); }
Ahora que había YUI 3 de carga y registro de mensajes, el siguiente paso era poner a prueba el sistema. Me decidí a cargar mi módulo Galería YQL y tratar de hacer un YQL solicitud. Esto resultó ser más fácil de lo esperado. Puesto que el módulo utiliza YQL Get, que trabajó fuera de la caja. Aquí está una copia impresa de la consola muestra de que ejecutar una consulta YQL en contra de mi mesa de GitHub.
[INFO]: (yui) los requisitos del módulo: [Array]: 3 [INFO]: (yui) módulos que faltan: [Array]: 3, 3 [INFO]: (yui) Obtención de cargador: http://yui......oader/loader-min.js [INFO]: (get) URL: http://yui.yahooapis.co.../loader/loader-min.js [INFO]: (yui) los requisitos del módulo: [Array]: 11 [INFO]: (yui) módulos que faltan: [Array]: 8, 8 [INFO]: (yui) utilizando el cargador [INFO]: (get) URL: http://yui.yahooapis.com/combo?3.1.0/build/du ...... ...........ild / galería YQL / galería YQL-debug.js [La vida]: (base) constructor llamado [INFO]: (atributo) Atributo constructor llamado [La vida]: (base) init llama [INFO]: (evento) yui_3_1_0_1_12703536585676: Disparar una: init [INFO]: (atributo) initValue para inicializar: false [INFO]: (atributo) Adición de atributos: inicializado [INFO]: (atributo) initValue para destruir: false [INFO]: (atributo) Adición de atributos: destruido [INFO]: (atributo) Adición de atributos: inicializado [INFO]: (evento): Disparar una: foo [INFO]: (evento): una: foo-> sub: yui_3_1_0_1_127035365856711 [DEBUG]: (frontend) Foo Despedido [INFO]: (get) URL: http://query.yahooapis.com/v1/public/yql?q=select% 20 *% 20fro ....... bles.env y [INFO]: (evento) yui_3_1_0_1_127035365856715: query-> sub: yui_3_1_0_1_127035365856716 {Count: 1 " , De creación: '2010-04-04T04: 01:00 Z ' , Lang: "en-US" , Actualizado: '2010-04-04T04: 01:00 Z ' , Uri: "http://query.yahooapis.com/v1/yql , Los resultados: {Usuario: {'Gravatar-id ":" d5c18055c50c5b34b0163e0bf0dbf59f' , El nombre de: "Dav Glass ' , De la empresa: [objeto] ..... , Blog: "http://blog.davglass.com/ ' } } }
Así que con todo lo que trabajo tan fácil como lo hizo, pensé que era hora de ver sobre la adición de soporte para YUI 3 IO . IO YUI 3 de módulo ya contaba con el apoyo de solicitudes de dominios a través de un transporte de Flash. Decidí que me gustaría añadir un nuevo transporte sólo para Node.js. Thomas Sha, el autor de IO, fue capaz de hacer IO aceptar de terceros el transporte de la misma manera que el transporte de obras de Flash. En este punto, fue fácil de integrar con la gestión de la conexión http ya proporcionada por Node.js. Esto permite que el código que ha diseñado para ejecutarse en el transporte de XDR en el navegador que se ejecuta en el servidor - todo lo que tiene que hacer es cambiar el tipo de transporte, y todo lo demás debería funcionar exactamente lo mismo.
YUI (). Uso ('json', 'base', 'io-nodejs', function (Y) { var url = "http:/ '+' / yuilibrary.com / galería / api / user / davglass; Y.io (url, { XDR: { empleo: «nodejs ' }, en: { inicio: function () { Y.log ('Start IO', 'info', 'TEST'); }, éxito: function (id, o) { Y.log (Y.JSON.parse (o.responseText) userinfo.) } } });
Después de conseguir el módulo de IO para trabajar, me puse a utilizar la biblioteca para crear algo divertido. ¿Qué debo construir? Yo YUI 3 y Node.js para construir un servidor combo local. En otras palabras, podría utilizar YUI 3 para crear una herramienta que sirve YUI 3 ficheros combo'd. Este proyecto fue sorprendentemente fácil de hacer así. La fuente para el cargador Combo está disponible en mi cuenta de GitHub y tengo un servidor de demostración aquí .
Con todo, el proceso de hacer el centro de trabajo YUI 3 utilidades en Node.js fue muy sencillo gracias a la arquitectura de YUI 3. El código de mi Node.js YUI 3 módulo está disponible en mi repositorio GitHub con instrucciones sobre cómo ponerlo en marcha.
Manténgase en sintonía para mi próximo post, cuando voy a hablar de algunos experimentos adicionales que he estado buscando desde que se ejecuta en tres YUI Node.js.
Compartir y ampliar: Marcar con del.icio.us | Digg it! | reddit!
5 Comentarios
Lo sentimos, los comentarios están cerrados en este momento.

Copyright © 2006-2011 Yahoo! Inc. Todos los derechos reservados. Política de privacidad - Condiciones del servicio
Desarrollado por WordPress en Yahoo! Web Hosting .


Masiva! Buen trabajo y gracias Dav:)
Comentario por JoeDev - 05 de abril 2010 #
@ JoeDev - ¡Gracias!
Comentario por Dav Glass - 05 de abril 2010 #
[...] Del artículo anterior: YUI 3 ya no se ejecuta en el ámbito global. He hecho algunos ajustes a mi nodejs-yui3 proyecto [...]
Pingback por Node.js 3, YUI y la manipulación del DOM ... ¡Dios mío! »Yahoo! interfaz de usuario de blog (YUIBlog) - 09 de abril 2010 #
[...] De vidrio se enfríe un trabajo YUI y el servidor cuando se lo ejecuta en Node.js y luego se la DOM [...]
Pingback por Ajaxian »la representación del lado del servidor con YUI en Node.js - 20 de abril 2010 #
Cosas realmente buenas. Este es el futuro! Tal vez algún día nos caerá la interfaz de usuario de YUI y simplemente lo llaman Y (ya que la biblioteca podría llegar a ser igualmente poderosa en el lado del servidor ...)
Comentario por Arthur Blake - 20 de abril 2010 #