2011-11-10 33 views
31

Tôi đã xây dựng một ứng dụng trang đơn bằng cách sử dụng requireJS và cho đến nay yêu thích nó. Tôi đã đi đến điểm phát triển các phần khác của trang web bên ngoài ứng dụng chính và không thực sự chắc chắn cách (hoặc nếu) sử dụng requireJS cho việc này.RequireJS: Multiple main.js?

Trong chính ứng dụng tất cả mọi thứ của tôi được kích hoạt bởi thẻ script này:

<script data-main='/scripts/main' src='/scripts/libs/require.js'> 

Tôi bây giờ đang phát triển trang chủ trong đó có nó kịch bản kết thúc trước riêng. Sử dụng trình tối ưu hóa khi nói đến việc đưa trang web vào hoạt động sẽ gộp tất cả các tập lệnh này thành một gói main.js. Tôi đang đấu tranh để hiểu nơi mà phần còn lại của trang web của tôi phù hợp với điều này.

Giả sử ứng dụng của tôi phụ thuộc vào jQuery và ứng dụng được nhóm lại trong phiên bản được tối ưu hóa của ứng dụng, nếu tôi muốn sử dụng jQuery trên trang chủ thì sao? Tôi không muốn tải trong ứng dụng main.js của ứng dụng chỉ để truy cập vào mô-đun jQuery của mình. Vì vậy, yeah ... một chút bối rối!


Tôi tưởng tượng ra một cấu trúc trang web loại như thế này:

/scripts 
    - app-main.js //(includes all module dependencies after optimzation) 
    - home-main.js //(includes all module dependencies after optimzation) 

App:

<script data-main='/scripts/app-main' src='/scripts/libs/require.js'> 

Trang chủ:

<script data-main='/scripts/home-main' src='/scripts/libs/require.js'> 


Câu hỏi

  1. Làm thế nào tôi có thể sử dụng RequireJS để phát triển các phần khác nhau của một trang web?
  2. Bạn có nên có nhiều tệp main.js không?
  3. Các tệp main.js khác nhau của chúng tôi có thể chia sẻ các mô-đun phổ biến như tối ưu hóa bài đăng jQuery như thế nào?
+1

Tôi muốn tìm thêm câu trả lời về điều này. Tôi đã được rối tung xung quanh với "xếp chồng" tập tin require.js của tôi bằng cách chỉ có nhiều cuộc gọi đến yêu cầu(). Nó hoạt động tốt, nhưng tôi đang tìm kiếm những suy nghĩ về cách kiểm soát thứ tự mà không cần sử dụng mô-đun/coffeescript ... –

+0

Tôi thấy thảo luận này hữu ích cho việc chia sẻ cấu hình trên nhiều trang: https://github.com/jrburke/requirejs/ Các vấn đề/354 – mikebridge

Trả lời

0

Vì vậy, require.js phải luôn được sử dụng trên bất kỳ trang nào để cho phép mô đun và không gian tên sạch. Tôi tin rằng mỗi 'ứng dụng' cần tập lệnh main.js của riêng nó. Khi tối ưu hóa trang web của bạn r.js cho phép bạn loại trừ các mô-đun từ trình biên dịch mà bạn nên làm cho jQuery luôn.

Bằng cách đó require.js sẽ luôn tải jquery.js khi đang di chuyển và phần lớn thời gian từ bộ nhớ cache. Tìm các mô-đun khác có thể được lưu trong bộ nhớ cache giữa ứng dụng và trang chủ của bạn sẽ phải được thực hiện theo quyết định của riêng bạn và tùy thuộc vào luồng người dùng của bạn và các yếu tố khác.

Có vẻ như bạn có hai dự án, một ứng dụng và một trang web tiếp thị. Tôi tin rằng những người nên được tách ra để khá mở rộng và nên có riêng của họ 'js' thư mục chứa main.js.

+22

Câu trả lời này chủ yếu là nói, "đừng làm những gì bạn đang cố gắng làm." Đôi khi đó là một câu trả lời ok, nhưng trong trường hợp này, tôi muốn biết nếu những gì anh ta làm là kỹ thuật có thể. Chúng ta có thực sự biết đủ về câu hỏi để biết liệu ứng dụng của anh ấy có lớn đến nỗi nó cần phải được phân chia không? Nếu anh ấy đang cố gắng xây dựng một ứng dụng một trang, anh ấy có thể muốn nhiều tệp yêu cầu cho các phân đoạn khác nhau của ứng dụng của anh ấy ... –

+2

Tôi không nghĩ đây là vấn đề về mặt triết học hoặc kỹ thuật. Có rất nhiều trường hợp trong đó một ứng dụng đơn lẻ có thể có nhiều mã lệnh không được đẩy xuống cùng một lúc. Câu trả lời dưới đây từ @PutzKipa là hữu ích. –

38

Nhóm requirejs có một số mẫu cho ứng dụng nhiều trang trên github. Có một cái nhìn tại địa chỉ: https://github.com/requirejs/example-multipage

Về cơ bản bạn sẽ có cấu trúc sau:

  • page1.html: Trang 1 trong tổng số ứng dụng.

  • page2.html: trang 2 của ứng dụng.

  • ứng dụng js: thư mục lưu trữ các mô-đun dành riêng cho ứng dụng.

  • lib: thư mục chứa các mô-đun bên thứ ba, như jQuery.

  • common.js: chứa cấu hình requirejs và nó sẽ là mục tiêu xây dựng cho tập hợp các mô-đun chung.

  • page1.js: được sử dụng cho dữ liệu chính cho page1.html. Tải mô-đun chung, sau đó tải ứng dụng/main1, mô-đun chính cho trang 1.

  • page2.js: được sử dụng cho dữ liệu chính cho page2.html. Tải mô-đun chung, sau đó tải ứng dụng/main2, mô-đun chính cho trang 2.

+0

Tôi đã thử trang mẫu và tôi đã có thể nhận được trang được tối ưu hóa, hoạt động. Thử nó. – OnesimusUnbound

+0

Phần thú vị với tôi ở đây là build.js có thể loại trừ một tệp vừa được xây dựng và mọi mô-đun trong tệp đó sẽ bị loại trừ. https://github.com/requirejs/example-multipage/blob/master/tools/build.js –