Gépelt: Több projektet oldatban

szavazat
10

Végeztem portolása egy JavaScript könyvtár géppel Visual Studio 2012. Minden minden 60 osztály, minden osztály meghatározott saját .ts fájlt.

Minden osztályban vannak definiálva az adott modulban. ÉN használ referencia észrevételeket reder osztályok meghatározott más fájlokat. Az elrendezés minden fájl így néz ki:

///<reference path='./../myotherclass.ts' />

module MyModule {

    export class MyClass {
        ...
    }

}

Most már létrehozott egy második projekt ugyanabban az oldatban, amely fogja a tényleges alkalmazást portolták én újonnan könyvtárban. Azt kell tartalmaznia én könyvtáram valahogy, és azt hiszem, ez az, amit a modul rendszer számára. Én azonban nem vagyok biztos benne, mi fájl (ok) az import, mint MyModule elosztva több tucat fájlokat. Ez az, amit tudok használni a .d.ts fájlt?

Továbbá, hogy képes legyen egy modult, meg kell állapítani, az „export” kulcsszó, de ha megteszem, akkor nem talált referenciaként megjegyzéseket többé.

Mindennek tetejébe, hogy a két projektet kell összeállítani, hogy a fordító kimenete is jól használhatók a module loader mint requireJS.

Mi a legjobb megoldás, hogy mindezt teljesíteni?

Köszönöm!

A kérdést 07/10/2012 16:41
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
9

Ok, hadd kezdjem azzal, hogy „Module” különböző dolgokat jelenthet. Például ott van a „modul minta”, amely az, amit a „MyModule” teremt. Amennyire én gyűjteni, írógéppel utal ezekre, mint „belső modulok” a nyelvi spec, és ezek különböznek a „Külső modulok”, hogy lenne berakodás valami hasonló RequireJS. A fő különbség az, hogy a külső modulok számíthat arra, hogy a saját elszigetelt környezetben egy előre meghatározott „export” tárgy tudják használni exportáló működésére.

Vessen egy pillantást a kimenetét a modul:

var MyModule;
(function (MyModule) {
    var MyClass = (function () {
        function MyClass() { }
        return MyClass;
    })();
    MyModule.MyClass = MyClass;    
})(MyModule || (MyModule = {}));

Azt láthatjuk, hogy az exportáló dolgokat „MyModule”, ami lesz világszerte elérhető más script fájlokat betölteni, például egy html „script” blokk. Az, hogy Ön említette meg 60 ilyen, akkor valószínűleg azt is beállítani, hogy a fordító kimeneti egy fájlt, amit magában a jelölésben, nem tölti be minden fájlt egyenként.

Továbblépve, megnézzük, mi történik a kibocsátás, ha megváltoztatja a modul nyilatkozata „modul MyModule {...}”, hogy „export modul MyModule {...}”:

(function (MyModule) {
    var MyClass = (function () {
        function MyClass() { }
        return MyClass;
    })();
    MyModule.MyClass = MyClass;    
})(exports.MyModule || (exports.MyModule = {}));

Amint látod, a modul még mindig a „modul minta”, de ez van rendelve tagjaként „export”, jelezve, hogy ez azt jelentette, hogy kell terhelni, például csomópont „szükséges” funkciót.

Ebben az esetben, amit szeretne, hogy ténylegesen használni a modul ezt a kódot:

import wrapper = module("./MyModule");
var instance = new wrapper.MyModule.MyClass();

Megjegyzés: A „./MyModule” név valójában utal, hogy a fájlnév (mínusz a Js kiterjesztés) a modul határozza meg (ez az, amiért VS-t, mondván, hogy nem találtunk ezen modulok az Ön számára). A kódot összeállítani, hogy valami ilyesmit:

var wrapper = require("./MyModule");
var instance = new wrapper.MyModule.MyClass();

Ahhoz, hogy hozzá ez, akkor már nem is igazán kell semmit a „modul” kulcsszó, hogy egy modult. Lehet egyszerűen csak exportálni egy funkciót:

// foo.ts
export function foo() {
    ...
};

// some other file in the same dir
import wrapper = module("./foo");
var result = wrapper.foo();

Ez azért működik, mert a függvény „asztal” lesz közvetlenül hozzá a „kivitel” amelyet alias „wrapper” a másik állományba.

Ahhoz, hogy add tovább erre zavaros káosz a modullal kapcsolatos dolgokat, azt kell megemlíteni, hogy az AMD modulok különböző mindig, mert aszinkron betöltésekor ellentétben csomópont „szükséges”. Ahhoz, hogy géppel kimeneti azokat akkor kell átadni a „--module AMD” paramétert a fordító.

Mindegy, remélem elmagyarázta a helyzetet elég jól ahhoz a ponthoz, képes lesz arra, hogy kitaláljuk, hogy pontosan mi van szüksége / akar. A típus a modulok végén segítségével valóban attól függ, hogyan fogod használni őket ... azaz csomópont, web, vagy valami a kettő keveréke.

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

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