2015-04-15 10 views
13

Also, ich bin mit RequireJS und Reaktion, versuchen, eine Drittanbieter-Komponente zu laden, die mit installiert wurde:module.exports „Modul ist nicht definiert“

npm install react-autocomplete 

Die Struktur ist hier: https://github.com/rackt/react-autocomplete/tree/master/lib

Nun, ich habe eine main.js Datei, dann eingeleitet, wenn requireJS geladen wird, die wie folgt aussieht:

require.config({ 
paths: { 
     "react" : "react/react", 
     "jsx-transformer" : "react/JSXTransformer", 
     "react-autocomplete" : "node_modules/react-autocomplete/lib/main" 
    } 
}); 

require(["react"], function(react) { 
    console.log("React loaded OK."); 
}); 

require(["jsx-transformer"], function(jsx) { 
    console.log("JSX transformer loaded OK."); 
}); 

require(['react-autocomplete'], function (Autocomplete) { 
    console.log("React autocomplete component loaded OK."); 
    var Combobox = Autocomplete.Combobox; 
    var ComboboxOption = Autocomplete.Option; 
    console.log("Autocomplete initiated OK"); 
}); 

Nun, es alle Lasten in Ordnung, aber die dritte erfordern Aussage wirft ein „Modul nicht ist definiert“, für die main.js Datei in der Fremdkomponente, die wie folgt aussieht:

module.exports = { 
    Combobox: require('./combobox'), 
    Option: require('./option') 
}; 

Ich habe darüber gelesen, dass das mit mir zu tun hat versucht, einen Commonjs-Stil Modul erfordern, aber ich kann nicht herausfinden, wie ich es selbst reparieren kann, da ich neu bin.

Hat jemand ein klares Beispiel, wie ich das umgehen könnte?

Antwort

20

RequireJS kann CommonJS-Module nicht laden, wie sie sind. Es gibt jedoch eine minimale Änderung, die Sie vornehmen können, um sie zu laden. Sie haben sie in einem define Aufruf wie folgt zu wickeln:

define(function (require, exports, module) { 

    module.exports = { 
    Combobox: require('./combobox'), 
    Option: require('./option') 
    }; 

}); 

Wenn Sie eine Reihe von Modulen haben Sie konvertieren müssen, oder wenn Sie ein Drittanbieter-Bibliothek verwenden im Muster Commonjs geschrieben und konvertieren möchten Als Teil eines Build-Prozesses können Sie r.js verwenden, um die Konvertierung für Sie durchzuführen.

+1

Richtig, denke das Problem ist, dass ich dann in der Drittanbieter-Komponente fummeln werde. Aber danke! – joakimnorberg

4

Das Problem ist, dass requireJS nicht CommonJS-Module nur AMD unterstützt. Wenn also die Third-Party-Library AMD nicht unterstützt, dann musst du durch einige Sprünge springen, um es zum Laufen zu bringen.

Wenn Sie die Möglichkeit haben, würde ich da diejenigen mit browserify oder webpack für Modul-Lade vorschlagen sind die Werkzeuge, die die Mehrheit der Community reagieren gewählt haben und praktisch alle Komponenten von Drittanbietern auf npm als Commonjs Module veröffentlicht reagieren werden.

Verwandte Themen