# 模块化
快手小游戏 Runtime 实现了 CommonJS module 语义。开发者可以将游戏代码分散在各个 js 模块中(一个文件就是一个独立模块),然后通过 require
调用引用其他游戏模块中的代码。
通过 require
函数引用模块时,Runtime 模块作用域内预创建 module
, module.exports
, exports
(exports
等于 module.exports
) 对象,想要暴露模块内的变量给外部分模块使用时,需要将内部变量挂在 module.exports
或 exports
预定义对象下。
示例如下:
/// in example.js
console.log("evaluating example.js");
var invisible = function () {
console.log("invisible");
}
// 导出外部模块可引用的变量或函数
exports.message = "hi";
exports.say = function () {
console.log(exports.message)
}
/// in main.js, 通过 require 引用外部模块
var example = require('./example.js')
/// example 文件代码将会被执行,并且 example 的值如下:
{
message: "hi",
say: [Function]
}
# 模块作用域
模块(文件)拥有独立作用域,模块内的局部变量只在模块内有效,想要暴露模块内的变量给外部分模块使用,必须将变量挂在 module.exports 或 exports 预定义对象下。
# 模块缓存
# 全局对象
快手小游戏 Runtime 提供 GameGlobal
全局对象, 同时为了方便开发者判断当前 Runtime 是否为快手小游戏,平台提供了 KSGameGlobal
全局对象.
GameGlobal.gloalValue = 'GLOBAL_VALUE'
//平台推荐的判断运行环境是否为快手小游戏的方法
let isKSMiniGame = typeof KSGameGlobal != 'undefined'