2014-07-01 19 views
5

Tôi có một mô-đun gọi số require trên thư viện Javascript. Tôi cố gắng để nén .js tôi file với Django-đường ống nhưng sau collectstatic web-page cung cấp cho các lỗi:Django + Django-Pipeline với Javascript "Yêu cầu"

UncaughtReferenceError: require is not Defined 

Bình thường thử nghiệm/triển khai hoạt động tốt với thu thập tĩnh nếu tôi không sử dụng Django-Pipeline để nén các tệp. Thiết lập chính xác để giảm thiểu các tệp .js của tôi mà không vi phạm các phụ thuộc là gì - tài liệu là loại thưa thớt. Là django-đường ống đúng sự lựa chọn?

Chỉnh sửa: Tôi đã cố gắng đảm bảo rằng các mô hình 'bắt buộc' được nén đầu tiên trong đường ống, nhưng tôi dường như không nén mô-đun mà tất cả được gọi là require mà không trả lại lỗi.

Trả lời

2

Điều này là do máy nén JS của bạn (YUGLIFY ví dụ) cũng được rút gọn javascript tên biến, vì vậy require có thể đã được đặt tên cho một cái gì đó giống như x hoặc y. Để khắc phục điều này thiết lập các tùy chọn thích hợp trong máy nén JS của bạn, để không làm giảm các tên biến.

http://django-pipeline.readthedocs.org/en/latest/compressors.html#pipeline-yui-js-arguments

Đối Yuglify, lập luận này sẽ là mangle:False, mà sẽ ngăn chặn mangling tên.

+0

+1. Bạn đúng rằng thiết lập 'mange: false' sẽ sửa lỗi ngắt' require' - nhưng vẫn kết thúc khai thác toàn bộ thư viện (350kb trong trường hợp này), đó là loại trừ. Vì vậy, tôi nghĩ rằng tôi sẽ phải thử 'django-require'. – user3467349

4

Theo kinh nghiệm của tôi, rất khó để kết hợp cả require.js và django-pipeline (mặc dù chúng là cả hai dự án tuyệt vời).

Tôi đã làm việc trên một dự án sử dụng require.js cho tất cả javascript của nó. Tôi đã cố gắng sử dụng django-đường ống nhưng không thể làm cho nó hoạt động đúng với require.js. Chúng tôi đã kết thúc làm việc với https://github.com/etianen/django-require cho javascript và django-pipeline cho việc rút gọn css.

Tôi khuyên bạn nên cố gắng xóa require.js và tự bao gồm thư viện mà nó đang nhập bằng đường ống hoặc sử dụng require.js để xây dựng và rút gọn tất cả nội dung javascript của bạn. Bạn có thể thêm một bước mới để xây dựng tất cả các tệp javascript của mình và liên kết đến các tệp đó trực tiếp trong các mẫu hoặc sử dụng đường dẫn.

Rất tiếc, đây có thể không phải là 'giải pháp' thực tế cho câu trả lời của bạn, nhưng bạn đã hỏi "Có phải django-pipeline là lựa chọn đúng không?" :)

+0

Đồng ý. Xử lý CSS với django-pipeline là rất tốt, nhưng về mặt JS chúng tôi hoàn toàn có thể sử dụng một giải pháp linh hoạt hơn như django-require. –