【问题标题】:Error: spawn ENOENT while using GM in node错误:在节点中使用 GM 时产生 ENOENT
【发布时间】:2013-04-19 18:46:39
【问题描述】:

当我尝试像这样调整图像大小时:

                gm('public/uploads/1710410635.jpg')
                .resize(240, 240)
                .noProfile()
                .write('public/uploads/1710410635_t.jpg', function (err) {
                  if (!err) console.log('done');
                });

我收到此错误:

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: spawn ENOENT
    at errnoException (child_process.js:945:11)
    at Process.ChildProcess._handle.onexit (child_process.js:736:34)

我的文件结构如下:

代码在postnewsitem.js文件中执行

为什么会出现此错误以及如何解决?

编辑:GraphicsMagick 作品,证明:

【问题讨论】:

  • 您安装了 GraphicsMagick 吗?另外,你用的是什么平台? GM is only tested 在 Mac OS X 和 Ubuntu 上。
  • 是的,我有 graphicsmagic 1.3.18 在 Lion OS X 上工作。 (虽然它说:“imagemagick-6.8.0-10 已经安装,它只是没有链接”,当试图查看它是否真的安装时。)
  • GraphicsMagick 与 ImageMagick 不同。您需要configure gm 才能使其与 ImageMagick 一起使用。看起来gm 模块找不到 GM/IM 二进制文件,我认为它们必须在您的 $PATH 中的某个位置。
  • 我现在安装了 graphicsmagic,但错误仍然存​​在。 (如果我在终端中输入 gm,我会看到它已安装。)
  • 题外话:@ojtwist,截图来自哪个IDE?

标签: node.js graphicsmagick


【解决方案1】:

另一种可能发生这种情况的情况(使用 Windows 时)是,如果您尝试从 UNC 路径运行代码。 映射驱动器号并在映射的驱动器号上运行也可以解决此问题。

【讨论】:

  • 你能举个例子吗?跑过去是什么意思?
  • 也许“跑过来”不是正确的术语。我的意思是你的 node.exe 应该从 n:\node\node.exe 之类的东西运行,而不是从 \\myserver\myshare\node\node.exe 之类的东西运行
【解决方案2】:

我在安装了 gm 和 imagemagick 的 Windows 7 上运行 nodejs,似乎两个模块之间存在冲突,所以我用谷歌搜索了一下,发现了如何避免这种情况。我添加了这一行,解决了我的 ENOENT 问题: var imageMagick = gm.subClass({ imageMagick: true }); 所以代码现在看起来像这样:

var gm = require('gm'); 
var imageMagick = gm.subClass({ imageMagick: true });

imageMagick('test/pig.jpg').rotate('green', 45).write('test/crazy_pig.jpg', function (err) {
    if (!err) console.log('crazy pig has arrived');
    else console.log(err);
})

或者您可以在需要 gm 时这样做,如下所示:

var gm = require('gm').subClass({ imageMagick: true });

【讨论】:

  • 这对我有帮助,在 Linux 上!谢谢!
  • 我可以确认这解决了我在 OSX Mountain Lion 上的问题。我使用 macports 而不是 brew 安装它,以防万一这可以帮助某人
【解决方案3】:

安装 ImageMagick 并使用子类 imageMagick。

  1. 安装 ImageMagick

    sudo apt-get install imagemagick
    
  2. 使用子类 imagemagick:

    var gm = require('gm').subClass({ imageMagick: true });
    

【讨论】:

  • 谢谢!对我来说就是这样。
  • 谢谢,这解决了我在 heroku 上的 nodejs 应用程序的问题。
  • GM 还需要 GraphicsMagick,就像在 GM 的 Readme file 中提到的那样。当我安装它时,问题就消失了。在 Mac OS X 中,brew install graphicsmagick
  • 致 CentOS 人:yum install ImageMagick
  • 这应该被标记为正确答案。非常感谢!
【解决方案4】:

在使用 IIS 的 Windows 上运行 Node.js 应用程序时遇到了同样的问题。当我将相应 AppPool 的“高级设置”中的“加载用户配置文件”选项设置为“True

时,问题消失了

【讨论】:

  • 天哪!非常感谢你。花了这么长时间试图弄清楚这一点。你是怎么想出来的,我无法理解,但谢谢!
【解决方案5】:

因为我在stackoverflow上多次发现这个问题,所以想分享这个答案:https://stackoverflow.com/a/25461564/3970623

“spawn ENOENT”似乎是由可使用 PATH 环境变量访问的有效 unix 工具安装引起的。

【讨论】:

    【解决方案6】:

    我和你有同样的问题,这是解决方案。 ImageMagick 在终端/控制台中正常工作,但在 nodejs(gm 模块)中没有。 脱发 2 天后,我通过将 PATH 变量添加到环境变量 process.env.PATH 来修复它 应该有您的 imagemagick 和其他可执行文件的路径。 Node.js 有一些来自系统的 PATH,但出于某种原因,GM 忽略了它并使用了 process.env.PATH

    我创建了环境变量 PATH(process.env.PATH) 并将值设置为 bin:node_modules/.bin:/usr/local/bin:/usr/bin:/bin 我正在使用 MAC OS X

    我用 brew 安装了 imageMagick (brew install imagemagick)

    【讨论】:

      【解决方案7】:

      我遇到了同样的问题并以给定的方式解决了它。

      var gm = require('gm'); 
      
      gm('public/uploads/1710410635.jpg').options({imageMagick: true}).resize(240,240).write('public/uploads/1710410635.jpg', function (err) {
      if (!err) console.log('Done');
      else console.log(err);
      })
      

      注意:如果您还没有安装 imageMagick。请先安装那个

      【讨论】:

        【解决方案8】:

        就我而言,这非常简单。它在 Windows 10 中安装 GraphicsMagick 后发生: 在安装 GraphicsMagick 之前,我尝试使用尚未打开的控制台。因此它使用了旧的路径信息并且没有找到 GraphicsMagick。解决方案:我必须打开一个新的控制台来运行节点以使用 gm。

        【讨论】:

          【解决方案9】:

          /gm/lib/command.js 有一个选项,您可以在其中设置 appPath,如果 gm 已经通过终端工作,您可以获取 gm 的路径并通过 subClass 函数传递它,在我的情况下 gm 是在 MacOsx 上使用 brew 安装在 /usr/local/bin/ 中。

          var gm = require('gm').subClass({ appPath: "/usr/local/bin/" });
          

          【讨论】:

            【解决方案10】:

            以防万一有人在 macOS 上发现此错误,这对我有用:

            $ brew install graphicsmagick
            

            【讨论】:

              猜你喜欢
              • 2016-01-17
              • 1970-01-01
              • 2022-08-22
              • 1970-01-01
              • 2018-10-31
              • 2013-09-21
              • 2013-07-30
              • 1970-01-01
              • 2014-09-25
              相关资源
              最近更新 更多