Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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/2/node.js/36.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 NodeJS vm.runInThisContext()和缺少文件名_Javascript_Node.js - Fatal编程技术网

Javascript NodeJS vm.runInThisContext()和缺少文件名

Javascript NodeJS vm.runInThisContext()和缺少文件名,javascript,node.js,Javascript,Node.js,每当我运行时,我运行的代码都会报告为未定义 这也会导致任何fs.readFile调用都无法使用相对路径的情况。实际上,确切地说,文件系统函数根本不起作用,即使我向它们提供了指向现有文件的硬编码绝对路径 例如,这将不起任何作用: var fs = require('fs'); fs.readFile('/home/test/file.txt', function(e, data) { if (e) {throw e;} console.log('here i am'); });

每当我运行时,我运行的代码都会报告为未定义

这也会导致任何
fs.readFile
调用都无法使用相对路径的情况。实际上,确切地说,文件系统函数根本不起作用,即使我向它们提供了指向现有文件的硬编码绝对路径

例如,这将不起任何作用:

var fs = require('fs');
fs.readFile('/home/test/file.txt', function(e, data) {
    if (e) {throw e;}
    console.log('here i am');
});
结果是什么都没发生。如果我在普通NodeJS代码中运行代码,那么它会输出“我在这里”,但是如果我通过
vm
模块运行代码,那么什么也不会发生。回调永远不会被调用,因为出于某种原因,它找不到文件,而且似乎也没有任何超时


如何使Node理解执行的代码是某个“文件”,并使
fs
模块功能正常工作?我尝试将第二个参数指定为,但没有发现任何区别。看起来Node几乎不关心第二个参数。

我甚至不确定我以前是如何让代码示例工作的,因为现在它们根本不工作

我发现您可以使用
vm.runInNewContext(code,sandbox,filename)
,然后指定
require
\uu filename
以及沙盒中需要的任何内容:

// Place here some path to test it. I'm using Cygwin...
var filename = '/cygdrive/z/www/project/src/bootstrap.js';
var code = "var fs = require('fs'); fs.readFile('./path/to/some/file.js', function(e, data) {if (e) {throw e;} console.log(data.toString());});";

var vm = require('vm');
vm.runInNewContext(code, {
    require: require,
    console: console,
    __filename: filename
}, filename);

然后,如果我运行node bootstrap.js--debug就可以了

我甚至不确定我以前是如何让代码示例工作的,因为现在它们根本不工作

我发现您可以使用
vm.runInNewContext(code,sandbox,filename)
,然后指定
require
\uu filename
以及沙盒中需要的任何内容:

// Place here some path to test it. I'm using Cygwin...
var filename = '/cygdrive/z/www/project/src/bootstrap.js';
var code = "var fs = require('fs'); fs.readFile('./path/to/some/file.js', function(e, data) {if (e) {throw e;} console.log(data.toString());});";

var vm = require('vm');
vm.runInNewContext(code, {
    require: require,
    console: console,
    __filename: filename
}, filename);

然后,如果我运行node bootstrap.js--debug就可以了

你是说require.path.unshift=>我没有涉及任何与requires相关的内容。你是说vm.runInThisContext(code,/home/full/path/to/file.js)不起作用??是的,如果现在使用
code
文件名或
全局文件名
,它们将等于
未定义的
。这也会在使用相对路径时中断文件系统功能。你是说require.paths.unshift=>我没有触及任何与requires相关的内容。你是说vm.runinthiscoxt(code,/home/full/path/to/file.js)不起作用??是的,如果
code
现在使用
\uu filename
global.\uu filename
,它们将等于未定义的
。当使用相对路径时,这也会中断文件系统功能。dwfm对我不起作用。我只有在另一个函数中运行InNewContext。dwfm对我不起作用。我只有在另一个函数中运行InNewContext。