2012-03-28 16 views
8

Estoy trabajando en CoffeeScript (escribiendo un Cakefile). Me gustaría recopilar algunos otros archivos CoffeeScript, a lacompilador CoffeeScript API

coffee -o lib -c src 

pude lanzar el comando anterior en un proceso hijo, pero este método tiene problemas de plataforma cruzada y hace difícil el manejo de errores. Prefiero usar una API.

Estaré encantado de utilizar las funciones exactas de command.coffee, pero no sé cómo.

Addendum: Veo require('coffee-script').compile, que compila una cadena a otra cadena. Eso todavía me dejaría hacer el arduo trabajo de buscar archivos y subcarpetas y escribir el resultado.

+0

Si usted también encuentra útil una API más rica, comente la solicitud de función en Github https://github.com/jashkenas/coffee-script/issues/2386 –

Respuesta

11

La API que está buscando está en coffee-script.coffee. Exporta una función compile que hace lo que dice en la lata.

Para usar la función run de command.coffee directamente, primero debe sobrescribir process.argv con las opciones que habría pasado en la línea de comandos.

+0

Gracias, traté de sobreescribir 'process.argv 'pero no pude llevarlo a cabo. ¿Tienes un ejemplo? –

+2

Esto funciona para mí: 'command = require 'coffee-script/lib/coffee-script/command',' process.argv.push' -o ',' lib ',' -c ',' src'', ' command.run() '. –

+0

¿El valor de retorno me dice si el comando fue exitoso? –

7

Sólo tiene que utilizar fs API del nodo + coffeescript.compile:

fs = require 'fs' 
coffee = require 'coffee-script' 

fs.readFile 'source.coffee', 'utf8', (err, data) -> 
    compiled = coffee.compile data 
    fs.writeFile 'source.js', compiled, (err) -> 
     console.log "Done." 

también echar un vistazo a su propio Cakefile de CoffeeScript (utiliza procesos secundarios): https://github.com/jashkenas/coffee-script/blob/master/Cakefile

0

Gracias Jordan y Linus me escribió:

command = require('iced-coffee-script/lib/coffee-script/command') 
process.argv[2..]=['-o','lib','-c','src'] 
command.run() 

Problemas pendientes: la función run regresa temprano y no hay una devolución de llamada para informar el error : \