2012-10-04 14 views
10

. Es bastante fácil hacerlo con coffee-script.Utilice el compilador de TypeScript desde el nodo

var coffee = require('coffee-script'); 
coffee.compile("a = 1"); 
//=> '(function() {\n var a;\n\n a = 1;\n\n}).call(this);\n' 

¿Hay alguna manera de hacerlo con mecanografiado?

Editar: también posted on codeplex

+0

Parece que el módulo TypeScript NPM no exporta cualquier interfaz pública. Creé [un problema para seguir esto] (http://typescript.codeplex.com/workitem/97). – joshuapoehls

+0

También recomendaría mirar la solución aquí: http://stackoverflow.com/questions/12717309/does-typescript-provide-an-explicit-public-api-for-nodejs-module-access – cnp

+0

@ ChristopherPappas es gracioso, yo también estaba planeando usar esto para hacer un complemento de brunch. ¿Tienes un repositorio en algún lugar que pueda consultar? –

Respuesta

8

Parece que hoy en día existe una solución simple, que puede hacer:

let ts = require('typescript'); 
let source = ts.transpileModule('class Test {}', {}).outputText; 

Esto se traduce en:

"use strict"; 
var Test = (function() { 
    function Test() { 
    } 
    return Test; 
}()); 
+1

Nota: ts.transpile ha quedado en desuso desde que se publicó esta respuesta. Aquí hay un material fuente para respaldar la respuesta anterior: https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API#transpiling-a-single-file @topek no dude en actualizar su respuesta con esta información –

+0

@ShawnErquhart Tenga en cuenta que ts.transpile está en desuso solo porque ha sido reemplazado por el ts.transpileModule más extensible. Actualicé la respuesta en consecuencia. –

+1

@AndrewFaulkner, sí, esa es la razón por la que he vinculado la documentación en transpileModule, pensó que el usuario que publicó la respuesta se actualizaría. Gracias por eso. –

8

Desde el módulo de NPM mecanografiado no exporta ninguna interfaz pública, la única manera de hacer esto es actualmente para ejecutar el proceso tsc.

var exec = require('child_process').exec; 

var child = exec('tsc main.ts', 
       function(error, stdout, stderr) { 
        console.log('stdout: ' + stdout); 
        console.log('stderr: ' + stderr); 
        if (error !== null) { 
         console.log('exec error: ' + error); 
        } 
       }); 

An issue se ha abierto para solicitar una interfaz pública para the TypeScript module.

+1

¿Solucionaron esto en TypeScript 0.9? –

+1

¿Solucionaron esto en la versión beta de TypeScript 2.0? –

+0

¿Solucionaron esto en TypeScript 2.2.1? –

6

Comprobar this github project por niutech, se puede convertir el código de transcripción de código JS sobre la marcha en el navegador, pero supongo que puede ser fácilmente modificado para que funcione en node.js.

Lo encontré mientras investigaba la posibilidad de admitir TypeScript en mi vida, firebug-inspired code editor.

8

better-require podría ayudarlo a lograrlo.

Se permite establecer como requisito() archivos mecanografiado - sin pre-compilación necesario - y un montón de otros formatos de archivo (CoffeeScript, clojurescript, YAML, XML, etc.)

require('better-require')(); 
var myModule = require('./mymodule.ts'); 

Divulgación: Me escribió una mejor -exigir.

4

No responder a la pregunta directamente, pero desde Google para "Letra de imprenta plazo de nodo directamente "abre esta página de StackOverflow, me imagino que debo agregar que usted puede hacer esto con el nodo-ts: https://github.com/TypeStrong/ts-node

Cuestiones relacionadas