3

我对 game.ts 文件编译成的 game.js 代码有问题:

var GameObjects = require("./GameObjects")

我已经将我的页面 index.html js 导入设置为:

<script language="javascript" src="javascripts/require.js" type="text/javascript"> </script>
<script language="javascript" src="javascripts/jquery-1.8.2.min.js" type="text/javascript"> </script>
<script language="javascript" src="ts/GameObjects.js" type="text/javascript"> </script>
<script language="javascript" src="ts/game.js" type="text/javascript"> </script>

这是chrome中的错误:

Uncaught ReferenceError: exports is not defined GameObjects.js:82
Uncaught Error: Module name "GameObjects" has not been loaded yet for context: _. Use require([]) http://requirejs.org/docs/errors.html#notloaded

有什么想法的朋友吗?

4

2 回答 2

5

我不确定手动编辑 JavaScript 文件的想法从何而来。如果您使用--module amd标志编译 TypeScript,则不需要编辑 JavaScript 文件,因为import语句将被转换为require语句。

您在页面上需要的唯一脚本标记是:

<script src="javascripts/require.js" data-main="ts/game.js"></script>

一旦 require.js 被加载,它就会加载 game.js,每当它遇到一个require语句(这是你import在 TypeScript 文件中的语句)时,它就会加载那个脚本,然后执行代码。

import您可以通过在 TypeScript 文件中添加语句来加载 jQuery 和 GameObjects 以及任何其他模块。

于 2012-12-14T16:25:23.040 回答
3

data-main您的 require.jsscript标记中没有属性。请仔细阅读RequireJS 文档

简而言之:您应该ts/GameObjects.js从顶级require调用加载,您将其放入data-main属性中指定的文件中。例如(来自文档):

<!DOCTYPE html>
<html>
    <head>
        <title>My Sample Project</title>
        <!-- data-main attribute tells require.js to load
             javascripts/main.js after require.js loads. -->
        <script data-main="javascripts/main" src="javascripts/require.js"></script>
    </head>
    <body>
        <h1>My Sample Project</h1>
    </body>
</html>

然后在javascripts/main.js(实际上,您可以随意调用它,只要它与您放入的内容相匹配data-main),调用require并加载您的模块,然后对它们做任何您想做的事情:

require(["ts/GameObjects.js", "ts/game.js"], function(GameObjects, Game) {
  ... use 'GameObjects' and 'Game' here ...
});

请记住,ts/GameObjects.jsts/game.js需要将代码包装在define()调用中,以便将它们解释为模块。

希望有帮助。

于 2012-12-14T00:14:14.047 回答