这个项目是由WebStorm的Express模板生成的。
npm依赖项已经安装!
当我运行应用程序时,结果页面正常,但控制台总是会显示:
'ReferenceError: process is not defined'
为什么会发生这种情况? 我使用的是Win7 64位操作系统。
这个项目是由WebStorm的Express模板生成的。
npm依赖项已经安装!
当我运行应用程序时,结果页面正常,但控制台总是会显示:
'ReferenceError: process is not defined'
为什么会发生这种情况? 我使用的是Win7 64位操作系统。
process
。在那之后,我收到了一个新错误:
我所需要做的就是在vm上下文对象中也包含[ReferenceError: Buffer is not defined]
Buffer
,然后我就不再收到那些愚蠢的消息了。
vm.runInContext(code, context, file);
的第三个(文件)参数中包含才会发生此错误。所有文档都说关于此参数仅为可选项,并且仅用于堆栈跟踪。一下子就能看出为什么它只会在调试期间发生。但是,当你传入此参数时会发生一些有趣的行为。文件参数必须以".js"结尾,并且必须至少包含一个前斜杠或双反斜杠。由于预期该参数是文件路径,因此它包含这些内容可能触发其他功能。
您传递的代码(第一个参数)不能以函数开头。如果以函数开头,则不会发生错误。到目前为止,似乎以任何东西(除了函数)开头的代码都会生成引用错误。不要问我为什么这个参数会影响是否出现错误,因为我不知道。
您可以通过在传递给vm.createContext(contextObject);
的上下文对象中包含process
来修复该错误。
var context = vm.createContext({
console: console,
process: process
});
如果你的文件路径参数符合要求(符合#1中的要求),那么在上下文中包含process
将消除错误消息;也就是说,除非你的文件路径没有指向一个实际的文件,否则你会看到以下内容:{ [Error: ENOENT, no such file or directory 'c:\suatils.js']
errno: 34,
code: 'ENOENT',
path: 'c:\\test.js',
syscall: 'open' }
指向一个实际的文件将会解决这个错误。
我将fork node仓库,看看能否改进此函数和其行为方式,然后也许我会提交一个pull request。至少我会为node团队打开一个票。
编辑 2:我已确定这是WebStorm特有的问题。当WebStorm启动节点进程时,我们会遇到这个问题。如果从命令行调试,就没有问题。
fs.statSync = function(path) {
nullCheck(path);
**return binding.stat(pathModule._makeLong(path));**
};
require()
调用的那一行中断,因为它检查了许多不存在的路径,同时尝试加载模块。不幸的是,我不认为这些异常与此问题有任何关系。然而,我成功地将其缩小到我的应用程序中的require('jade')
调用。我手动使用Jade,所以更容易将其缩小到Jade。 - Chev我遇到了同样的错误,原因是我在文件顶部有以下内容:
const argv = require("minimist")(process.argv.slice(two));
const process = require("child_process");
那个混乱的节点,我猜它认为在那个时候还没有定义过进程。
将第二行改成不同的变量名解决了这个问题。