我有一个 Backbone 应用程序正确启动和运行。它的目的是作为一个小部件在第三页使用。不幸的是,我刚刚意识到,其中一个页面已经加载了 Backbone /下划线。
我收到如下错误:
Uncaught TypeError: Cannot read property 'extend' of undefined
通常在以前未加载下划线时出现。
我的典型看法是这样的:(正常 Backbone.js 视图)
./view1.js
var Backbone = require('backbone')
var _ = require('underscore')
var $ = require('jquery')
Backbone.$ = $
module.exports = Backbone.View.extend({
events: {
},
initialize: function () {
},
render: function () {
}
})
那我就叫它:
var View1 = require('view1')
var view1Instance = new View1(...)
感谢您的帮助:)
调查后编辑:在调试器中运行时,Backbone
变量似乎是一个空对象,而不是Backbone。
编辑2:似乎与该问题相关:https://github.com/substack/node-browserify/issues/790
4条答案
按热度按时间brc7rcf01#
Backbone.js 和需求的问题(as indicated by thlorenz here)
define
。导出他建议将所有内容都封装在一个作用域中,并隐藏
define
函数。他也有一个工具可以做到这一点。browserify-shim然而,我没有使用它,而是使用了Browserify中的postBundleCB选项:(谢谢同事)。
在我的
Gruntfile
中:这解决了我的问题:)
我没有试过browserify-shim,所以我对它了解不多。
mcdcgff02#
如果有人使用gulp和官方的browserify(所以postBundleCB不可用),我使用gulp-wrap来 Package 'define'定义:
91zkwejq3#
另一种解决方法是使用如下自定义前奏:
您可以这样为browserify给予一个前奏:
aamkag614#
这可能与某人有关,他在一个有requirejs的站点中使用browserify。一个临时的解决方案可以是,而不是:
对于直接使用browserify API的用户,可以在加载我们的包之前添加这段代码:
这将允许继续我们的执行,而不破坏客户端上的代码。
我希望这是有用的。