RequireJs:使用自动加载-DEPS与垫片(RequireJs: Use autoloadin

2019-07-30 07:17发布

我已经定义了一个RequireJs结构,其限定路径和垫片:

require.config({
    // define application bootstrap
    deps: ["main"],

    // define library shortcuts
    paths: {
        app: "app"
        , jquery: "lib/jquery"
        , underscore: "lib/underscore"
        , backbone: "lib/backbone"
        , bootstrap: "lib/bootstrap"
    },

    // define library dependencies
    shim: {
        jquery: {
            exports: "$"
        },
        underscore: {
            exports: "_"
        },
        backbone: {
            deps: ["underscore", "jquery"],
            exports: "Backbone"
        },
        bootstrap: {
            deps: ['jquery'],
            exports: "bootstrap"
        },

        // main application
        app: {
            deps: ["backbone"],
            exports: "App"
        }
    }
});

正如你看到的最后一个“垫片”的声明应该使它能够访问骨干(和它的DEP),当我加载主应用程序( - 命名)。

在现实中,这不工作:

require(["app"], function($, _, Backbone, App){
    app.router = new Backbone.Router.extend({
        // routing and route actions
    });
});

是什么让我疑惑的是,在“脊梁- boilderplate” -项目,骨干(及其DEPS)可供选择这种方式: https://github.com/tbranyen/backbone-boilerplate/blob/master/app/main.js

偶没有在功能定义此。

所以我在做什么错?

Answer 1:

删除$, _, Backbone从α参数require功能全,你扩展路由器。 垫片全球出口值,所以没有必要提及他们的requiredefine像你这样经常依赖做电话。

将它们作为参数与他们是未定义的全局变量,最有可能的结果搅乱。



Answer 2:

从我读过,requirejs通过根据您的阵列...因此你的电话应该是这样的指定哪些参数:

require(["app"], function (App) { // less arguments
});

或者是这样的:

require(
    ["jquery", "underscore", "backbone", "app"], // more deps
    function ($, _, Backbone, App) {
    }
);


文章来源: RequireJs: Use autoloading-deps with shim