当我尝试执行以下行时遇到问题:
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()
谢谢
答案 0 :(得分:0)
您是否要在电子BrowserWindow中执行此代码?
如果是,请在启动nodeIntegration
时检查false
是否未设置为BrowserWindow
。
mainWindow = new BrowserWindow({
minWidth: 370,
minHeight: 520,
webPreferences: {
nodeIntegration: true,
},
});
nodeIntegration
实际上默认为true
,因此您也可以删除此行–我只是想使其非常明显;)
只要nodeIntegration
是true
,您就可以在电子渲染过程中运行任何个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