# 模块化

快手小游戏 Runtime 实现了 CommonJS module 语义。开发者可以将游戏代码分散在各个 js 模块中(一个文件就是一个独立模块),然后通过 require 调用引用其他游戏模块中的代码。

通过 require 函数引用模块时,Runtime 模块作用域内预创建 module, module.exports, exports (exports 等于 module.exports) 对象,想要暴露模块内的变量给外部分模块使用时,需要将内部变量挂在 module.exportsexports 预定义对象下。

示例如下:

/// 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'