该项目由 webstorm 的 express 模板生成。
npm 依赖项已安装!
当我运行应用程序时,结果页面是好的,但控制台总是会说:
'ReferenceError:未定义进程'
为什么会这样?我在Win7 64位下。
我终于找到了问题的根源。它不是 Jade 或 Express,它是Uglify-JS,它是转换器的依赖项,它是 Jade 的依赖项,通常是 express 的依赖项。
我在 Windows 7 和 Windows 8(均为 64 位)上的 JetBrains 的 WebStorm IDE中遇到了这个问题。
我已经着手解决了这个拉取请求中的问题。
我需要做的就是包含process
在节点 vm 上下文对象中。之后,我收到了一个新错误:
[ReferenceError:缓冲区未定义]
我所要做的就是也包含Buffer
在 vm 上下文对象中,并且我不再收到那些愚蠢的消息。
我仍然不完全理解为什么它只发生在调试期间,但在我极其有限的经验中,我发现node vm 模块是一个善变的东西,或者至少有些人使用它的方式是。
编辑:这是节点 vm 模块本身的错误。我想出了如何重现它,我想出了为什么它只在调试期间发生。
仅当您将第三个(文件)参数包含到vm.runInContext(code, context, file);
. 关于这个参数的所有文档都说它是可选的,并且仅用于堆栈跟踪。马上,您现在可以看到为什么它只在调试期间发生。然而,当你传入这个参数时,一些有趣的行为开始发生。
要重现错误(请注意,必须传入文件参数,否则根本不会发生此错误):
文件参数必须以“.js”结尾,并且必须至少包含一个正斜杠或双反斜杠。由于这个参数应该是一个文件路径,因此这些参数的存在可能会触发一些其他功能是有道理的。
您传入的代码(第一个参数)不能以函数开头。如果它以函数开头,则不会发生错误。到目前为止,似乎以除函数之外的任何内容开始代码都会产生引用错误。不要问我为什么这个论点对错误是否出现有任何影响,因为我不知道。
process
您可以通过包含在您传递给的上下文对象中来修复错误vm.createContext(contextObject);
。
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' }
将其指向实际文件将消除此错误。
我要分叉节点存储库,看看我是否可以改进这个功能和它的行为方式,然后也许我会提交一个拉取请求。至少我会为节点团队开一张票。
编辑 2:我确定这是 WebStorm 的一个问题。当 WebStorm 启动节点进程时,我们会遇到此问题。如果从命令行调试没有问题。
视频:http: //youtu.be/WkL9a-TVHNY ?hd=1
试试这个...设置 webstorm 调试器以中断所有未处理的异常。然后在调试模式下运行应用程序。我想你会发现 [referenceError] 是从引用的 fs.js 中抛出的。更具体地说,fs.js 第 684 行:
fs.statSync = function(path) {
nullCheck(path);
**return binding.stat(pathModule._makeLong(path));**
};
这些是我使用与您相同的开发环境时的发现。(win 64、webstorm、node等...)
从那里您可以使用 webstorms评估表达式重新运行该行代码,并准确查看失败的原因。
我遇到了同样的错误,这是因为我的文件顶部有以下内容:
const argv = require("minimist")(process.argv.slice(two));
const process = require("child_process");
那个混乱的节点,我猜它认为那个时候还没有定义过程。
将第二行更改为不同的变量名称解决了该问题