我一直在使用Backbone / RequireJS应用程序,现在正在更新它以使用Marionette。它首先打破Marionette AMD试图在根/
中搜索jquery,骨干和下划线,但是,我在/lib
中有这些库,我可以修改代码。什么是解决这个问题的正确方法? (如果可能的话,不要将库移出/lib
)。
我现在所做的是使用非AMD版本。但有时,我在某些视图中得到CollectionView
未定义的错误,这让我想知道它是否与使用非AMD构建的RequireJS相关
答案 0 :(得分:2)
您不能(或至少不应该)修改每个库的源代码,以告诉它依赖的位置。但是,您可以控制 代码的位置。
我使用的方法(我从Volo's default project template复制)是将RequireJS的baseUrl
设置为/lib
文件夹,以便您的库代码可以轻松找到其依赖项,然后使用{ {3}}将“app”别名为 my 代码所在的位置,如下所示:
/www
/js
main.js
/lib
backbone.js
backbone.marionette.js
(etc)
/app
my-code.js
view.js
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 :
define(['backbone', 'app/view'], (Backbone, MyView) {/*...*/}
答案 1 :(得分:2)
这是一个常见问题,我知道有两种解决方案:
1)为您的项目修改Marionette的AMD版本。
指定这两个库的正确路径,你会很高兴。这是Marionette依赖列表中的一个简单更改,不会影响其余功能。
但这是一个坏主意。这意味着您必须更改代码,并且每当您获得新版本时,您都必须再次更改它。
2)在requirejs中使用命名模块/路径
我已将依赖项指定为“jquery”,“underscore”,“backbone”字符串,这意味着您可以使用命名路径来配置这些依赖项所在的位置。
在requirejs配置中包含此内容:
require.config({
paths: {
"jquery": "/your/path-to/jquery"
}
});
现在Marionette
会找到“jquery”依赖关系这是两个解决方案中较好的一个,因为它不需要您更改牵线木偶文件。它只需要您配置RequireJS来提供这些命名路径。