2013-08-30 55 views
24

Trong RequireJS, sự khác biệt cơ bản giữa việc sử dụng require() Vs define();RequireJS: Sự khác biệt giữa require() và define()

require(['a'], function(a) { 
    // some code 
}); 

// A.js 
define(['b','c','d','e'], function() { 
    //some code 
}); 

Bất kỳ trường hợp sử dụng sẽ rất hữu ích ..

+0

Xem http://stackoverflow.com/questions/9507606/when-to-use-require-and-when-to-use-define –

+1

Nó _is_ một bản sao nhưng ở đây giải thích nên được đưa ra dưới dạng ví dụ . –

Trả lời

40

Một sự khác biệt cốt lõi mà bực mình tôi sử dụng đầu đã tìm ra rằng một definecó thể không bao giờ được gọi là.

Miễn là chỉ có một define cho mỗi tệp, nó sẽ đăng ký mô-đun đó dưới dạng tên tệp đó. Tuy nhiên, các mô-đun define chỉ được tải khi chức năng require yêu cầu mỗi mô-đun.

Xác định: Nếu bạn cần XXX, sau đó tải những thứ khác lên trước, sau đó trả lại kết quả của hàm này.

Yêu cầu: Tải những thứ khác, sau đó chạy chức năng này. (Không có "nếu")

Ví dụ: Hãy nói rằng bạn bao gồm này JS tập tin trong trang của bạn:

// this is in company/welcomepage.js 
define(['company/ui_library'], 
    function(uiLib) { 
     console.log('Welcome to {company}!'); 
    } 
); 

Nếu đó là tập tin javascript chỉ, bạn có thể mở trang của bạn, và sẽ không có gì trong nhật ký bảng điều khiển, bất chấp tập lệnh yêu cầu nó chào mừng người dùng. Tuy nhiên, điều đó sẽ thay đổi nếu ở đâu đó trong trang hoặc trong một tập lệnh khác, bạn chèn thông tin sau:

require(['company/welcomepage'], function() { 
    // optionally insert some other page-initialization logic here 
}); 

Bây giờ, trang sẽ đưa thông điệp chào mừng vào bảng điều khiển khi nó tải.

Thực tế, với địa chỉ thứ hai tại chỗ, sẽ không cần phải thủ công bao gồm welcomepage.js làm thẻ <script>; nó sẽ tải nó từ vị trí của nó ngay sau khi nó thấy yêu cầu, và nhận ra nó cần nó.

+1

Thx cho câu trả lời của bạn ... Bạn có thể xin vui lòng xây dựng với một ví dụ cơ bản ... – testndtv

+1

@ Katana314 ... u có thể xin xây dựng ... – testndtv

+1

@testndtv Thêm một ví dụ; hy vọng nó giúp. – Katana314

1

Tôi tin rằng bạn luôn sử dụng định nghĩa cho định nghĩa mô-đun của mình. Bạn có nhiều hương vị để làm như vậy, bạn có thể định nghĩa một mô-đun với các phụ thuộc của nó trong một mảng làm đối số đầu tiên để xác định (như trong ví dụ bạn đã đăng).

Hoặc bạn có thể sử dụng Simplified CommonJS wrapper, một cái gì đó như thế này:

define(function (require) { 
    var otherModule = require('otherModule'); 
    return function() { 
     return otherModule.operation(); 
    }; 
}); 

Có lẽ bạn đã lẫn lộn với các định dạng JSONP service dependency, trong đó sử dụng yêu cầu() để tải các dịch vụ, và sau đó xác định nghĩa() là Gọi lại JSONP mà cuối cùng sẽ xác định mô-đun sau khi dịch vụ phản hồi.

Vì vậy, cuối cùng, bạn sử dụng define() để xác định mô-đun và yêu cầu() để tải chúng.

10

requirerequirejs giống nhau.

require === requirejs // true 

require là cách tải mô-đun đã được xác định.Ví dụ để nạp module logger tôi có thể làm:

require(["logger"], function(logger){ 
    logger.bla("S"); 
}); 

Ở đây tôi đang kêu gọi require, chỉ định một mô-đun đã được xác định gọi là logger và sử dụng nó bằng cách gọi phương pháp bla của nó.

define là cách xác định mô-đun. Ví dụ để xác định một mô-đun logger tôi có thể làm:

// logger.js 
define(function(){ 
    return { 
    bla: function(x){ 
     alert(x); 
    } 
    } 
}); 

Ở đây tôi gọi là define và xác định các mô-đun logger. trong mô-đun này tôi đã trả về hàm bla tôi muốn phơi bày.

Đôi khi xác định trông rất giống với xuất vì xác định cũng có thể phụ thuộc và sử dụng các mô-đun khác giống như yêu cầu có thể sử dụng các mô-đun khác. Hãy để tôi chỉ cho bạn cùng mô-đun logger, lần này sử dụng một mô-đun

// logger.js 
define(["popup"], function(popup){ 
    return { 
    bla: function(x){ 
     popup.show(x); 
    } 
    } 
}); 

Đây module logger tôi defined, cũng có một sự phụ thuộc gọi popup và do đó nó trông giống như require.

-2

yêu cầu()xác định() cả hai được sử dụng để tải phụ thuộc. Có sự khác biệt lớn giữa hai phương pháp này.

của nó rất đơn giản Guys

Yêu cầu(): Phương pháp được sử dụng để chạy các chức năng ngay lập tức. define(): Phương pháp được sử dụng để xác định mô-đun để sử dụng ở nhiều vị trí (tái sử dụng).

-1

xác định là cách chúng ta khai báo một mô-đun, phù hợp với AMD dạng mô-đun (có sẵn định dạng mô-đun khác như CommonJS, ES2015, System.register, UMD)

trong khi ..

yêu cầu là cấu trúc tải mô-đun là khả dụng với các trình tải mô-đun như Yêu cầu số, SystemJS, Node's trình tải mô đun được tích hợp sẵn. Nó được sử dụng khi bạn muốn sử dụng một mô-đun được định nghĩa trong một trong các định dạng mô-đun nêu trên.

Các vấn đề liên quan