Typescript NodeJS Modülü Erişim için açık bir Kamu API sağlar mı?

oy
11

Bir düğüm uygulaması içinden yapmak istiyorum:

var typeScript = require('typescript'); 

typeScript.compile('...')

Ben bir yapı sistemi içine ancak bir kamu API (typescript.compile, vs) bu imkansız erişimi olmayan derleyici uygulamak için arıyorum.

Aşağıda Brunch.io build-sistem için yazılmış bir eklenti utilitized LiveScript değil, daktilo için olsa İşte ben yapmak istiyorum ne daha eksiksiz bir örnek verilmiştir:

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

Herkes bir iş çevresinde bulursa Meraklı?

Güncelleştirme

Yukarıda ve başka yerlerde listelenen sorunları çeşitli için kendi çözümünü uygulayan sona erdi. Bakınız https://github.com/damassi/TypeScript-Watcher Daha fazla bilgi ve kullanım için.

Oluştur 03/10/2012 saat 22:40
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
8

Bu seferki biraz hacky ama çalışacaktır.

Bu aynı dün düşündü ve onların kod kontrol ediyordu. Onların Sourcecode gelen bin / typscript.js kontrol ederseniz, o TypeScript.TypeScriptCompiler oluşturur göreceksiniz ve sonra bu derleme bir yolunu maruz ETMEZ olduğunu göreceksiniz (Bu kod neredeyse 21k çizgilerle, çok çok büyük bir dosyadır) .

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

Şimdi, bunu açığa çıkarmak için kolay bir yol gerekir. Bunu yapmak için, bu hacky neden olduğu kodlarını değiştirmek zorunda kalacaktır. Bunu yapmak için, ekleyerek typescript.js değiştirebilir:

module.exports = exports = TypeScript;

Sağ dosyanın sonuna.

(Haber: tüm bu yerel kapsamda modülü yükleyin: "npm typescript yükle") Daha sonra, modül kök bir index.js dosyası oluşturabilir, nesneyi arzeder.

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

Ve hazır! Şimdi sadece diyoruz ve bunu kullanarak kodunuzu derlemek. Sen tsc.js dosyasında derleme için API nasıl kullanılacağını kontrol edebilirsiniz.

İleride korkunç kodu için şimdiden özür dileriz:

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

kodunu kim yazdıysa nedense C # gerçek bir hayranıydım ve önde gitmek için ilerledi ve kullanım yöntemleri aslında sadece sargı olan, hangi WriteLine'ı Yakın ve yaz denilen için. Bu işlevler eklemek zorunda yükü bu alabilir, ancak modülünde kod çok değiştirmek zorunda kalacak ve buna değer değildir. Bunun uzatmak için bir sınıf için en iyi olduğunu düşünüyorum (veya JS hala eğer, prototip miras) ve buna KURU yapmak, sizin için yapalım.

gerçekten güzel bir şey mi 500 typescript dosyaları çevirmek ve tek .js dosyası içine hepsini koymak istiyorsanız, sadece compiler.addUnit (anothercontent, anotherpath) çağırabilir olmasıdır; Daha sonra 500 kez ve tüm görmek tek bir dosya haline gitmek :)

daha iyi şeyler üzerinde yoğunlaşırken: Eğer tsc.js kodunu kontrol ederseniz, bir toplu derleyici sınıf bulacaksınız. Eğer bir yapı süreci için bu isterseniz, öyle daha sağlam bir şey kullanmak daha iyi olabilir. Bu izliyor dosyaları ve daha sağlar.

kodunu göz olması, ben sadece geliştirme ekibine bir ticket ve daha net bir API sağlamak için onlara sormak düşünüyorum ¬¬

Not: Tüm dosya burada okuyan bir senkron bir şekilde yapılır. Bu performans açısından çok kötü, kötü. Ne yapmayı planlıyorsunuz tam olarak ne olduğunu bilmiyorum, ama mümkünse bu uyumsuz hale getirmek için bir yol bulmak olduğunu daha tavsiye olamazdı.

Cevap 03/10/2012 saat 23:52
kaynak kullanıcı

oy
2

Şu anda sadece bir ihtiyaç olan ve derlemek arayarak bir derleme elde etmek mümkün değildir. Eğer harness.ts bakabilirsiniz varsa orada bunu yapmanın oldukça basit bir yol sağlayan derleyici modülüdür ama dışarıdan tsc aramak öneririz.

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

Bu işi yapacağını düşünüyoruz.

Cevap 03/10/2012 saat 23:01
kaynak kullanıcı

oy
1

Sen deneyebilirsiniz https://github.com/sinclairzx81/typescript.api . Bu proje gerektiren () uzantısı şeyler yapar, ama aynı zamanda el ile ts kaynağı derlemek için bazı işlevleri vardır. O onunla bir otomatik yapı sistemi oluşturmak mümkün olmalıdır.

Eğer yoksa başarı diline 0.8.3 kaynak verilen çeşitli güncellemeler derleme olabilir veya olmayabilir, bu yüzden onun typescript 0.9 derleyici üzerine inşa tho not edin.

Cevap 13/05/2013 saat 12:03
kaynak kullanıcı

oy
1

Daha iyi-gerektiren bunu elde yardımcı olabilir size / yürütme typescript dosyalarına erişmek isteyen tüm eğer.

Size () typescript dosya gerektirir sağlar - hiçbir ön derleme gerekli - ve diğer dosya formatları (CoffeeScript, clojurescript, YAML, xml, vs.) bir demet

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

Açıklama: Ben yazdım daha iyi gerektirir.

Cevap 01/11/2012 saat 16:06
kaynak kullanıcı

oy
1

Kontrol bu github projesini o anında JS koduna typescript kodunu dönüştürebilir, niutech tarafından tarayıcıda , ama kolayca node.js. çalışmak için değiştirilebilir olabilir tahmin

Cevap 07/10/2012 saat 07:41
kaynak kullanıcı

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