2

我正在制作一个 HTML5 游戏引擎。只有一个文件应该包含在 HTML 文件中,即 engine.js。该脚本应该创建一个全局 Engine 对象,用户可以在其他脚本中使用该对象。Engine 对象是引擎中所有类和函数的包装器,但是,我想将引擎分成不同的文件。我认为如果所有都应该由用户包含,那会有点草率,那么我怎样才能让 engine.js 自动包含呢?

(类似于 Node.js 中的 require() 。)

4

3 回答 3

4

看看 RequireJS。这是一个符合您要求的库。

于 2012-06-25T13:04:37.153 回答
2

您拥有的一种选择是使用 javascript 到 javascript 编译器,例如Closure Tools。使用 RequireJs,您的客户端仍将创建多个 http GET 来获取每个文件(IIRC),使用关闭工具,您的单独 javascript 文件将合并为一个(也缩小并去除死代码。)

这有优缺点,其中一些缺点包括,

  • 减少用户缓存的重用
  • 如果您更改任何一个文件,则完全重新加载
于 2012-06-25T13:15:09.493 回答
1

纯 JavaScript 方法并不像您想象的那么简单,因为 JS 只有在飞行前检查完成后才能发挥其魔力。包括带有 JavaScript 的脚本是可能的;但是,使用“全局范围”比其他方式更加禁止使用。

window.onload = function()
{
    var newScript = document.createElement('script');
    newScript.type = 'text/javascript';
    newScript.src = 'scripts/yourScript.js';
    newScript.onload = yourNormalOnload;
    // or newScript.onreadystatechange = yourNormalOnload;
    document.body.appendChild(newScript);
}

function yourNormalOnload()
{
    //use whatever functions declared in yourScript.js here
}

在此示例中,yourNormalOnload函数将是您的脚本,但为了能够访问您即时获得的脚本,您必须将其全部包装在一个回调函数中,一旦包含的脚本被加载,该函数就会被调用。值得庆幸的是,附加脚本会触发onloadoronreadystatechange事件,因此您可以监听它。


您可能想阅读响应,代码几乎相同,但提供的解释比我做的要多得多。

于 2012-06-25T13:18:32.013 回答