2017-08-01 12 views
5

Tôi đang cố gắng xây dựng thư viện sdk nhỏ được viết bằng bản ghi. Ý tưởng của tôi là tạo dự án chứa nhiều tệp ts biên dịch thành một js và thư viện của tôi có thể truy cập như foo.bar.myPublicClassesXây dựng sdk nhỏ với các bản ghi vào một tệp js

Ghi chú lớn nhất Tôi không muốn sử dụng nó trên các trang html đơn giản, môi trường của tôi là Dynamics CRM, do đó, bao gồm JavaScript không được thực hiện trong thẻ html script thông thường bao gồm và việc tải JavaScript được thực hiện trong không đồng bộ với khung công tác xây dựng của Dynamics CRM. Vì vậy, đó là lý do tại sao tôi cần phải gói thư viện của tôi vào một tệp. Vì vậy, để tóm tắt, tôi cần một tệp js kèm theo mà không có bất kỳ phụ thuộc nào với tệp d.ts quá nên có thể được sử dụng lại trên các tệp bản ghi khác. bổ sung để chạy mã js của tôi từ Dynamics CRM Tôi cần bất kỳ chức năng toàn cầu, cách tiếp cận của tôi sẽ có một số chức năng tĩnh trên lớp foo.bar.mylibrary.sdk.create()

cấu trúc dự án của tôi có thể trông như thế này:

 

src/ 
|-bundle.ts 
|-classes/ 
| |-classA.ts 
| |-classB.ts 
| 
|-interfaces/ 
| |-IInterface1.ts 
| -IInterface2.ts 
| 
|-Helpers/ 
| |-HelperA.ts 
| |-HelperA.ts 
| 
dist/ 
| -myLibrary.js 

tôi muốn có các file .ts hơn như tôi sẽ viết # mã C của tôi một tập tin mỗi lớp vv

Phiên bản 1 cách tiếp cận ban đầu của tôi là sử dụng không gian tên nhưng tôi không chắc chắn nếu đó sẽ là cách tốt nhất để làm điều đó trong thời gian dài của dự án. trong apporach mà tôi viết tất cả các file ts trong không gian tên của tôi chỉ có một mùi khó chịu đối với tôi là ở kết hợp js nộp mỗi ts tập tin sẽ viết

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

biên dịch để

"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 = {})); 

Có lẽ đó là cách tốt hơn để biên dịch các tệp ts đó.

tsconfig tôi chứa mô-đun - commonjs, outputfile - myLibrary.js

Phiên bản 2 Theo tài liệu đánh máy nó sẽ là tốt hơn bây giờ để sử dụng các module bên ngoài, nhưng tôi không chắc chắn nếu js biên soạn là những gì Tôi sẽ thấy các lớp không được xuất khẩu được biên dịch thành đối tượng var đơn giản và lớp xuất khẩu là các hàm được định nghĩa.

//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"; 

biên dịch để

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

Và sau đó tôi cần phải bó module cần thiết của tôi, nhưng tôi không biết làm thế nào để làm điều đó theo cách thích hợp.

tsconfig tôi chứa mô-đun - amd, outputfile - myLibrary.js

tôi giả để hoàn thành thư viện của tôi, tôi phải nuốt nước bọt hoặc một số công cụ khác, nhưng bất cứ ai có thể cho tôi một số gợi ý hoặc làm thế nào để làm điều đó?

+0

là tập tin output.js của bạn được nạp client-side trên một hình thức Dynamics CRM hoặc là nó chạy server-side qua Node (hoặc khác)? –

+0

chỉ trên client-side – ANDyW

Trả lời

0

đây là tsconfig.json của tôi và nó chỉ transpiles đến một js đơn nộp

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

Giống như tôi đã viết trong câu hỏi của tôi và ví dụ được đăng, tôi biết cách biên dịch ts thành một js bằng tsconfig, nhưng nó hoạt động gần như hoàn hảo chỉ với phiên bản 1 khi tôi sử dụng không gian tên. lớp như định nghĩa. – ANDyW

Các vấn đề liên quan