node.js + imagemagick = Error: spawn identify ENOENT

199
30 ноября 2018, 08:40

Когда я пытаюсь исполнить код

imagick.identify(`../temp/${data.name}.${data.format}`, function(err, features) 
{
    console.debug(err)
    console.debug(features)
})

Я получаю следующую ошибку:

events.js:183
      throw er; // Unhandled 'error' event
      ^
Error: spawn identify ENOENT
    at _errnoException (util.js:992:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19)
    at onErrorNT (internal/child_process.js:372:16)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)

Как можно это исправить?

UPD: после добавления

(function() {
    var childProcess = require("child_process");
    var oldSpawn = childProcess.spawn;
    function mySpawn() {
        console.log('spawn called');
        console.log(arguments);
        var result = oldSpawn.apply(this, arguments);
        return result;
    }
    childProcess.spawn = mySpawn;
})();

в начало скрипта в консоль выводится вот это:

{ '0': 'identify',
  '1': [ '-verbose', '../temp/1535611966778.png' ] }
Answer 1

В итоге я все же нашел решение. На самом деле это ужасный костыль, хотя как единственное действенное решение под windows сойдет.

  1. Скачиваем вот отсюда пакет ImageMagick-7.0.8-11-Q16-x64-dll.exe и устанавливаем его.
  2. Находим исполняемый скрипт модуля imagemagick -- imagemagick.js
  3. Заменяем содержимое 24-й строки на var child = childproc.spawn('cmd.exe', ['/C', file + ' ' + args.join(' ')]);
  4. Заменяем содержимое 178-й строки на exports.identify.path = 'magick identify';

У меня это сработало. По видимому, child_process не может создавать дочерние процессы из команд. В таком случае мы запускаем процесс cmd.exe и уже ему передаем нашу команду, в данном случае magick identify.

P.S. Таким же способом стоит прокачать строку 255 (convert -> magick convert), дабы не было проблем с выполнением ресайза и прочими командами.

READ ALSO
Как сделать небольшой опросник на js?

Как сделать небольшой опросник на js?

Не могу до ума довести опросник

261
Как сдлеать такое C Yandex API Maps?

Как сдлеать такое C Yandex API Maps?

как можно реализовать такое с Yandex Картами?

197
как из строки сделать массив

как из строки сделать массив

как можно сделать из строки например "Press,Moderators,Speakers" чтобы был массив arr = ["Press", "Moderators", "Speakers"]

142
Problem button / проблемная кнопка

Problem button / проблемная кнопка

i have button that open div with content of formsi wanna div to be closed when i submit button in this div

156