Nincs géppel egy kifejezett Public API NodeJS modul Access?

szavazat
11

Belül egy csomópont app szeretnék csinálni:

var typeScript = require('typescript'); 

typeScript.compile('...')

Keresem, hogy hajtsák végre a fordító egy fordítási rendszert, de anélkül, hogy hozzáférést biztosítanak egy nyilvános API (typescript.compile stb), ez lehetetlen.

Itt egy teljes példa, hogy mit szeretnék csinálni, bár a lenti LiveScript nem géppel, utilitized egy bővítmény írt a Brunch.io építeni-rendszer:

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')
  ]

Kíváncsi, ha valaki talált Kerülő?

frissítés

Így végül a végrehajtási saját megoldást a különböző fent felsorolt problémákat és másutt. Kérjük, olvassa https://github.com/damassi/TypeScript-Watcher További információ és a használat.

A kérdést 03/10/2012 22:40
a forrás felhasználó
Más nyelveken...                            


5 válasz

szavazat
8

Ez egy kicsit hacky de működni fog.

Azt gondoltam, ez nagyon ugyanaz tegnap, és én ellenőrizték a kódot. Ha bejelöli bin / typscript.js el a forráskód (Ez egy nagyon nagy fájl, közel 21k sornyi kódot), akkor látni teremt TypeScript.TypeScriptCompiler, és akkor azt találjuk, hogy ez ki olyan módon összeállításának .

var compiler = new TypeScript.TypeScriptCompiler(outfile, errorfile, 
    new TypeScript.NullLogger(), settings);

Most kell egy egyszerű módja annak, hogy tegye azt. Ehhez meg kell majd módosítani a kódot, ezért ez hacky. Ehhez, akkor módosítani typescript.js hozzáadásával:

module.exports = exports = TypeScript;

Jobb a végén a fájlt.

Ezután létrehozhat egy index.js fájlt a gyökér a modul (megjegyzés: A modul telepíthető a helyi teret mindezt: „NPM telepíteni géppel”), amely feltárja az objektumot.

exports.TypeScript = require("bin/typescript");

És kész! Most már csak hívja, és fordítsa le a kódot használja. Meg tudja nézni, hogyan kell használni az API-t összeállítás a tsc.js fájlt.

Elnézést kérek előre a szörnyű kódot előre:

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();

Valamilyen oknál fogva, aki írta a kódot egy igazi rajongó C # és hozzálátott, hogy menjen előre, és olyan módszereket hívott WriteLine nevû, Close és írása, amelyek valójában csak csomagolást. Lehet, hogy ez a felső kelljen adni ezt a funkciót, de ha lett volna módosítani egy csomó kód a modulban, és ez nem éri meg. Azt hiszem, a legjobb, ha egy osztály kiterjesztése (vagy ha még JS, öröklik a prototípus), és hagyjuk, hogy ezt, hogy az Ön számára, annak érdekében, hogy száraz.

Valami igazán szép, hogy ha azt akarjuk lefordítani 500 géppel fájlokat, és tegye őket egyetlen Js fájlt, akkor csak hívja compiler.addUnit (anothercontent, anotherpath); 500-szor, majd látni, hogy minden megy egy fájlba :)

Összpontosítva jobb dolog: ha bejelöli tsc.js kódot, meg fogja találni a batch fordító osztály. Ha azt szeretnénk, ezt a fordítási folyamat, lehet, hogy jobb, ha valami erőteljesebb, mint ez. Ez biztosítja figyeli a fájlok és így tovább.

Miután böngészett a kódot, azt hiszem, csak be egy jegyet a fejlesztő csapat, és felkéri őket arra, hogy világosabban API ¬¬

Megjegyzés: Az összes fájl olvasás itt történik szinkron módon. Ez rossz, nagyon rossz, a teljesítmény tekintetében. Nem tudom pontosan, hogy mit tervez csinálni, de nem tudtam ajánlani annál, hogy megtalálja a módját, hogy ezt aszinkron, ha lehetséges.

Válaszolt 03/10/2012 23:52
a forrás felhasználó

szavazat
2

Jelenleg nem lehet elérni a válogatás csak azáltal, hogy előírják, és hívja összeállítani. Ha nézd meg a harness.ts van egy fordító modul, amely egy meglehetősen egyszerű módja, hogy de én azt javaslom, hogy hívja a TSC külsőleg.

///<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);
    }
});

Úgy vélem, ez elvégzi a munkát.

Válaszolt 03/10/2012 23:01
a forrás felhasználó

szavazat
1

Kipróbálhat https://github.com/sinclairzx81/typescript.api . Ez a projekt nem a require () kiterjesztése cucc, de van néhány alkalmassága összeállításához ts forrás kézzel. Lehetővé kell tenni, hogy hozzon létre egy automatizált rendszert épít vele.

figyelmét tho annak épülő géppel 0,9 fordító, így lehet, hogy nem a siker összeállítása 0.8.3 forrásból kapott különböző frissítéseket a nyelvet.

Válaszolt 13/05/2013 12:03
a forrás felhasználó

szavazat
1

jobban megkövetelik segíthet elérni ezt, ha az összes kívánt végrehajtó / hozzáférés a géppel fájlt.

Ez lehetővé teszi, hogy a require () géppel fájlokat - nincs előre összeállítás szükség - és egy csomó más formátumok (coffeescript, clojurescript, YAML, xml, stb)

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

Disclosure: írtam jobban megkövetelik.

Válaszolt 01/11/2012 16:06
a forrás felhasználó

szavazat
1

Ellenőrizze ezt GitHub projekt által niutech, akkor konvertálni géppel kódot JS kódot a légy a böngésző , de azt hiszem, könnyen módosítható dolgozni node.js.

Válaszolt 07/10/2012 07:41
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more