Backbone.js “lib”中的主干木偶、RequireJS和依赖项`

Backbone.js “lib”中的主干木偶、RequireJS和依赖项`,backbone.js,requirejs,marionette,Backbone.js,Requirejs,Marionette,我已经开发了一段时间主干/RequireJS应用程序,现在正在更新它以使用木偶。当木偶AMD试图在root/中搜索jquery、主干和下划线时,它首先中断,但是,我在/lib中有这些库,我可以修改代码。解决这个问题的正确方法是什么?(如果可能,请不要将库移出/lib) 我现在所做的是使用非AMD版本的工作。但有时,我会在一些视图中看到CollectionView未定义的错误,这让我想知道它是否与使用非AMD build for RequireJS有关您不能(或至少不应该)修改每个库的源代码以告诉

我已经开发了一段时间主干/RequireJS应用程序,现在正在更新它以使用木偶。当木偶AMD试图在root
/
中搜索jquery、主干和下划线时,它首先中断,但是,我在
/lib
中有这些库,我可以修改代码。解决这个问题的正确方法是什么?(如果可能,请不要将库移出
/lib

我现在所做的是使用非AMD版本的工作。但有时,我会在一些视图中看到
CollectionView
未定义的错误,这让我想知道它是否与使用非AMD build for RequireJS有关您不能(或至少不应该)修改每个库的源代码以告诉它依赖项在哪里。但是,您可以控制代码的位置

我使用的方法是将RequireJS的
baseUrl
设置到
/lib
文件夹中,这样您的库代码就可以很容易地找到它的依赖项,然后将别名“app”用于我的代码所在的任何地方,如下所示:

目录布局 main.js(或配置RequireJS的任何地方)
路径
配置中的所有路径都与
基本URL
相关。为上面类似的
app
定义映射意味着当RequireJS加载名为app/foo的模块时,它将使用(baseUrl)/../app/foo.js:

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

我使用的方法是将RequireJS的
baseUrl
设置到
/lib
文件夹中,这样您的库代码就可以很容易地找到它的依赖项,然后将别名“app”用于我的代码所在的任何地方,如下所示:

目录布局 main.js(或配置RequireJS的任何地方)
路径
配置中的所有路径都与
基本URL
相关。为上面类似的
app
定义映射意味着当RequireJS加载名为app/foo的模块时,它将使用(baseUrl)/../app/foo.js:

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

1) 为您的项目修改AMD版本的木偶

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

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

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

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

在您的requirejs配置中包括:


require.config({
  paths: {
    "jquery": "/your/path-to/jquery"
  }
});
现在,“jquery”依赖项将通过木偶找到


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

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

1) 为您的项目修改AMD版本的木偶

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

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

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

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

在您的requirejs配置中包括:


require.config({
  paths: {
    "jquery": "/your/path-to/jquery"
  }
});
现在,“jquery”依赖项将通过木偶找到

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

define(['backbone', 'app/view'], (Backbone, MyView) {/*...*/}

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