javascript - 在 Browserify 中制作 jQuery、Backbone 等全局变量

标签 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 中做到这一点?

最佳答案

我的首选方案是利用 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 case) 并且它们会出现在 window 对象上。

关于javascript - 在 Browserify 中制作 jQuery、Backbone 等全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27581680/

相关文章:

javascript - 为什么我的 Nginx-Socket.io-Express-Setup 无法通过 HTTPS 运行?

javascript - 将客户端模板与主布局分开的好方法

javascript - 隔离函数范围不起作用

javascript - 通过 AJAX 获取函数

javascript - 显示文档内对象数组的数据

Javascript - 为每个用户创建唯一的文件

javascript - 如何检查 AngularJS 模板中的 isObject

node.js - 如何修复 gyp-ERR ECONNRESET?

javascript - require.js + backbone.js : How to structure modules that have an initialize function?

javascript - 如何调用 Backbone 集合内部的方法