Reactjs `require未定义`将electron与react应用程序一起使用时出错

Reactjs `require未定义`将electron与react应用程序一起使用时出错,reactjs,webpack,electron,Reactjs,Webpack,Electron,我有一个基于React的web应用程序,我正试图用它来构建一个电子应用程序。我已经走了很远,应用程序似乎正在加载,但在这中间的某个地方,我收到一个错误,说未定义require 以下是我正在使用的工具的版本: 网页包3.6 反应15.6.1 电子1.7.6 以下是发生错误的线路的屏幕截图: 请注意,require是在控制台中定义的-我在某个地方读到,这可能是一种竞争条件,但即使是这样,我该怎么办 这是我的webpack.config.js(注意,我使用的是electron渲染器目标): v

我有一个基于React的web应用程序,我正试图用它来构建一个电子应用程序。我已经走了很远,应用程序似乎正在加载,但在这中间的某个地方,我收到一个错误,说
未定义require

以下是我正在使用的工具的版本:

  • 网页包
    3.6
  • 反应
    15.6.1
  • 电子
    1.7.6
以下是发生错误的线路的屏幕截图:

请注意,
require
是在控制台中定义的-我在某个地方读到,这可能是一种竞争条件,但即使是这样,我该怎么办

这是我的
webpack.config.js
(注意,我使用的是
electron渲染器
目标):

var path=require('path');
var webpack=require('webpack');
var StatsPlugin=require('stats-webpack-plugin');
var devServerPort=3808;
var预设值=['es2015'、'react'、'stage-0'];
变量选项={
条目:{
“应用程序”:[
“反应热加载程序/修补程序”,
“app/application.jsx”
]
},
输出:{path:_dirname,文件名:'js/bundle.js'},
决心:{
模块:[
join(uu dirname,'node_modules/'),
path.join(uu dirname,'app/'))
],
扩展:['.js','.jsx']
},
节点:{
__dirname:false,
__文件名:false
},
插件:[
//必须与electron.webpack.manifest\u文件名匹配
新的StatsPlugin('manifest.json'{
//我们只需要assetsByChunkName
错误:错误,
资料来源:假,
块:错,
模块:错误,
资产:真实
}),
新的webpack.ProvidePlugin({
“反应”:“反应”,
}),
新的webpack.ProvidePlugin({
“react dom”:“react dom”,
}),
新的webpack.ProvidePlugin({
$:“jquery”,
jQuery:“jQuery”
}),
新的webpack.DefinePlugin({
'process.env.NODE_env':JSON.stringify('development'),
'process.env.BASE_URL':JSON.stringify('localhost:3000'),
'global':{},//奇怪的lodash(?)网页包解决方案
“global.client”:false//superagent客户端修复程序
})
],
模块:{
装载机:[
{test:/\.js$/,exclude:/node_modules/,loaders:“babel loader”,查询:{pretests:['react','es2015','stage-0']},
{test:/\.jsx$/,exclude:/node\u modules/,加载程序:“babel加载程序”,查询:{presets:presets},
{test:/\.css$/,加载程序:“样式加载程序!css加载程序”},
{test:/\.png$/,加载程序:“url加载程序?限制=100000”},
{test://\.jpg$/,加载程序:“文件加载程序”},
{test://\(png |)$/,loader:'url loader?limit=100000'},
{ 
测试:/\(woff | woff2 | ttf | eot | svg)(\?v=[0-9]\[0-9]\[0-9])?$/,
加载器:“文件加载器”
},
{test:/\.scss$/,加载程序:[“样式加载程序”、“css加载程序?源映射”、“sass加载程序?源映射”]},
{
测试:/\.json$/,,
加载程序:['json-loader']
}
]
},
};
options.target='electron renderer';
module.exports=选项;

我甚至试过使用它,但它带来了更多的问题。

我过去也遇到过类似的问题,如果它实际上是同一个问题,下面是如何解决它的

您显示的require在包装IILife中,这意味着
不是
窗口
而是函数,这意味着当您尝试查找
require
时,它不在范围内。为了解决这个问题,你需要使用

在您的情况下,在
模块
装载机
下添加:

{
    test: require.resolve("/*require/import path which requires the file where require("url") is*/"), 
    use: "imports-loader?this=>window"
}

希望这能解决你的问题

您需要使用类似或的东西


请参阅更深入的说明。

谢谢,杰克。不确定放置什么而不是
/*require/import路径,该路径需要require(“url”)所在的文件为*/
require(“url”)
语句位于bundle.js(通过webpack命令输出)中。假设
require(“url”)
位于
src/js/url.js
,而您的
webpack.config.js
位于
src/
中,那么您可以使用
require.resolve('./js/url')
。我发布的链接上有更多信息。嗯,我也有同样的问题,这对我来说不起作用…我已经在使用webpack,使用
electron渲染器
目标应该足够了吧?