2013-08-30 16 views
24

W RequireJS, jaka jest podstawowa różnica między użyciem require() Vs define();RequireJS: Różnica między require() i define()

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

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

Wszelkie przypadki użycia byłoby bardzo pomocne ..

+0

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

+1

To jest duplikat, ale tutaj wyjaśnienie należy podać w odniesieniu do przykładu . –

Odpowiedz

40

Jeden rdzeń różnicą, że denerwują mnie na początku użytkowania był zastanawianie się, że definenigdy nie można nazwać.

Dopóki istnieje tylko jeden plik define, zarejestruje on ten moduł jako dostępny pod tą nazwą pliku. Jednak moduły define są ładowane tylko wtedy, gdy funkcja require prosi o każdą z nich.

Definicja: Jeśli potrzebujesz XXX, najpierw załaduj te inne rzeczy, a następnie zwróć wynik tej funkcji.

Wymaga: Załaduj te inne rzeczy, a następnie uruchom tę funkcję. (Nie „jeśli”)

Przykład: Powiedzmy, że to ten JS plik na swojej stronie:

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

Jeśli to jedyny plik JavaScript, można otworzyć stronę, i nie byłoby w tym nic w logu konsoli, pomimo skryptu mówiącego, żeby powitał użytkownika. Jednak, że jeśli zmienia się gdzieś na stronie, lub w innym scenariuszu, wstawić następujące:

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

Teraz strona położy wiadomość powitalną w konsoli podczas ładowania.

W rzeczywistości, z tym drugim w miejscu, nie trzeba było ręcznie ręcznie dołączyć welcomepage.js jako znacznik <script>; załaduje go ze swojej lokalizacji, gdy tylko zobaczy wymaganie i zda sobie sprawę, że tego potrzebuje.

+1

Thx za odpowiedź ... Czy mógłbyś rozwinąć z podstawowym przykładem ... – testndtv

+1

@ Katana314 ... mógłbyś ułożyć skomplikowane ... – testndtv

+1

@testndtv Dodano przykład; mam nadzieję, że to pomoże. – Katana314

1

Wydaje mi się, że zawsze używasz definicji dla definicji modułów. Masz do tego kilka smaków, możesz zdefiniować moduł z jego zależnościami w tablicy jako pierwszy argument do zdefiniowania (jak w przykładzie, który wysłałeś).

Albo można użyć Simplified CommonJS wrapper, coś takiego:

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

Może masz mieszane z formatem JSONP service dependency, który wykorzystuje require(), aby załadować usługę, a następnie określ define() jako Wywołanie zwrotne JSONP, które ostatecznie zdefiniuje moduł po odpowiedzi na usługę.

Ostatecznie, używasz funkcji define() do definiowania modułów, i wymagają() do ich załadowania.

10

require i requirejs są takie same.

require === requirejs // true 

require to sposób na załadowanie zdefiniowanego modułu.Na przykład, aby załadować moduł logger mogłem zrobić:

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

Tutaj Wołam require, określając już zdefiniowany moduł o nazwie logger i używanie go przez wywołanie metody bla.

define to sposób definiowania modułu. Na przykład, aby zdefiniować moduł logger mogłem zrobić:

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

Tutaj zadzwoniłem define i zdefiniowany moduł logger. w tym module zwróciłem funkcję bla, którą chcę ujawnić.

Czasami zdefiniuj wygląda bardzo podobnie do eksportu, ponieważ definicja może również zależeć i korzystać z innych modułów, tak jak wymagają mogą korzystać z innych modułów. Pokażę ci tego samego modułu logger, tym razem przy użyciu modułu

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

Tu moduł rejestratora I defined, posiada również zależność nazwie popup a więc wygląda na to, require.

-2

wymagają() i określenia() stosowane w celu załadowania dependencies.There to główna różnica pomiędzy tymi dwoma metody.

jego bardzo Proste Guys

require(): Metoda służy do uruchamiania natychmiastowe funkcjonalności. define(): Metoda służy do definiowania modułów używanych w wielu lokalizacjach (ponowne użycie).

-1

określić sposób deklarujemy moduł, zgodnie z AMD formacie modułu (istnieją inne dostępne formaty modułów jak CommonJS, ES2015, System.register, UMD)

natomiast ..

wymagają jest moduł ładowania skonstruować, że to Dostępne z ładowarkami modułowymi, takimi jak RequireJs, SystemJS, Wbudowany moduł ładowania węzła. Jest używany, gdy chcesz użyć modułu zdefiniowanego w jednym z wymienionych powyżej formatów modułów.

Powiązane problemy