2012-06-25 40 views
11

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 baseUrlpath.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 baseUrlpaths. Ví dụ: baseUrl: libspaths: { "app" : "../app" }, v.v.
  • Tôi đã thử depscallback thay vì sử dụng require bên dưới config.
  • Tôi đã thêm sản phẩm context, khớp với baseUrl.
  • tôi đã chuyển require.config.js vào libs thư mục (chỉnh sửa baseUrlpaths 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 baseUrlpaths. Nhưng trên máy chủ thực sự không phải là một lựa chọn.

Trả lời

3

Giải pháp là không có bất kỳ. (dấu chấm) trong tên tệp của tệp cấu hình. Sau khi đổi tên tệp thành require-config.js, mọi thứ hoạt động như mong đợi. Các tập tin khác là tốt với dấu chấm trong tên, chỉ cần không phải là tập tin cấu hình chính.

+0

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

+0

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

Các vấn đề liên quan