工程由webstorm的express模板生成。
尚未安装 npm 依赖项!
当我运行应用程序时,结果页面是正常的,但控制台总是说:
'ReferenceError: process is not defined'
为什么会这样?我在 Win7 64 位下。
最佳答案
我终于找到问题的根源了。不是 Jade 或 Express,而是 Uglify-JS这是 transformers 的依赖项这是 Jade 的依赖项,通常是 express 的依赖项。
我在 WebStorm IDE by JetBrains 遇到过这个问题在 Windows 7 和 Windows 8(均为 64 位)上。
我已经在 this pull request 中解决了这个问题.
我需要做的就是在 Node vm 上下文对象中包含 process
。这样做之后我收到了一个新错误:
[ReferenceError: Buffer is not defined]
我所要做的就是将 Buffer
也包含在 vm 上下文对象中,我不再收到那些愚蠢的消息。
我仍然不完全理解为什么它只在调试期间发生,但根据我极其有限的经验,我发现 node vm module是一个善变的东西,或者至少有些人使用它的方式是这样。
编辑:这是node vm module 中的错误本身。我想出了如何重现它,也想出了为什么它只在调试期间发生。
只有在 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 存储库,看看我是否可以改进此功能及其行为方式,然后也许我会提交一个拉取请求。最起码给 Node 团队开个票吧。
编辑 2: 我确定这是 WebStorm 的一个问题。当 WebStorm 启动 Node 进程时,我们遇到了这个问题。如果您从命令行进行调试,则没有问题。
关于node.js - nodejs - Jade ReferenceError : process is not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17812371/