Ejemplo de uso de clases de Coffeescript y RequireJS(o Curljs o similar) para la biblioteca del navegador del lado del cliente
(3)
En primer lugar, si está utilizando RequireJS, no será fácil devolver múltiples "cosas" desde una función de definición. RequireJS utiliza los "estándares" del formato AMD (! NOT! CommonJS), que no contiene un objeto module.exports para exportar "cosas", sino que se basa en devolver algo.
Dicho esto, no estoy exactamente seguro de lo que está buscando aquí, pero tener un trabajo en clase con RequireJS es bastante fácil. Algo como esto:
define [''my/required/module''], (myModule) ->
class MyOtherModule
privateField = 0
constructor: ->
publicMethod: ->
return MyOtherModule
Esto se puede usar en una función require / define como cualquier otro script. Tomemos este ejemplo:
require [''my/other/module''], (MyOtherModule) ->
instance = new MyOtherModule()
Incluso podemos usarlo con "se extiende".
define [''my/other/module''], (MyOtherModule) ->
class MyThirdModule extends MyOtherModule
...
Esperemos que esto ayude!
Queremos desarrollar una biblioteca de navegador (solo del lado del cliente) utilizando Coffeescript, y en particular, tendemos a usar la capacidad de "clase" de Coffeescript bastante, además de las funciones puras. La biblioteca será relativamente grande, por lo que queremos comenzar con un patrón de módulo bien definido, pero no hasta el punto en que queramos un archivo de café único para cada "clase" de coffeescript. No queremos compilar los archivos de café sobre la marcha, sino más bien como un paso de compilación específico, y preferiríamos no tener que concentrar todo el JS generado en un solo archivo. Como requisito final, usaremos algo como Jasmine para las pruebas.
¿Alguien sabe de un buen ejemplo de biblioteca desarrollada de esta manera, usando Coffeescript con algo como RequireJS, CurlJS, Browserify, etc.? He visto Github, y hay algunos ejemplos, pero no pude ver nada específico a mis necesidades.
Intenté Coffee-Toaster , ya que parecía ser algo prometedor para simplificar la definición de dependencias, etc., pero no pudo tratar con las rutas de Windows (la antigua / vs /), así que renuncié a eso, principalmente porque parecía ser un poco en el lado "ligero" - algo como RequireJS parece tener un apoyo de la comunidad mucho mejor detrás de él.
Gracias por cualquier ayuda que usted nos pueda proporcionar. Realmente estoy buscando ejemplos de código fuente de trabajo si es posible.
También estoy usando café tostador, y encontré algunas publicaciones recientemente.
Pensé que valía la pena leer, tal vez podríamos resolverlo:
http://blog.toastymofo.net/2012/04/coffeescript-requirejs-and-you-part-one.html
http://24ways.org/2012/think-first-code-later/
y http://jamjs.org parece muy bien!
Todavía no he usado esta técnica, pero:
Lo único que hay que tener en cuenta aquí es que las sentencias de CoffeeScript también son valores de retorno cuando están por última vez en una función. Así que, básicamente, el siguiente código:
define [], () ->
class Main
se traduce a
define([], function() {
var Main;
return Main = (function() {
function Main() {}
return Main;
})();
});
y eso debería funcionar como se esperaba (no veo ninguna razón por la que no se basaría en el JavaScript compilado).
Para administrar el código base, creo que el complemento CS debería ser útil. Lo mantiene el mismo James Burke y admite la creación de proyectos de CoffeeScript de la misma manera que se crean los proyectos de JavaScript.