node modules es6 javascript requirejs reactjs commonjs

javascript - modules - require js node



módulo.exportaciones “módulo no está definido” (2)

El problema es que requireJS no admite módulos de CommonJS solo AMD. Entonces, si la biblioteca de terceros no es compatible con AMD, entonces tendrás que saltar a través de algunos aros para que funcione.

Si tiene la opción, sugeriría usar browserify o webpack para cargar módulos, ya que esas son las herramientas que la mayoría de la comunidad reaccionó y prácticamente todos los componentes de reacción de terceros se publican en npm como módulos CommonJS.

Por lo tanto, estoy usando RequireJS y React, tratando de cargar un componente de terceros, que se ha instalado con:

npm install react-autocomplete

La estructura está aquí: https://github.com/rackt/react-autocomplete/tree/master/lib

Ahora, tengo un archivo main.js, iniciado cuando se carga requireJS, que tiene este aspecto:

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

Ahora, todo se carga bien, pero la tercera instrucción de requerimiento arroja un "módulo no está definido", para el archivo main.js en el componente de terceros, que se ve así:

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

He estado leyendo acerca de que esto tiene que ver conmigo tratando de requerir un módulo al estilo de CommonJS, pero no puedo descubrir cómo solucionarlo por mi cuenta, ya que soy nuevo en esto.

¿Alguien tiene un ejemplo claro sobre cómo podría evitar esto?


RequireJS no puede cargar los módulos CommonJS como están. Sin embargo, hay una modificación mínima que puedes hacerles para cargarlos. Tienes que envolverlos en una llamada de define como esta:

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

Si tiene un montón de módulos que necesita convertir, o si está utilizando una biblioteca de terceros escrita en el patrón CommonJS y desea convertirla como parte de un proceso de compilación, puede usar r.js para realizar la conversión de tú.