2017-01-27 31 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

请勿使用带有模块的'/// <参考路径=“[您的导入文件]”/>'。只是'输入'他们。 –