立即在browserify中调用表达式

时间:2014-08-28 21:42:41

标签: javascript node.js browserify

我将browserify与node.js结合使用,以便在js文件中使用require()。

我在game.js中有这段代码:

var game = new Phaser.Game(800, 600, Phaser.AUTO, 'snakeGame');

var menuState = require('./menuState.js');
var gameState = require('./gameState.js');

game.state.add('menuState', menuState);
game.state.add('gameState', gameState);
game.state.start('menuState');

如果我执行browserify game.js -o bundle.js,这段代码将包含在一个立即调用的表达式中,并且所有必需的js文件或多或少地连接到此bundle.js

如何在所有必需的js文件中使用游戏变量?由于变量game的bundle.js在IIFE范围内,我无法访问它。我怎么能把它放在这个范围之外呢?

编辑:我认为迈克的解决方案也会奏效。但我有点愚蠢,所以我不得不在全球范围内定义游戏,而不是在前面,这就是诀窍......

2 个答案:

答案 0 :(得分:1)

将其附加到window对象。

window.game = game;

答案 1 :(得分:1)

如果您想在其他地方访问您的游戏对象,请将其导出:

module.exports = game;

如果这为您提供了循环依赖,那么您在应用程序的体系结构中有一些需要改进的地方(如果您的体系结构很好并且您具有循环依赖性,您仍然可以提出问题)

从那时起:

  • 如果您想从 bundle.js 中捆绑的其他文件访问游戏对象,

    只需var game = require('game');

  • 如果您想访问在同一页面中加载的其他脚本

    • 使用require:

      使用browserify -r ./game.js -o bundle.js构建

      使用var game = require('./game.js');

      访问其他脚本

      Example

    • 使用require,为模块提供别名:

      使用browserify -r ./game.js:game -o bundle.js构建

      使用var game = require('game');

      访问其他脚本

      Example

    • 不需要:

      使用browserify -s game ./game.js -o bundle.js构建

      使用window.game

      访问其他脚本

      Example