Tôi gặp sự cố khi các cuộc gọi cấu hình require.js gần như giống hệt nhau xuất hiện hoạt động khác nhau, trong một trường hợp không đặt baseUrl
và path
.Tại sao require.js bỏ qua config baseUrl và đường dẫn
cấu trúc thư mục
- /js
-
- app/
-
- libs/
-
-
- hogan.js
-
-
-
- xương sống
-
-
-
-
- backbone.js
-
-
-
-
-
- , vv
-
-
-
-
- boostrap
-
-
-
- jquery
-
-
-
-
- jquery.js
-
-
-
-
-
- , vv
-
-
-
-
- đòi hỏi
-
-
-
-
- require.js
-
-
-
-
-
- , vv
-
-
-
- templates/
-
- require.co nfig.js
Script tag
<script data-main="/resources/js/require.config" src="/resources/js/libs/require/require.js"></script>
Yêu cầu cấu hình
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();
}
);
Trong cả hai trường hợp, một thẻ script được gắn cho thấy các nội dung đầy đủ của require.config.js, bắt đầu với:
<script type="text/javascript" charset="utf-8" data-requirecontext="_" data-requiremodule="require.config" src="/resources/js/require.config.js">
Định nghĩa trong ứng dụng/router
define(
[
'backbone',
'templateEngine'
],
// etc
);
Tuy nhiên nơi mà vấn đề xảy ra, ứng dụng/router không bao giờ được nạp, chỉ sau (không có 404, không có gì) :
GET require.js 200 OK 180ms
GET require.config.js 200 OK 69ms
Nếu tôi nhập require(["app/router"]);
vào bảng điều khiển Firebug, tôi nhận được như sau:
"NetworkError: 404 Not Found - /resources/js/backbone.js
"NetworkError: 404 Not Found - /resources/js/templateEngine.js"
Khi những gì tôi mong đợi để xem là:
- /resources/js/libs/backbone/backbone.js
- /resources/js/libs/hogan.js
Giải pháp đã thử
- Tôi đã cố gắng sử dụng các kết hợp khác nhau của đường dẫn tương đối và tuyệt đối cho
baseUrl
vàpaths
. Ví dụ:baseUrl: libs
vàpaths: { "app" : "../app" }
, v.v. - Tôi đã thử
deps
vàcallback
thay vì sử dụngrequire
bên dướiconfig
. - Tôi đã thêm sản phẩm
context
, khớp vớibaseUrl
. - tôi đã chuyển require.config.js vào libs thư mục (chỉnh sửa
baseUrl
vàpaths
cho phù hợp; vẫn nhận được cùng một vấn đề của cấu hình bỏ qua, chỉ nó cố gắng để tải /nguồn/js/libs/xương sống .js thay thế, ví dụ).
Note
cấu trúc thư mục này và tập tin cấu hình làm việc trên localhost của tôi, nơi tôi có thể ngưng /nguồn/ từ các đường dẫn như trên. Thay vào đó tất cả đường dẫn tương đối (không bắt đầu bằng /) được sử dụng cho baseUrl
và paths
. Nhưng trên máy chủ thực sự không phải là một lựa chọn.
Tôi gặp vấn đề tương tự. Nếu bạn không muốn thay đổi tên tệp, bạn có thể bí danh mô-đun thông qua băm đường dẫn trong cấu hình requirejs. ví dụ. "require.config ({paths: {myModule:" /path/to/my.weird.module "}})" – jdc0589
Tôi không nghĩ rằng bạn có thể bí danh tên tập tin cấu hình của bạn, mặc dù. Điều này hoạt động nếu chính tệp cấu hình không bị ảnh hưởng. – morewry