RequestJS: Sự khác biệt giữa các chức năng "requestjs" và "request"


80

Tôi đang sử dụng requestJS 2.x. Tôi phát hiện ra rằng một số hướng dẫn (và tài liệu chính thức) đôi khi sử dụng

requirejs.config({ [...] });
requirejs(["module"]) ...

và đôi khi

require.config({ [...] });
require(["module"]) ...

Có bất kỳ sự khác biệt nào giữa hai chức năng đó (request và Requijs) không? Tôi không thể tìm thấy bất kỳ từ nào về điều đó trong tài liệu. :(

Câu trả lời:


86

Họ đều giống hệt nhau.

Lý do là một số môi trường có thể đã có một require, trong trường hợp đó thì RequestJS không ghi đè lên nó và cho phép sử dụng thư viện thông quarequirejs

Xem cam kết này - https://github.com/jrburke/requirejs/commit/be45948433b053921dc6a6a57bf06d04e13b3b39


15
Cảm ơn :) Điều đó cần được lưu ý trong tài liệu. Các nhận xét trong mã không làm rõ điều này.
Matthias Bayer

Tôi đồng ý, nó khó hiểu (và ngay cả trang requestjs "chính thức" có sự mâu thuẫn giữa cách sử dụng và các ví dụ). Thật tốt khi biết chúng giống nhau.
Bil Simser

Sử dụng CommonJS trong trình duyệt (thông qua webpack hoặc Browserify) có nghĩa là bạn cũng có thể truy cập requirejsrequiređã là một biến cục bộ trong tình huống tht. Tôi thấy điều này hữu ích trong các thành phần React để tải các tập lệnh bổ sung vào componentDidMount.
Simon Smith

1
Thư viện tốt, tài liệu khó hiểu. Ngay cả phần "API" không phải là API, mà là một "sách dạy nấu ăn". Có rất nhiều hướng dẫn trên mạng tốt hơn để bắt đầu so với các tài liệu chính thức.
Hal50000

20

Are requirejsrequirecác cùng?

Đối với RequestJS 2.1.15 requirerequirejstrong không gian toàn cầu thực sự là "hoàn toàn giống nhau", có thể được chứng minh bằng thử nghiệm này, bạn có thể thực hiện trong bảng điều khiển:

> require === requirejs
true

Việc kiểm tra trả về truecho bạn biết chúng là cùng một đối tượng chức năng . Chúng không phải là hai hàm xảy ra có mã giống nhau hoặc giống hệt nhau. Chúng là cùng một đối tượng, thời kỳ.

Lưu ý, tuy nhiên, khi bạn thực thi define(['require'], function (require) {Hàm requiređược truyền vào thường khác với toàn cục require.

Bạn nên sử dụng requirehay requirejs?

Nó phụ thuộc. RequestJS là một trình tải AMD nhưng nó không phải là trình tải duy nhất trong thị trấn. Nếu bạn muốn viết mã phù hợp 100% với thông số AMD để ai đó sử dụng mã của bạn có thể sử dụng bất kỳ trình tải nào họ muốn mà không cần phải sửa đổi mã của bạn, thì bạn nên sử dụng requireở cấp độ toàn cầu, vì requirejsnó dành riêng cho RequestJS. Một trình nạp AMD khác sẽ không xác định nó. Thông số AMD xác định requirenhưng không requirejs.

Nếu bạn đang tải thứ gì đó khác xác định toàn cục requirethì bạn phải sử dụng requirejsở cấp toàn cầu để tránh xung đột.

Bên trong một mô-đun, luôn sử dụng defineđể lấy tham chiếu đến require. Bạn nên làm điều này bất kể có xung đột trong không gian toàn cầu hay không.


2

OK, chúng thực sự có thể "giống hệt nhau". Sau đó, hãy tập trung vào lý do tại sao bạn sử dụng cái này so với cái kia ...

Điều chưa rõ ràng là điều gì nên được coi là "phương pháp hay nhất": Nếu Requijs cung cấp thêm sự đảm bảo "nếu một số môi trường có thể đã có một request", thì sẽ không phải là một ý kiến ​​hay nếu bạn luôn sử dụng hàm requestjs để xác định một cấu hình request thay vì so với hàm yêu cầu?

Ngoài ra, điều gì sẽ xảy ra nếu điều không tưởng xảy ra và môi trường được đề cập không chỉ đã có "request" được xác định mà còn có "requestjs" được xác định? Điều đó có nghĩa là chúng ta cũng nên có một requestjsjs? Và như thế...?


1
Về mặt kỹ thuật có giống nhau, giống như $jQueryđang tồn tại. Nó chỉ để cung cấp dự phòng và trở thành một công dân tốt trong trường hợp một môi trường đã sử dụng require. Đó là rất nhiều một trường hợp cạnh và nó khuyến khích để sử dụng require, nhưng không cần thiết - github.com/amdjs/amdjs-api/blob/master/AMD.md#global-variables-
Simon Smith

0

Chúng là cùng một trang web Mở đã tải yêu cầu

sau đó mở bảng điều khiển Chrome

nhập yêu cầu trong bảng điều khiển và nhấn enter

gõ requestjs vào bảng điều khiển và nhấn enter

bạn có thể thấy rằng chúng có cùng chức năng với các tên khác nhau

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.