11
votes

Thypscript fournit-il une API publique explicite pour l'accès au module NODEJS?

à partir d'une application de nœuds, je voudrais faire:

LiveScript = require 'LiveScript'
sysPath = require 'path'

module.exports = class LiveScriptCompiler
  brunchPlugin: yes
  type: 'javascript'
  extension: 'ls'

  constructor: (@config) ->
    null

  compile: (data, path, callback) ->
    try
      result = LiveScript.compile data, bare: yes
    catch err
      error = err
    finally
      callback error, result

  include: [
    (sysPath.join __dirname, '..', 'vendor', 'prelude-browser-0.6.0.js')
  ]


0 commentaires

5 Réponses :


2
votes

Actuellement, il n'est pas possible d'obtenir une compilation juste en ayant besoin de compiler et d'appeler. Si vous pouvez regarder le harnais.TS Il y a un module de compilateur qui offre un moyen assez simple de le faire, mais je vous suggère d'appeler TSC à l'extérieur.

///<reference path='node.d.ts'/>
import exec = module('child_process');

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


1 commentaires

Vous voudrez peut-être supprimer cette réponse



8
votes

Celui-ci est un peu hacky, mais cela fonctionnera.

J'ai pensé à ce jour même hier et je vérifiais leur code. Si vous cochez la bin / tyscript.js de leur Sourcecode (c'est un fichier très très volumineux, avec près de 21k lignes de code), vous verrez cela crée dactyScript.typescriptCompiler, puis vous constaterez que cela exposera une manière de compiler . P>

var fs = require("fs");
var TypeScript = require("typescript");
var path = "test.ts";
var pathout = "test.js";
var content = fs.readFileSync(path, "utf-8");
var fd = fs.openSync(pathout, 'w'); 
var outFile = { 
    Write: function (str) { 
        fs.writeSync(fd, str); 
    }, 
    WriteLine: function (str) {
    console.log(fd, str); 
        fs.writeSync(fd, str + '\r\n'); 
    }, 
    Close: function () { 
        fs.closeSync(fd); 
        fd = null; 
    } 
};
var createFile = function (path) { 
    function mkdirRecursiveSync(path) { 
        var stats = fs.statSync(path); 
        if(stats.isFile()) { 
            throw "\"" + path + "\" exists but isn't a directory."; 
        } else { 
            if(stats.isDirectory()) { 
                return; 
            } else { 
                mkdirRecursiveSync(_path.dirname(path)); 
                fs.mkdirSync(path, 509); 
            } 
        } 
    } 
    mkdirRecursiveSync(_path.dirname(path));
    console.log(path) 
    var fd = fs.openSync(path, 'w'); 
    return { 
        Write: function (str) { 
            fs.writeSync(fd, str); 
        }, 
        WriteLine: function (str) { 
            fs.writeSync(fd, str + '\r\n'); 
        }, 
        Close: function () { 
            fs.closeSync(fd); 
            fd = null; 
        } 
    }; 
};
var stderr = { 
    Write: function (str) { 
        process.stderr.write(str); 
    }, 
    WriteLine: function (str) { 
        process.stderr.write(str + '\n'); 
    }, 
    Close: function () { 
    } 
}
var compiler = new TypeScript.TypeScriptCompiler(outFile, outFile);
compiler.setErrorOutput(stderr);
compiler.addUnit(content, path);
compiler.typeCheck();
compiler.emit(false, createFile);
outFile.Close();


2 commentaires

Excellente réponse. Dans l'attente de votre exemple.


Terminé! Vous pouvez jouer avec cela, changez simplement le nom du fichier (c'est Test.js et test.ts) et donnez-le d'autres noms de fichiers et cela fonctionnera. La façon dont il est en ce moment, la sortie d'erreur sera libérée pour traiter.sderr, mais vous pouvez faire ce que vous voulez avec elle. Vous pouvez également ajouter une fonction de gestionnaire sous forme de compiler.seterrrorCallback et de cette façon, vous pouvez faire des rapports sur les erreurs de construction!



1
votes

check Ce projet GITUB par NiuTech, il peut convertir le code dossier au code JS à la volée dans le navigateur , mais je suppose que cela peut être facilement modifié pour travailler dans nœud.js.


1 commentaires

Merci d'avoir mentionné mon projet!



1
votes

mieux exiger que pourrait vous aider à réaliser cela si tout ce que vous voulez exécuter / accéder à la documentation fichier.

Il vous permet de demander () dossier des fichiers - aucune compilation de pré-compilation - et un tas d'autres formats de fichiers (Coffeescript, ClojurScript, Yaml, XML, etc.) P>

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


2 commentaires

Awesome Util - Je vais essayer de tenter maintenant dans une tentative de la corriger dans le brunch.io Assembler.


Merci! N'hésitez pas à tirer la demande;) C'est assez simple.



1
votes

Vous pouvez essayer https://github.com/sinclairzx81/typescript.api . Ce projet fait l'exigence () Extension, mais a également une fonctionnalité pour compiler manuellement la source TS. Il devrait être possible de créer un système de construction automatisé avec celui-ci.

Remarque Tho Son construit sur le compilateur TypeScript 0.9, vous pouvez donc avoir la compilation de succès 0.8.3 source donnée à diverses mises à jour de la langue.


0 commentaires