Domanda RequireJs - Define vs Require


Per i moduli non restituisco un oggetto che ho utilizzato richiedono invece di definire. Ad esempio, supponiamo di avere il seguente plug-in jQuery (jquery.my-plugin.js):

require(['jquery'], function($) {
    $.fn.myPlugin = function(options) {
        ...
    };
});

Ora se dico ciò che segue in un altro modulo:

require(['jquery', 'jquery.my-plugin'], function($) {
    $('#element').myPlugin();
});

Ho trovato che questo non funziona perché myPlugin non è stato registrato. Tuttavia, se cambio il requisito in un define all'interno del mio modulo jquery.my-plugin, allora funziona bene.

Sarei grato se qualcuno potesse chiarire il motivo per cui devo farlo. Mi piace capire completamente qualcosa prima di andare avanti e usarlo. Grazie


50
2018-06-28 13:41


origine


risposte:


In sostanza, quando lo usi require stai dicendo "lo voglio, ma voglio anche tutte le sue dipendenze". Quindi nell'esempio seguente, richiediamo A, ma è necessario che cercheremo tutte le dipendenze e assicuriamo che vengano caricate prima di continuare.

require(['a'], function(a) {
    // b, c, d, e will be loaded
});

// File A
define(['b','c','d','e'], function() {
    return this;
});

La regola generale si usa define quando si desidera definire un modulo che verrà riutilizzato dalla propria applicazione e utilizzato require per caricare semplicemente una dipendenza.


91
2018-06-28 14:10



Di seguito è riportato il codice che dovrebbe essere all'interno jquery.my-plugin.js quale definisce un modulo chiamato 'jquery.my-plugin' che può essere usato come dipendenza altrove.

define(['jquery'], function($) { //jquery is a dependency to the jquery.my-plugin module
    $.fn.myPlugin = function(options) { //adds a function to the *global* jQuery object, $ (global since jQuery does not follow AMD)
        ...
    };
});

Di seguito è riportata una sezione di codice in cui si desidera collegare la funzione plugin all'oggetto jQuery globale e quindi utilizzarla ...

require(['jquery.my-plugin'], function() { // jquery.my-plugin is loaded which attaches the plugin to the global JQuery object as shown above, then this function fires

    //the only reason $ is visible here is because it's global. If it was a module, you would need to include it as a dependency in the above require statement
    $('#element').myPlugin(); //the $ refers to the global object that has the plugin attached
});

2
2018-01-15 16:32