backbone.js - 如何解决同一页面上的 browserify(基于 Backbone 的应用程序)和 require.js 之间的冲突?

标签 backbone.js requirejs underscore.js browserify

我有一个主干应用程序正常运行。它旨在用作第 3 页中的小部件。不幸的是,我刚刚意识到其中一个页面已经加载了 Backbone/underscore。

我收到这样的错误:

Uncaught TypeError: Cannot read property 'extend' of undefined 

这通常出现在先前未加载下划线时。

我的典型 View 是这样的:(正常的 Backbone View )

./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。好像 require('backbone') 刚刚返回 {}
编辑2:
似乎与这个问题有关:https://github.com/substack/node-browserify/issues/790

最佳答案

Backbone 和 Requirejs ( as indicated by thlorenz here ) 的问题

  • backbone looks for define before looking for module.exports
  • requirejs works with globals which is not good practice and in this case causes problems since it affects everything that runs in the same browser tab


他建议将所有内容都包装在一个范围内并隐藏 define 函数。
他还有一个工具可以做到这一点。 browserify-shim

但是,我没有使用它,而是使用 Browserify 的 postBundleCB 选项:(感谢同事)。

在我的 Gruntfile 中:
browserify: {
  dist: {
    src: ['src/app/app.js'],
    dest: 'www/app.js',
    options: {
      postBundleCB: function (err, src, next) {
        return next(null, '(function () { var define = undefined; '+src+' })();')
      }
    }
  }
},

这解决了我的问题:)

我没有尝试过 browserify-shim,所以我对它了解不多。

关于backbone.js - 如何解决同一页面上的 browserify(基于 Backbone 的应用程序)和 require.js 之间的冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25999947/

相关文章:

使用 Jasmine 和 Sinon 在匿名函数中测试 Backbone 代码

Backbone.js:更新模型,重新排序和重新渲染模型集合

javascript 要求在 html 中不起作用

javascript - require 路径中的变量不适用于 r.js

knockout.js - 我可以在 Cucumberjs 上测试 KnockOut ViewModel

javascript - 如何使用 LoDash/Underscore 将所有零值移动到数组的末尾?

javascript - 主干保存嵌套集合

javascript - Backbone、Marionette、Grunt、 Jasmine 测试

backbone.js - 如何在我的主干 View 中绑定(bind) Bootstrap 提前输入的数据源?

jquery - 如何实现更新两个 div 的 div 处理程序/调整器?