2017-01-27 171 views
9

我使用的打字稿與AMD和require.js,但我不能得到打字稿編譯器輸出加載模塊後將執行的代碼。打字稿與AMD和require.js

這是main.ts

import { foo } from './bar'; 

foo('world'); 

這是bar.ts

export function foo(name: string) { 
    alert('Hello ' + name); 
} 

我用下面的tsconfig.json文件編譯如下:

{ 
    "compilerOptions": { 
     "alwaysStrict": true, 
     "module": "amd", 
     "outFile": "client.js", 
     "target": "es5" 
    }, 
    "files": [ 
     "main.ts" 
    ] 
} 

,包括它在我的HTML這樣的:

<script data-main="client/client.js" src="/static/require.js"></script> 

然而,生成的JavaScript代碼如下所示:

define("bar", ["require", "exports"], function (require, exports) { 
    "use strict"; 
    function foo(name) { 
     alert('Hello ' + name); 
    } 
    exports.foo = foo; 
}); 
define("main", ["require", "exports", "bar"], function (require, exports, bar) { 
    "use strict"; 
    bar.foo('world'); 
}); 

一切都很好,除了一個事實,即我想在main模塊中直接執行代碼。所以,最後的定義應該是

define(["require", "exports", "bar"], ... 

,而不是

define("main", ["require", "exports", "bar"], ... 

目前,我需要用JavaScript編寫的第三腳本只是加載main模塊,我認爲這是不好的風格有main模塊作爲可重複使用的代碼。

如何獲取打印機編譯器輸出main.ts作爲可執行文件定義而不是模塊定義?

回答

-1

當您使用'導入...'時,TypeScript將編譯AMD模塊,如顯示在您的問題中。您可以嘗試下面的代碼(也請查看本教程:http://www.codebelt.com/typescript/typescript-amd-with-requirejs-tutorial/)以驗證它是否會產生您要求的輸出結果?

/// <reference path="[YOUR IMPORT FILE]" /> 
/// ... 

/** 
* Main entry point for RequireJS 
*/ 
require(
    [ 
     // YOUR IMPORT DEFINITIONS 
    ], 
    (/* YOUR IMPORT VARIABLES */) => { 
     'use strict'; 

     // YOUR CODE HERE 
    } 
); 
+1

請勿使用帶有模塊的'/// <參考路徑=「[您的導入文件]」/>'。只是'輸入'他們。 –