2014-08-28 25 views
0

我将browserify与node.js结合使用,以便我可以在我的js文件中使用require()。立即在browserify中调用表达式

我有这样一段代码在我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文件中使用游戏变量?由于bundle.js var game位于IIFE范围内,因此我无法访问它。我怎么能把它放在这个范围之外?

编辑:我认为麦克c的解决方案也会有效。但我有点愚蠢,所以我只是在全球范围内定义游戏而没有前盈利,那就做了诡计......

+0

browserify -s game ./game.js -o bundle.js

访问对于它的价值,而无需在前面的'var'分配变量[实际上并重视它到窗口对象](http://jsfiddle.net/890h84os/)。很高兴你找到了解决方案。 – 2014-09-02 16:05:44

回答

1

将它附加到window对象上。

window.game = game; 
1

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

module.exports = game; 

如果给你循环依赖,你有什么在你的应用程序的架构来提高(如果你的架构是罚款,你有循环依赖,你仍然可以提出问题)

从这一点:

  • 如果要从其他文件中访问游戏对象,也捆绑在捆绑包中。JS

    根本就var game = require('game');

  • 如果你想在同一页面

    • 装入了其他脚本访问要求:

      建立与browserify -r ./game.js -o bundle.js

      访问在其他脚本中使用var game = require('./game.js');

      Example

    • 有了需要,给一个别名到模块:

      建立与其他脚本browserify -r ./game.js:game -o bundle.js

      访问与var game = require('game');

      Example

    • 不要求:

      建立与在其他脚本与window.game

      Example

+0

这是令人难以置信的错误。 'module.exports'会将它作为一个模块公开,但是OP暗示他们希望在捆绑过程之后将它暴露出来,即不想作为模块访问它。由于OP使用Browserify,我假定他们知道如何公开模块。此外,如果使用require('game')'试图访问它,将在node_modules中搜索一个名为'game'的模块,如果它们使用基于Node.js的设置而不是访问它们的本地文件(而不是使用'require (” ./game.js')')。 – 2014-08-29 01:04:34

+0

@MikeC我的解释可能不够清楚,但我在发布前尝试过,它的工作原理。我的第二点是致力于在捆绑过程之后公开游戏对象_。如果我们使用基于Node.js的设置,require('game')'可能会在node_modules中查找模块,但是我们在捆绑过程之后使用浏览器,是不是? (我添加了一个没有别名的例子来澄清。)另外,你可以用一个实例化对象来执行'module.exports ='并不总是显而易见的。反正这样做的好处是什么? – Volune 2014-08-29 08:36:22

+0

我们在捆绑过程之后使用浏览器*,但捆绑在类似节点的环境中很有可能发生。根据我的经验,如果您使用的是Browserify,那是因为您喜欢Node.js的做事方式,即使在为浏览器开发时也想继续这样写,但也许这只是我的偏见。显示“游戏”可以应用于'module.exports'并没有什么错,我只是觉得OP并没有要求考虑使用require('./ gameState.js')'但我想我们都是正在做假设:) – 2014-08-29 18:58:21

相关问题