nodejs – jade ReferenceError:进程没有定义
工程是由webstorm的快速模板生成的。
npm依赖关系尚未安装!
当我运行appplicaion时,结果页是OK的,但是控制台总是会说:
'ReferenceError:进程未定义'
为什么会这样呢? 我在Win7 64位下。
我终于find问题的起源。 这不是Jade或者Express,它是Uglify-JS ,它是变形者的依赖,它是Jade的依赖,通常是expression的依赖。
在Windows 7和Windows 8(均为64位)上,JetBrains在WebStorm IDE中遇到过这个问题。
我已经在这个拉取请求中解决了问题。
我所需要做的只是在节点vm上下文对象中包含process
。 这样做后,我收到了一个新的错误:
[ReferenceError:缓冲区未定义]
我所要做的只是在vm上下文对象中包含Buffer
,并且不再收到那些愚蠢的消息。
我仍然不完全明白为什么它只在debugging过程中发生,但是在我非常有限的经验中,我发现节点虚拟机模块是变幻莫测的东西,或者至less是某些人使用它的方式。
编辑:这是在节点VM模块本身的错误。 我想出了如何重现它,并找出为什么它只发生在debugging过程中。
这个错误只发生在vm.runInContext(code, context, file);
的第三个(文件)参数中vm.runInContext(code, context, file);
。 所有关于这个参数的文档都说它是可选的,只用于堆栈跟踪。 马上就可以看到为什么它只发生在debugging过程中。 然而,当你通过这个论点时,一些有趣的行为开始出现。
重现错误(注意文件参数必须传入或者根本不会发生这个错误):
-
文件参数必须以“.js”结尾,并且必须至less包含一个正斜杠或双反斜杠。 由于这个参数有望成为一个文件path,因此这些参数的存在可能会触发其他一些function。
-
您传入的代码(第一个参数)不能以函数开头。 如果它从一个函数开始,那么错误不会发生。 到目前为止,似乎开始与任何东西,但function的代码将产生参考错误。 不要问我为什么这个说法对错误是否显示有影响,因为我不知道。
-
您可以通过在传递给
vm.createContext(contextObject);
的上下文对象中包含process
来修复错误vm.createContext(contextObject);
。var context = vm.createContext({ console: console, process: process });
如果你的文件path参数是格式正确的(匹配#1中的要求),那么在上下文中包括
process
将摆脱错误消息; 也就是说,除非你的文件path没有指向一个实际的文件,在这种情况下,你会看到以下内容:{ [Error: ENOENT, no such file or directory 'c:\suatils.js'] errno: 34, code: 'ENOENT', path: 'c:\\test.js', syscall: 'open' }
指向一个实际的文件将摆脱这个错误。
我将分叉节点存储库,看看我是否可以改善这个function和它的行为方式,那么也许我会提交一个拉请求。 至less我会为节点队打开一张票。
编辑2:我已经确定这是WebStorm具体的问题。 当WebStorm启动节点进程时,我们得到这个问题。 如果你从命令行debugging没有问题。
video:http: //youtu.be/WkL9a-TVHNY?hd=1
试试这个…设置webstormdebugging器打破所有未处理的exception。 然后以debugging模式运行应用程序。 我想你会发现[引用错误]是从引用的fs.js抛出。 更具体地说,fs.js行684:
fs.statSync = function(path) { nullCheck(path); **return binding.stat(pathModule._makeLong(path));** };
这些是我使用与您相同的开发环境的发现。 (赢64,webstorm,节点等…)
从那里你可以使用Webstorms 评估expression式来重新运行该代码行,并确切地看到你失败的原因。