我試圖建立在打字稿中寫入的小sdk庫。我的想法是創建一個項目,將包含編譯成一個JS許多TS文件和我的媒體庫可以像foo.bar.myPublicClasses建立與打字稿的小sdk到一個js文件
訪問 我不想用它簡單的html頁面最大此言一出,我的環境是Dynamics CRM,因此包括JavaScript在內的標準HTML腳本包含標記中沒有完成,並且加載JavaScript是使用Dynamics CRM的構建框架異步完成的。所以這就是爲什麼我需要將我的庫綁定到一個文件。 因此,總結我需要一個捆綁js文件沒有任何依賴d.ts文件,所以它可以在其他打字稿文件重用。 另外從運行動態CRM我需要的任何全局函數我的js代碼,我的做法是對類foo.bar.mylibrary.sdk.create()一些靜態函數
我的項目結構看起來是這樣的:
src/ |-bundle.ts |-classes/ | |-classA.ts | |-classB.ts | |-interfaces/ | |-IInterface1.ts | -IInterface2.ts | |-Helpers/ | |-HelperA.ts | |-HelperA.ts | dist/ | -myLibrary.js
我想有.ts文件更像我會寫我的C#代碼每班等
版本一個文件1個 我最初的方法是使用命名空間,但我不知道,如果那將是長遠項目中最好的方式。在apporach我寫我的名字空間的所有TS文件只有一個不好的氣味對我來說,在合併js文件每個TS文件會寫
//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
}
}
}
編譯成
"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 = {}));
也許有到更好的辦法編譯這些ts文件。
我tsconfig包含模塊 - CommonJS的,OUTPUTFILE - myLibrary.js
2版 根據打字稿文檔它會更好,現在使用外部模塊,但我不知道是否編譯JS是什麼我會看到沒有導出的類被編譯爲簡單的var對象和導出的類都在定義的函數中。
//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);
});
然後我需要捆綁我需要的模塊,但我不知道該怎麼做,在適當的方式。
我tsconfig包含模塊 - AMD,OUTPUTFILE - myLibrary.js
我想完成我的圖書館我應該吞下或一些其他的工具包,但任何人都可以給我一些提示或如何做到這一點?
是您output.js文件中加載客戶端的一個動態CRM窗體或正在運行它通過節點的服務器端(或其他)? –
只在客戶端 – ANDyW