[英]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。
安装ImageMagick
sudo apt-get install imagemagick
使用子类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.