Node.js:使用GM模块时出现错误:spawn ENOENT

3
尽管这个问题已经被问过多次,但现有的答案都没有帮助到我。在使用MEAN环境(在Mac OSX上)时,我使用以下命令安装了graphicsmagick:
sudo npm install gm

每当我运行以下脚本时,都会出现以下错误:
{ [Error: spawn ENOENT] code: 'ENOENT', errno: 'ENOENT', syscall: 'spawn' }

这是我要运行的代码片段:
var gm = require('gm');    
//var gm = require('gm').subClass({ imageMagick: true }); //tried this one too 

    gm('./project/public/images/webshots/test1.jpg')
           .resize(320, 240)
           .write('./project/public/images/webshots/test2.jpg', function (err) {
        if (!err) console.log('done');
        if(err){
           console.log(err);   
        }
        });

已经授予适当的写入权限:

sudo chmod -R 777 ./project/public/images/webshots

我甚至尝试了几种不同的源路径/目标路径组合。还有什么可能我没有注意到的吗?


你是否按照 gmreadme 中所述先安装了 imagemagick/graphicsmagick?如果是的话,你能否在 shell 提示符下手动执行 imagemagick/graphicsmagick? - mscdex
是的,两者都已安装。抱歉问一下,我该如何手动执行它? - Igor P.
对于GraphicsMagick,它只是gm - mscdex
不,我无法手动启动它。出现错误:没有这个命令。也许我需要设置一个路径? - Igor P.
3个回答

5

它正在寻找gm(GraphicsMagick)二进制文件

通过PPA安装GraphicsMagick:

sudo add-apt-repository ppa:dhor/myway
sudo apt-get update
sudo apt-get install graphicsmagick

这对我很有用。

1
这帮助我解决了这个问题。
gm('./project/public/images/webshots/test1.jpg')
.options({imageMagick: true})
.resize(320, 240)
.write('./project/public/images/webshots/test2.jpg', function (err) {
    if (!err) console.log('done');
    if(err){
       console.log(err);   
    }
});

注意:需要安装imageMagick。

0

gm 模块无法找到 gm 可执行文件的路径。因此,看起来您的 $PATH 需要更新,以包括安装 graphicsmagick 的路径。


我采取了以下步骤:重新安装gm(sudo npm install gm)并将/node_modules/gm添加到我的PATH信息中(vim /etc/paths),但我仍然无法手动运行gm(与之前相同的错误)也无法运行我的代码(相同的错误)。 - Igor P.
首先,你不应该使用 sudo 来进行本地安装,只需使用 npm install gm 即可。另一个问题是,我所指的 gm 并不是你的 PATH 中的 模块,而是指 gm 二进制文件 的实际路径(这与 npm 中的 gm 模块完全无关)。gm 二进制文件 是从 homebrew、macports 安装或从 源代码 编译和安装的。gm npm 模块调用 gm 二进制文件,因此在正确安装 二进制文件 之前,该模块将无法正常工作。 - mscdex
感谢您的重要澄清!我在这里完全迷失了方向,因为我以为我正在处理一个“普通”的节点模块。现在我意识到我(也)正在处理必须单独安装的实际二进制文件(不使用npm!),我现在已经把它搞定了。再次感谢并对我的错误表示歉意。 - Igor P.
但是如何安装这些二进制文件呢? - AbdelHady

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接