Saturday, June 1, 2024
 Popular · Latest · Hot · Upcoming
38
rated 0 times [  44] [ 6]  / answers: 1 / hits: 110548  / 9 Years ago, wed, april 15, 2015, 12:00:00

So, I am using RequireJS and React, trying to load a third-party component, which has been installed with:



npm install react-autocomplete


The structure is here: https://github.com/rackt/react-autocomplete/tree/master/lib



Now, I have a main.js file, initiated when requireJS is loaded, that looks like this:



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);
});


Now, it all loads OK, but the third require statement throws a module is not defined, for the main.js file in the third-party component, which looks like this:



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


I've been reading about that this has to do with me trying to require a CommonJS-style module, but I can't figure out how to fix it on my own, as I'm new to this.



Does anyone have a clear example on how I could get around this?


More From » requirejs

 Answers
11

RequireJS cannot load CommonJS modules as-is. However, there is a minimal modification you can make to them to load them. You have to wrap them in a define call like this:



define(function (require, exports, module) {

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

});


If you have a bunch of modules you need to convert, or if you are using a third-party library written in the CommonJS pattern and want to convert it as part of a build process, you can use r.js to perform the conversion for you.


[#67062] Monday, April 13, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
yasmeeng

Total Points: 516
Total Questions: 97
Total Answers: 101

Location: South Korea
Member since Fri, Sep 11, 2020
4 Years ago
;