错误:在节点中使用GM时产生ENOENT
当我尝试调整像这样的图像:
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作品,certificate:
安装ImageMagick并使用subClass imageMagick。
-
安装ImageMagick
sudo apt-get install imagemagick
-
使用subClass 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的“ 高级设置 ”中将“ 加载用户configuration文件 ”选项设置为“ 真 ”时问题已经消失
我面临同样的问题,并以给定的方式解决它。
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时)是如果您尝试从UNCpath运行您的代码。 映射一个驱动器号并在映射的驱动器号上运行也解决了这个问题。
我和你有同样的问题,这是解决scheme。 ImageMagick在terminal/控制台中正常工作,但不在nodejs(gm模块)中。 经过2天的头发损失,我通过添加PATHvariables来解决环境variablesprocess.env.PATH应该有你的imagemagick和其他可执行文件的path。 Node.js有一些来自系统的PATH,但是对于某些reasone,GM忽略了它并使用了process.env.PATH
我创build了环境variablesPATH(process.env.PATH)并将值设置为bin:node_modules / .bin:/ usr / local / bin:/ usr / bin:/ bin我正在使用MAC OS X
我用brew安装了imageMagick( brew install imagemagick
)
因为我在这里find这个问题很多次在stackoverflow,我想分享这个答案: https : //stackoverflow.com/a/25461564/3970623
“spawn ENOENT”似乎是由可通过PATH环境variables访问的有效的unix工具安装引起的。
就我而言,这非常简单。 它在Windows 10中安装GraphicsMagick后发生了很大的变化:我尝试使用在安装GraphicsMagick之前打开的控制台。 因此它使用旧的path信息,并没有findGraphicsMagick。 解决scheme:我必须打开一个新的控制台来运行使用gm的节点。
/gm/lib/command.js有一个选项,你可以设置appPath,如果gm已经在通过terminal工作,你可以得到gm的path并通过subClass函数传递,在我的情况下,gm被安装在/ usr / local / bin /在MacOsx上使用brew。
var gm = require('gm').subClass({ appPath: "/usr/local/bin/" });