我正在制作一个 HTML5 游戏引擎。只有一个文件应该包含在 HTML 文件中,即 engine.js。该脚本应该创建一个全局 Engine 对象,用户可以在其他脚本中使用该对象。Engine 对象是引擎中所有类和函数的包装器,但是,我想将引擎分成不同的文件。我认为如果所有都应该由用户包含,那会有点草率,那么我怎样才能让 engine.js 自动包含呢?
(类似于 Node.js 中的 require() 。)
我正在制作一个 HTML5 游戏引擎。只有一个文件应该包含在 HTML 文件中,即 engine.js。该脚本应该创建一个全局 Engine 对象,用户可以在其他脚本中使用该对象。Engine 对象是引擎中所有类和函数的包装器,但是,我想将引擎分成不同的文件。我认为如果所有都应该由用户包含,那会有点草率,那么我怎样才能让 engine.js 自动包含呢?
(类似于 Node.js 中的 require() 。)
看看 RequireJS。这是一个符合您要求的库。
您拥有的一种选择是使用 javascript 到 javascript 编译器,例如Closure Tools。使用 RequireJs,您的客户端仍将创建多个 http GET 来获取每个文件(IIRC),使用关闭工具,您的单独 javascript 文件将合并为一个(也缩小并去除死代码。)
这有优缺点,其中一些缺点包括,
纯 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
函数将是您的脚本,但为了能够访问您即时获得的脚本,您必须将其全部包装在一个回调函数中,一旦包含的脚本被加载,该函数就会被调用。值得庆幸的是,附加脚本会触发onload
oronreadystatechange
事件,因此您可以监听它。
您可能想阅读此响应,代码几乎相同,但提供的解释比我做的要多得多。