ElectronJS,JavaScript和Python-未定义require尝试了所有选项

时间:2018-09-03 07:18:23

标签: javascript html node.js python-3.x electron

当我尝试执行以下行时遇到问题:

var path = require('path') 

我得到

Uncaught ReferenceError: require is not defined

除要求错误外,其他一切正常,为什么?

我有3个文件:

translate.js:

function get_translate(){
var path = require('path') 
var trans = document.getElementById("trans").value
document.getElementById("trans").value = ""

var options = {
scriptPath : path.join(__dirname, '/../engine/'),
args : [trans]
}
translate = PythonShell.run('translate_engine.py', options);
translate.on('message', function(message) {
swal(message);
})
}

translate.html:

<head>
<link rel="stylesheet" 
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
<script 
src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> 
</script>
<script src="linkers/translate.js"></script>
</head>

<body>
<br>
<div class="container">
<button="btn btn-info"><a style="color:white" href="gui.html">Back</a> 
</button>

<div class="jumbotron">
  <h1>Translate App</h1>
  <br>
  <label>Enter you word here</label>
  <input id="trans" type="text" placeholder="Text"/>
  <button class="but but-success" onclick="get_translate()">Go</button>
</div>
</body>

translate_engine.py:

import sys
trans = sys.argv[1]
print(trans)
sys.stdout.flush()

谢谢

1 个答案:

答案 0 :(得分:0)

您是否要在电子BrowserWindow中执行此代码?

如果是,请在启动nodeIntegration时检查false是否未设置为BrowserWindow

mainWindow = new BrowserWindow({
  minWidth: 370,
  minHeight: 520,
  webPreferences: {
    nodeIntegration: true,
  },
});

nodeIntegration实际上默认为true,因此您也可以删除此行–我只是想使其非常明显;)

只要nodeIntegrationtrue,您就可以在电子渲染过程中运行任何个nodeJS代码。

这超出了您最初提出的问题,并且稍微高级了一些,但是如果您不想启用它,因为它附带了众多security issues,则可以将某些nodeJS方法公开给渲染过程。您可以使用预加载脚本执行此操作。

mainWindow = new BrowserWindow({
  ...
  webPreferences: {
    nodeIntegration: false,
    preload: path.join(__dirname, 'preload.js') // here you can re-expose certain methods such as `require`
  },
});
  

preload String(可选)-指定在页面中其他脚本运行之前将被加载的脚本。无论打开还是关闭节点集成,此脚本始终可以访问节点API。该值应该是脚本的绝对文件路径。关闭节点集成后,预加载脚本可以将Node全局符号重新引入到全局范围中。

更多信息可以在这里找到: https://electronjs.org/docs/api/process#event-loaded