2017-08-01 19 views
5

Ben typescript yazılmış küçük sdk kitaplığı oluşturmaya çalışıyorum. Benim fikrim olacak bir js için derlemek birçok ts dosyaları içeren bir proje oluşturmak için ve benim kütüphane foo.bar.myPublicClassesBir js dosyası için typescript ile küçük sdk oluşturun

gibi erişim olabilir Basit html sayfalarında kullanmak istemiyorum

Büyük sözler, ortamım Dynamics CRM'dir, bu yüzden JavaScript dahil değildir, normal html komut dosyasında etiket bulunur ve JavaScript yükleme, Dynamics CRM'nin yapı çerçevesiyle eşzamansız olarak yapılır. İşte bu yüzden kütüphanemi bir dosyaya ayırmam gerekiyor. Özet olarak, d.ts dosyasıyla herhangi bir bağımlılık olmadan bir paketli js dosyasına ihtiyacım var, bu yüzden diğer yazı dosyalarında yeniden kullanılabilir. Ben herhangi bir küresel işlev gerekir Dynamics CRM benim js kod çalıştırmasına Ek , yaklaşımım sınıf foo.bar.mylibrary.sdk.create() bazı statik işlev olacağını

aşağıdaki gibi görünebilir Projem yapısı:

 

src/ 
|-bundle.ts 
|-classes/ 
| |-classA.ts 
| |-classB.ts 
| 
|-interfaces/ 
| |-IInterface1.ts 
| -IInterface2.ts 
| 
|-Helpers/ 
| |-HelperA.ts 
| |-HelperA.ts 
| 
dist/ 
| -myLibrary.js 
Ben 1 benim ilk yaklaşma ad kullanmak benim C# kodu vs. sınıfının

Versiyon başına bir dosyayı yazardı ama emin değilim gibi daha ts dosyaları istiyorum

Uzun vadede bunu yapmanın en iyi yolu bu olurdu. O apporach içinde benim ad alanındaki tüm ts dosyalarını yazmak benim için tek bir kötü koku js kombine dosyası içinde her dosya

"use strict"; 
// b.ts 
var foo; 
(function (foo) { 
    var bar; 
    (function (bar) { 
     var mylibrary; 
     (function (mylibrary) { 
      var a = (function() { 
       function a() { 
       } 
       return a; 
      }()); 
      var b = (function() { 
       function b() { 
        var test = new a(); 
        test.isOk = false; 
       } 
       return b; 
      }()); 
      mylibrary.b = b; 
     })(mylibrary = bar.mylibrary || (bar.mylibrary = {})); 
    })(bar = foo.bar || (foo.bar = {})); 
})(foo || (foo = {})); 
var foo; 
(function (foo) { 
    var bar; 
    (function (bar) { 
     var mylibrary; 
     (function (mylibrary) { 
      var sdk = (function() { 
       function sdk() { 
       } 
       sdk.Create = function() { 
        //initialize my sdk 
       }; 
       return sdk; 
      }()); 
      mylibrary.sdk = sdk; 
     })(mylibrary = bar.mylibrary || (bar.mylibrary = {})); 
    })(bar = foo.bar || (foo.bar = {})); 
})(foo || (foo = {})); 

Belki daha iyi bir yol yoktur için

//a.ts 
namespace foo.bar.mylibrary{ 
    class a { 
     isOk:boolean; 
    } 
    export class b { 
     constructor(){ 
      let test = new a(); 
      test.isOk = false; 
     } 
    } 
} 
//b.ts 
namespace foo.bar.mylibrary{ 
    export class sdk{ 
     public isStart:boolean; 
     public static Create(){ 
      //initialize my sdk 
     } 
    } 
} 

derlemek yazardı ts olmasıdır ts dosyalarını derleyin. outputfile commonjs, - -

benim tsconfig modülü içeriyor dış modülleri kullanmak artık daha iyi olurdu typescript belgelerine göre myLibrary.js

Sürüm 2 fakat derlenen js olup olmadığından emin değilim Dışa aktarılan sınıfların basit var nesnesine derlendiğini ve dışa aktarılan sınıfın tanımlanmış işlevlerde olduğunu görmekteyim.

//a.ts 
    class a { 
     isOk:boolean; 
    } 
    export class b { 
     constructor(){ 
      let test = new a(); 
      test.isOk = false; 
     } 
    } 

//b.ts 

    export class sdk{ 
     public isStart:boolean; 
     public static Create(){ 
      //initialize my sdk 
     } 
    } 
//build.ts 
export {sdk} from "./src/b"; 

define(["require", "exports", "./src/classb"], function (require, exports, classb_1) { 
    "use strict"; 
    function __export(m) { 
     for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; 
    } 
    Object.defineProperty(exports, "__esModule", { value: true }); 
    // export * from "./src/classa"; 
    __export(classb_1); 
}); 

için derlemek Sonra benim gerekli modülleri bir araya getirmek gerek ama düzgün şekilde nasıl yapılacağını bilmiyorum. myLibrary.js benim kütüphanesini Yutkunuyorum gerekir veya başka bir araç seti başarmak için varsayalım

, ama herkes bana bazı ipuçları veya nasıl yapılacağını verebilir - outputfile amd -

benim tsconfig modülü içeriyor?

+0

dosyası tek js için transpiles veya Devresi tarafından sunucu tarafında çalışan (veya diğeri)? –

+0

yalnızca istemci tarafında – ANDyW

cevap

0

bu benim tsconfig.json olduğunu ve sadece Dynamics CRM formdaki istemci tarafında yüklenen sizin output.js dosyasını mi

{ 
    "compilerOptions": { 
    "module": "amd", 
    "target": "es5", 
    "sourceMap": true, 
    "outFile": "../public/js/yourfile.js" 
    }, 
    "exclude": [ 
    "node_modules", 
    "typings" 
    ] 
} 
+0

Sorguda yazdığım gibi ve örnek olarak tsconfig ile ts'yi nasıl bir js olarak derleyeceğimi biliyorum, ancak ad alanı kullandığımda hemen hemen yalnızca 1 sürümüyle çalışıyor, dış modüller yalnızca dışa aktarılıyor tanımlandığı gibi sınıf. – ANDyW

İlgili konular