2013-08-25 30 views
5

Tôi sử dụng r.js trình tối ưu hóa để kết hợp các tệp js dựa trên hồ sơ xây dựng như được đề xuất trong documentation. Dưới đây là tôi build-config.js:Cách loại trừ urlArgs khỏi bản dựng bằng cách sử dụng r.js

({ 
    baseUrl: ".", 
    paths: { 
     jquery: '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min', 
    }, 
    name: "main", 
    out: "main-built.2013-07-30.js" 
}) 

Như bạn có thể thấy nó được dựa trên main.js tập tin, đây là một mã số của nó:

requirejs.config({ 
    baseUrl: 'scripts', 
    urlArgs: "bust=" + (new Date()).getTime(), 
    paths: { 
     jquery: [ 
      '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min', 
      'lib/jquery-1.9.1.min', 
     ], 
    }, 
}); 

require([ 
    'layout', 
    'cue', 
], function() { 

}); 

Nếu tôi giữ gìn urlArgs: "bust=" + (new Date()).getTime() trong main.js tất cả các tệp bên ngoài (tại đây jquery được tải từ CDN) trông giống như .../jquery.js?bust=1377412213

Vì vậy, PITA sẽ nhận xét ra khỏi dòng này mỗi lần tôi tạo một bản dựng. Tôi đã đọc qua tất cả các tài liệu và googled cho một giải pháp nhưng tất cả mọi thứ vô ích. Có lẽ tôi làm sai?

Trả lời

1

Các giải pháp sau đây sẽ làm việc trong trường hợp của bạn, nơi bạn đang đổi tên các tập tin main.js trong r.js xây dựng:

urlArgs: require.specified('main') ? "bust="+(new Date()).getTime() : null 

Đoạn mã trên sẽ kiểm tra các mô-đun có tên là 'chính', mà sẽ phù hợp trong phát triển, nhưng không phải trong sản xuất, nơi mà các mô-đun được đặt tên 'chính xây dựng.2013-07-30'.

Tôi đã thử nghiệm trong quá trình phát triển và xây dựng sản phẩm và nó hoạt động! :-)

Trên require.specified() chức năng: With requirejs is it possible to check if a module is defined without attempting to load it?

+1

Vâng, nó hoạt động. Sau 2 năm :) – dVaffection

2

Cách trễ cho bữa tiệc về điều này, nhưng ở đây giải pháp tôi đã sử dụng: gắn url paramgs vào cấu hình với cuộc gọi tiếp theo.

HTML:

<script src="js/libs/require.js"></script> 
<script src="js/config.js"></script> 
<script>require(['main-app']);</script> 

Config File:

requirejs.config({ 
    paths: {...}, 
    shim: {...} 
});  

// Apply the cache bust only for the browser. 
if (window) { 
    requirejs.config({ 
    urlArgs: REQUIRE_NOCACHE ? "bust="+(new Date()).getTime() : null 
    }); 
} 

Các ưu chỉ mất các requirejs.config khai đầu tiên và nó bỏ qua các mã tiếp theo. Khai báo requirejs.config thứ hai kéo dài thay vì ghi đè đầu tiên, vì vậy urlArgs vẫn được áp dụng thành công cho các mô-đun trong trình duyệt. Hy vọng rằng sẽ giúp.

+0

là gì * REQUIRE_NOCACHE *? – dVaffection

+0

'REQUIRE_NOCACHE' chỉ là biến boolean toàn cục mà tôi khai báo trong môi trường dev của mình. Khi nó tồn tại, nó đảm bảo rằng bộ nhớ cache bị vỡ bất cứ khi nào trang được làm mới. – Jes

+0

Bạn tổ chức các môi trường dev và prod như thế nào? – dVaffection