0

我有两个相互关联的问题。

第一个是我想要一个名为主干的文件夹,这与将主干作为路径中库的短名称相冲突。似乎 RequireJS 认为主干/模型/用户是主干库的孩子或其他东西。解决方案,用大写 B 命名库 Backbone。

第二个问题是我正在使用 ModelBinder,它具有“骨干”作为依赖项。解决方案,更改缩小文件。

由于在 RequireJS 配置中没有做正确的事情,这两种解决方案似乎都是一个糟糕的 hack,但我无法弄清楚我做错了什么。

我的公用文件夹结构类似于:

public/
  js/
    backbone/
      model/
        ...
      view/
        ...
    vendor/
      backbone.min.js
      Backbone.ModelBinder.js
      ...
  common.js

我的 common.js 有这样的东西:

require.config({
    baseUrl: "/js",
    shim: {
        'underscore': {
            exports: '_'
        },
        "Backbone" : {
            deps: ["underscore", "jquery"],
            exports: 'Backbone'
        }

    },
    paths: {
        underscore: 'vendor/underscore.min',
        jquery: 'vendor/jquery',
        model_binder: 'vendor/Backbone.ModelBinder',
        Backbone: 'vendor/backbone.min'
  }
});

所以我的两个问题是:我怎样才能保持 Backbone.ModelBinder 原样,并告诉 requirejs 当该库要求主干时,它要求 js/vendor/backbone.min.js 而不会“污染”我的全局路径。

为什么我不能在路径中同时使用主干(小写 b)并拥有目录?

4

1 回答 1

1

一种解决方案(是的,不太理智)是在 下包含paths每个目录的定义js/backbone,即:

require.config({
    ...
    paths: {
        ...
        backbone: 'vendor/backbone.min', // NOTE lower-case 'b', as desired
        "backbone/model": "backbone/model",
        "backbone/view": "backbone/view",
        ... // and so on
    }
});

这也意味着没有直接在js/backbone.

另一种方法是在 Backbone 的模块名称中保留大写的“B”,并将map配置用于Backbone.ModelBinder.js

require.config({
    ...
    paths: {
        ...
        Backbone: 'vendor/backbone.min' // NOTE capital 'B' again
    },
    map: {
        "model_binder": {
            "backbone": "Backbone"
        }
});

回想起来,map可以将其应用于所有模块,以便每当它们请求"backbone"(小写“b”)时,您就可以交付"Backbone"

require.config({
    ...
    paths: {
        ...
        Backbone: 'vendor/backbone.min' // NOTE capital 'B' again
    },
    map: {
        "*": {    //  <------ Here difference form code above
            "backbone": "Backbone"
        }
});

现在任何人都可以请求"backbone"并获得 Backbone,或"backbone/model/User"(或"backbone/module")并获得相应的模块。

于 2013-10-24T08:10:02.930 回答