Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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
Node.js 渲染器中定义的电子变量在导入的模块中不正确_Node.js_Electron - Fatal编程技术网

Node.js 渲染器中定义的电子变量在导入的模块中不正确

Node.js 渲染器中定义的电子变量在导入的模块中不正确,node.js,electron,Node.js,Electron,我目前正在将我在Node.js中编写的脚本转换为Electron。然而,我遇到了一个可变范围的问题。在my Node.js脚本中定义的变量在我的模块中不可用,除非它们被传递或分配。然而,在electron中,如果我声明一个变量,它将在我的所有模块中都可用,而无需传递或分配它。例如,此Node.js脚本将正确失败: // index.js var myModule = require('./src/myModule.js'); var myString = 'string'; myModule.r

我目前正在将我在Node.js中编写的脚本转换为Electron。然而,我遇到了一个可变范围的问题。在my Node.js脚本中定义的变量在我的模块中不可用,除非它们被传递或分配。然而,在electron中,如果我声明一个变量,它将在我的所有模块中都可用,而无需传递或分配它。例如,此Node.js脚本将正确失败:

// index.js
var myModule = require('./src/myModule.js');
var myString = 'string';
myModule.run();

// myModule.js
exports.run = function() {
    console.log(myString); // Correctly says myString is undefined because it is not declared in myModule.js
}
但是,Electron中的相同代码将打印
renderer.js
中定义的变量:

// renderer.js
var myModule = require('./src/myModule.js');
var myString = 'string';
myModule.run();

// myModule.js
exports.run = function() {
    console.log(myString); // Prints 'string' even though it is not declared in myModule.js
}

如何防止
renderer.js
中定义的变量在我的模块中可用。我发现创建无组织的代码非常容易。

您需要在html中将脚本类型定义为模块

<script type="module" src="./renderer.js"></script>
您的原始nodejs文件应按预期工作:

//index.js
var myModule=require('./src/myModule.js');
var myString='string';
myModule.run();
//myModule.js
exports.run=函数(){
console.log(myString);//myString现在未定义
}

但您应该知道renderer.js中定义的变量仍将使用全局作用域。

如何打包?我很惊讶,
require
起作用了……对我来说不起作用。@Codebling在创建浏览器窗口时,您是否确保
nodeIntegration
设置为
true
?默认情况下,它是
false
。是的,可以!发射电子有几种不同的方法。直接运行脚本时,我无法复制。将
type=“module”
添加到脚本标记中会出现错误:
加载模块脚本失败:服务器响应的非JavaScript MIME类型为“”。根据HTML规范,对模块脚本执行严格的MIME类型检查。
我使用一个选项更新了注释,但没有使用type=module。我曾经对此进行过测试,您能提供有关您的环境和配置的信息吗?第一个答案很好,Hrun!通过浏览器框架加载的任何脚本都有一个奇怪的伪
窗口
模块上下文,导致变量是全局变量,但任何其他模块都被包装在一个孤立的(也称为“真实”)模块上下文中。我可以确认这对meTurns有效,我运行的electron也过时了。更新到electron
8.2.0
修复了脚本未加载的问题。添加
type=“module”
会使我的代码按预期运行。悬赏让我在18小时内完成。