Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 模块.exports“;“模块未定义”;_Javascript_Requirejs_Reactjs_Commonjs - Fatal编程技术网

Javascript 模块.exports“;“模块未定义”;

Javascript 模块.exports“;“模块未定义”;,javascript,requirejs,reactjs,commonjs,Javascript,Requirejs,Reactjs,Commonjs,因此,我正在使用RequireJS和React,尝试加载第三方组件,该组件已安装: npm install react-autocomplete 结构如下: 现在,我有一个main.js文件,在加载requireJS时启动,如下所示: require.config({ paths: { "react" : "react/react", "jsx-transformer" : "react/JSXTransformer", "react-autocomplet

因此,我正在使用RequireJS和React,尝试加载第三方组件,该组件已安装:

npm install react-autocomplete
结构如下:

现在,我有一个main.js文件,在加载requireJS时启动,如下所示:

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");
 });
module.exports = {
  Combobox: require('./combobox'),
  Option: require('./option')
};
define(function (require, exports, module) {

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

});
现在,它都加载OK,但是第三个require语句为第三方组件中的main.js文件抛出了一个“module is not defined”,如下所示:

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");
 });
module.exports = {
  Combobox: require('./combobox'),
  Option: require('./option')
};
define(function (require, exports, module) {

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

});
我一直在读关于这与我试图要求一个CommonJS风格的模块有关,但我自己不知道如何修复它,因为我是新手


有没有人能举一个明确的例子来说明我如何解决这个问题?

问题是,requireJS不支持CommonJS模块,只支持AMD。因此,如果第三方库不支持AMD,那么您必须克服一些困难才能使其正常工作


如果您有选择,我建议您使用或进行模块加载,因为大多数react社区都选择了这些工具,而且几乎所有第三方react组件都作为CommonJS模块发布在npm上。

RequireJS无法按原样加载CommonJS模块。但是,您可以对它们进行最小的修改以加载它们。您必须将它们包装在
define
调用中,如下所示:

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");
 });
module.exports = {
  Combobox: require('./combobox'),
  Option: require('./option')
};
define(function (require, exports, module) {

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

});

如果您有一堆需要转换的模块,或者如果您使用的是以CommonJS模式编写的第三方库,并且希望将其作为构建过程的一部分进行转换,那么您可以使用来执行转换。

对,我猜问题是我接下来会修改第三方组件。但是谢谢!