2013-01-07 21 views
20

Tôi muốn bao gồm JS từ CDN trong Meteor trước khi bao gồm các tập lệnh ứng dụng khách của riêng tôi để các tập lệnh máy khách có thể phụ thuộc vào nó.Làm thế nào để đưa JavaScript từ CDN vào thiên thạch?

... 
<script type="text/javascript" src="https://ajax.googleapis.com/..."></script> 
... 
<script type="text/javascript" src="/client/..."></script> 
... 

Tôi đã thử bao gồm tập lệnh qua tệp * .html và giữa các thẻ <head>. Nhưng dường như nội dung tiêu đề từ các tệp * .html sẽ luôn được nối vào cuối tiêu đề HTML, bất kể tôi đặt nó ở đâu trong hệ thống phân cấp tệp (ví dụ: đặt tệp trong thư mục lib hoặc sắp xếp theo thứ tự bảng chữ cái trước tệp JS của ứng dụng khách sẽ không giúp được gì).

Bất kỳ ý tưởng nào về cách tôi có thể bao gồm JS từ CDN trước tập lệnh ứng dụng khách mà không phải tạo gói thông minh?

+0

Có thể thực thi mã * sau khi tải trang có thể ngăn mã của bạn phụ thuộc vào thứ tự cụ thể của thư viện js được tải. – waeltken

Trả lời

9

Giả sử bạn không cần nạp các tệp này trước gói Meteor, hãy tạo tệp JS được tải trước bất kỳ tệp nào khác. Meteor tải các tập tin theo thứ tự chữ cái nên nó phải là tập tin đầu tiên được tải. Để kết thúc, đặt tên nó là aaLoadCDN.js là đủ. Tự động tải các script CDN bằng cách thêm một yếu tố script src vào tài liệu head:

var script = document.createElement('script'); 
script.setAttribute('type', 'text/javascript'); // optional 
script.setAttribute('src', 'url/to/the/cdn/script.js'); 
document.getElementsByTagName('head')[0].appendChild(script); 

Dưới đây là một số gói Meteor thực tế nạp kịch bản từ CDN:

+0

Tuyệt vời, điều đó sẽ hiệu quả. :-) Cảm ơn! – jerico

+2

Một vấn đề với giải pháp trong bài đăng trên blog được liên kết trong câu trả lời này là nó không cho phép bạn biết khi nào tập lệnh được thực thi. Vì các dự án Meteor thường có sẵn jQuery: $ .getScript thực hiện công việc thanh lịch hơn. – jerico

+4

Điều gì sẽ xảy ra nếu tôi cần tệp javascript bên ngoài để tải trước trước các gói thiên thạch? – user1966211

0

Ngoài ra còn có một gói bị bỏ qua được gọi là meteor-external-fileloader cung cấp ví dụ sử dụng Stripe.js. Nó đã không được duy trì kể từ tháng 9 năm 2013, vì vậy hãy cẩn thận.

2

Bạn có thể nối thêm tập lệnh sau khi mẫu được hiển thị. Vì vậy, tập lệnh của bạn sẽ chỉ tải sau khi mọi dòng khác đã được tải. Ví dụ: nếu bạn trực tiếp thêm một plugin jquery vào tệp html mẫu của mình, bạn sẽ gặp lỗi "jquery not found". Nhưng cách tiếp cận này ngăn chặn điều đó:

Template.Main.onRendered(function() { 

     $('head').append('<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-formhelpers/2.3.0/js/bootstrap-formhelpers.js"></script>'); 

}); 
Các vấn đề liên quan