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过程中。 然而,当你通过这个论点时,一些有趣的行为开始出现。

重现错误(注意文件参数必须传入或者根本不会发生这个错误):

  1. 文件参数必须以“.js”结尾,并且必须至less包含一个正斜杠或双反斜杠。 由于这个参数有望成为一个文件path,因此这些参数的存在可能会触发其他一些function。

  2. 您传入的代码(第一个参数)不能以函数开头。 如果它从一个函数开始,那么错误不会发生。 到目前为止,似乎开始与任何东西,但function的代码将产生参考错误。 不要问我为什么这个说法对错误是否显示有影响,因为我不知道。

  3. 您可以通过在传递给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式来重新运行该代码行,并确切地看到你失败的原因。