繁体   English   中英

错误:在节点中使用GM时产生ENOENT

[英]Error: spawn ENOENT while using GM in node

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

                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的作品,证明:

在此处输入图片说明

安装ImageMagick并使用子类imageMagick。

  1. 安装ImageMagick

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

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

我在安装了gm和imagemagick的Windows 7上运行nodejs,似乎两个模块之间都存在冲突,所以我用Google搜索了一下,并找出了可以避免的方法。 我添加了这一行,从而解决了我的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 });

使用IIS在Windows上运行的Node.js应用程序也存在相同的问题。 当我在适当的AppPool的“ 高级设置 ”中将“ 加载用户配置文件 ”选项设置为“ ”时,问题就消失了

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

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。 请先安装

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

我和您有同样的问题,这就是解决方案。 ImageMagick在终端/控制台中正常运行,但在nodejs(gm模块)中无法正常运行。 经过两天的脱发,我通过将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 install imagemagick了imageMagick( brew install imagemagick

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

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

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

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

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

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

$ brew install graphicsmagick

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM