在Browserify中创建jQuery,Backbone等全局变量

时间:2014-12-20 15:34:19

标签: javascript node.js backbone.js browserify browserify-shim

我有一个使用Backbone和Marionette构建的相对较大的应用程序。这意味着在每个文件的顶部我都有:

var _ = require('underscore');
var $ = require('jquery');
var Backbone = require('backbone');
Backbone.$ = $;
var Marionette = require('backbone.marionette');

我知道Browserify的部分想法是没有全局变量,但这似乎是很多不必要的样板。我想要的是让jQuery,Backbone,Underscore和Marionette像往常一样加载一个全局变量,只是假设它们可用。有没有办法在browserify中执行此操作?

1 个答案:

答案 0 :(得分:-1)

我的首选方案是利用ES6(ECMAScript 2015)功能,制作一个名为libraries.js的文件:

var _ = require('underscore');
var $ = require('jquery');
var Backbone = require('backbone');
Backbone.$ = $;
var Marionette = require('backbone.marionette');

module.exports = { _, $, Backbone, Marionette };

...然后在您可以使用的其他文件的顶部:

// libraries.js should be in /node_modules/, or use ... = require('/path/to/libraries.js');
// This requires ES6 (ECMAScript 2015)
const { _, $, Backbone, Marionette } = require('libraries'); 

这与您的要求略有不同,但我认为您实际上并不想让这些变量污染您应用的global对象。你只想减少样板。

如果您希望这些变量可用于全局范围内的其他代码,您可以从libraries.js中删除var语句(在这种情况下可能将其命名为globals.js)并且它们会出现在window对象。