簡體   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