node.js - nodejs - Jade ReferenceError : process is not defined

标签 node.js express pug

工程由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); 中包含第三个(文件)参数时才会发生此错误。关于此参数的所有文档都说它是可选的,并且仅在堆栈跟踪中使用。您现在马上就能明白为什么它只在调试期间发生。但是,当您传入此参数时,一些有趣的行为开始发生。

要重现错误(请注意,必须 传入文件参数,否则此错误根本不会发生):

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

  2. 您传入的代码(第一个参数)不得以函数开头。如果它以函数开头,则不会发生错误。到目前为止,似乎以除函数以外的任何内容开头的代码都会产生引用错误。不要问我为什么这个论点对错误是否出现有任何影响,因为我不知道。

  3. 您可以通过在传递给 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 进程时,我们遇到了这个问题。如果您从命令行进行调试,则没有问题。

视频:http://youtu.be/WkL9a-TVHNY?hd=1

关于node.js - nodejs - Jade ReferenceError : process is not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17812371/

相关文章:

node.js - node.js 只是一个包含文件的函数文件吗? (阅读问题详细信息以获取更多详细信息)

javascript - 了解 Node.js 用例

node.js - 使用 Strong-Soap 通过 Node 进行简单 SOAP 调用

node.js - Bootstrap 4 导航栏折叠溢出。 Express/Node 部分

css - CSS 的 Bootstrap Datepicker 错误(未加载??)

node.js - 如何知道 Jade 中的 block 内容是否为空

javascript - Node.js Firestore 查询选择字段路径列表

javascript - 是否可以在 Kue Node.js 中更新已创建的作业?

javascript - 使用express配置CORS并使用axios在前端发出请求

javascript - 从浏览器检索数据到 JavaScript