无法获得requirejs包括Backbonejs(Cannot get requirejs to

2019-06-25 17:26发布

我试图通过Requirejs模块化骨干我的应用程序,但我似乎无法得到Requirejs包括骨干。 这是我main.js是被从索引页包括:

require.config({
    baseUrl: '/static/js/',
    paths: {
        jquery: 'libs/jquery/jquery-min',
        underscore: 'libs/underscore/underscore-min',
        backbone: 'libs/backbone/backbone-min',
        text: 'libs/require/text',
    },
});

require(['/static/js/views/app.js'], function(AppView) {
    var appView = new AppView;
});

这里是我的app.js,但未通过上面的文件包括:

define([
    'jquery',
    'underscore',
    'backbone',
], function($, _, Backbone) {
  console.log($);
  console.log(_);
  console.log("inside of the app js file");
    var AppView = Backbone.View.extend({

        initialize: function() {
            console.log("inside of appview initialize");
        },

    });
});

下面的信息会在我的谷歌浏览器的控制台打印出来:

function (a,b){return new e.fn.init(a,b,h)}
app.js:7undefined
app.js:8inside of the app js file
app.js:9Uncaught TypeError: Cannot read property 'View' of undefined

为$的定义工作,但对于_和骨干的定义不工作。 他们拿出为未定义。 任何想法,为什么发生这种情况?

Answer 1:

我建议你使用jQuery的已经捆绑requireJS的版本。 这将节省你很多设置疼痛。 你可以在这里阅读细节: http://requirejs.org/docs/jquery.html这里下载文件: https://github.com/jrburke/require-jquery

在他们自己的话说:

与RequireJS,脚本可以以不同的顺序比他们指定的顺序加载。 这可能会导致该承担的jQuery已经加载jQuery插件的问题。 使用组合RequireJS + jQuery的文件,确保jQuery是在页面之前任何jQuery插件加载。

这应该采取与requireJS正确加载的jQuery的护理:

<script data-main="js/main" src="js/require-jquery.js"></script>

Main.js

一对夫妇在这里说明:

  • 无需重新定义jQuery的路径,因为这已经照顾
  • 你仍然需要指出的jQuery作为必需模块
  • (我不得不更新的路径,让他们在我的系统工作)

码:

require.config({
    baseUrl: 'js/',
    paths: {
        underscore: 'libs/underscore-min',
        backbone: 'libs/backbone-min',
    },
});

require(['jquery', 'app'], function($, AppView) {
    console.log("done w/ requires");
    console.log($)
    console.log(AppView)
    var appView = new AppView;
});

app.js

一对夫妇的注意事项:

  • 您只能在回调中加载它们,如果它们已经被定义为模块之后取回JS文件。 所以函数($,_,骨干)将无法为您服务。
  • 你必须返回你的对象,以便它可以在main.js回调使用(返回APPVIEW)

码:

define(
    [
    'jquery',
    'underscore',
    'backbone',
    ],
    function() {
        console.log($);
        console.log(_);
        console.log(Backbone);
        console.log("inside of the app js file");
        return AppView = Backbone.View.extend({
            initialize: function() {
            console.log("inside of appview initialize");
        },
    });
});

安慰

有了这些代码,这是控制台输出:

function ( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init( selector, context, rootjQuery );
    } [app.js:8]

function (a){return new m(a)} [app.js:9]

Object [app.js:10]

inside of the app js file [app.js:11]

done w/ requires main.js:21

function ( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init( selector, context, rootjQuery );
} [main.js:22]

function (){a.apply(this,arguments)} [main.js:23]

inside of appview initialize [app.js:15]


Answer 2:

我将使用骨干和下划线的分叉版本避而远之。 A“垫片”配置选项已被添加到requirejs处理本身不支持AMD第三方库。 这使得更新到库的最新版本要容易得多。

http://requirejs.org/docs/api.html#config-shim

下面是一个例子:

require.config({
  paths: {
    jquery: "libs/jquery",
    underscore: "libs/underscore",
    backbone: "libs/backbone"
  },
  shim: {
    underscore: {
      exports: '_'
    },
    backbone: {
      deps: ["underscore", "jquery"],
      exports: "Backbone"
    }
  }
});


Answer 3:

您可能没有正确的参考骨干和_,可能是这可以帮助你:

加载骨干,并使用下划线RequireJS

更多: http://requirejs.org/docs/api.html#config-shim



文章来源: Cannot get requirejs to include Backbonejs