1

我一直在开发 Backbone/RequireJS 应用程序,现在正在更新它以使用 Marionette。当 Marionette AMD 尝试在 root 中搜索 jquery、主干和下划线时,它一开始会中断/,但是,我有这些库/lib,我可以修改代码。解决这个问题的正确方法是什么?(如果可能的话,不要将库移出/lib)。

我现在所做的是使用有效的非 AMD 版本。但有时,我CollectionView在某些视图中遇到未定义的错误,这让我想知道它是否与为 RequireJS 使用非 AMD 构建有关

4

2 回答 2

2

您不能(或至少不应该)修改每个库的源代码来告诉它它的依赖项在哪里。但是,您可以控制代码的位置。

我使用的方法是从Volo 的默认项目模板中复制的,将 RequireJS 设置baseUrl/lib文件夹,以便您的库代码可以轻松找到它的依赖项,然后使用paths配置将“app”别名到我的代码所在的任何位置,如下所示:

目录布局

/www 
  /js
    main.js
    /lib
      backbone.js
      backbone.marionette.js
      (etc)
    /app
      my-code.js
      view.js

main.js(或者你配置 RequireJS 的任何地方)

requirejs.config({
    baseUrl: 'www/js/lib',
    paths: {
        app: '../app'
    }
});
// Go on to load another module that contains the actual app. Example:
requirejs(['app/my-code']);

配置中的所有路径paths都相对于baseUrl. 为上述定义映射app意味着当 RequireJS 加载名为app/foo的模块时,它将使用(baseUrl)/../app/foo.js

我的代码.js

define(['backbone', 'app/view'], (Backbone, MyView) {/*...*/}
于 2012-07-17T03:53:38.830 回答
2

这是一个常见问题,我知道有两种解决方案:

1) 为您的项目修改 AMD 版本的 Marionette。

指定这两个库的正确路径,就可以了。这是 Marionette 依赖列表中的一个简单更改,不会影响其余功能。

但这是个坏主意。这意味着您必须更改代码,并且每次获得新版本时都必须再次更改它。

2)在requirejs中使用命名模块/路径

我已经将依赖项指定为“jquery”、“underscore”、“backbone”字符串,这意味着您可以使用命名路径来配置这些依赖项所在的位置。

将此包含在您的 requirejs 配置中:


require.config({
  paths: {
    "jquery": "/your/path-to/jquery"
  }
});

现在 Marionette 将找到“jquery”依赖项

这是两种解决方案中较好的一种,因为它不需要您更改木偶文件。它只需要你配置 RequireJS 来提供这些命名路径。

于 2012-07-17T14:02:28.117 回答