【发布时间】:2012-06-26 07:44:53
【问题描述】:
我遇到了一个问题,几乎相同的 require.js 配置调用似乎工作方式不同,在一种情况下未能设置 baseUrl 和 path。
文件夹结构
- /js
- - app/
- - libs/
- - - hogan.js
- - - backbone
- - - - backbone.js
- - - - etc.
- - - boostrap
- - - jquery
- - - - jquery.js
- - - - etc.
- - - require
- - - - require.js
- - - - etc.
- - templates/
- - require.config.js
脚本标签
<script data-main="/resources/js/require.config" src="/resources/js/libs/require/require.js"></script>
需要配置
require.config(
{
baseUrl: "/resources/js/libs",
shim: {
"underscore": {
exports: "_"
},
"backbone": {
deps: [
"json2",
"underscore",
"jquery"
],
exports: "Backbone"
}
},
paths: {
"app": "/resources/js/app",
"backbone": "backbone/backbone",
"jquery": "jquery/jquery",
"templates": "/resources/js/templates",
"templateEngine": "hogan"
}
}
);
require(
[
"app/router"
],
function( AppRouter ){
AppRouter.execute();
}
);
在这两种情况下,都会附加一个脚本标记,显示 require.config.js 的完整内容,以:
<script type="text/javascript" charset="utf-8" data-requirecontext="_" data-requiremodule="require.config" src="/resources/js/require.config.js">
应用/路由器中的定义
define(
[
'backbone',
'templateEngine'
],
// etc
);
然而问题发生在哪里,应用程序/路由器永远不会加载,只有以下(没有 404,什么都没有):
GET require.js 200 OK 180ms
GET require.config.js 200 OK 69ms
如果我在 Firebug 控制台中输入 require(["app/router"]);,我会得到以下信息:
"NetworkError: 404 Not Found - /resources/js/backbone.js
"NetworkError: 404 Not Found - /resources/js/templateEngine.js"
当我期望看到的是:
- /resources/js/libs/backbone/backbone.js
- /resources/js/libs/hogan.js
尝试的解决方案
- 我尝试对
baseUrl和paths使用相对路径和绝对路径的各种组合。例如baseUrl: libs、paths: { "app" : "../app" }等。 - 我尝试了
deps和callback,而不是在config下方使用require。 - 我添加了属性
context,匹配baseUrl。 - 我已将 require.config.js 移动到 libs 目录中(根据需要编辑
baseUrl和paths;仍然遇到相同的忽略配置问题,例如,它只会尝试加载 /resources/js/libs/backbone.js)。
注意
这个文件夹结构和配置文件在我的本地主机上工作,我从上面显示的路径中删除 /resources/。相反,baseUrl 和 paths 使用所有相对路径(不以 / 开头)。但在实际服务器上,这不是一个选项。
【问题讨论】: