Node.js: невозможно установить пакет Sharp - PullRequest
1 голос
/ 12 июля 2020

Я пытаюсь установить пакет Sharp для сжатия буферов для изображений. Теперь, когда я устанавливаю пакет через npm install sharp --save и пытаюсь использовать эту строку кода:

const sharp = require('sharp');

, я получаю следующую ошибку: https://textuploader.com/1gvep. Это упомянутый журнал: https://textuploader.com/1gvez. Я провел небольшое исследование, прежде чем опубликовать это. Вот что я пробовал:

  • использовать --ignore-scripts = false flag
  • использовать флаг --unsafe-perm
  • удалить пакет Sharp из node_modules и снова запустите npm install --ignore-scripts=false
  • запустите npm rebuild

Но пока ничего из этого не помогло. Некоторые люди, казалось, решили проблему, вернувшись к Node 10, но это не вариант для меня, потому что мне нужно использовать его вместе с Discord. js, который требует как минимум Node 12. Идея, которую я имел в виду записывает изображение в папку tmp, сжимает записанное изображение с помощью другой библиотеки и перезагружает его, но, на мой взгляд, это не очень элегантно. Теперь мои вопросы:

  • Что еще я могу попробовать, чтобы правильно установить Sharp?
  • Есть ли альтернативы уменьшению размеров буфера изображений?

Edit : Как подсказал Алекс, я попробовал Jimp и для начала просто уменьшил размер изображения. Я поделюсь своим кодом здесь на случай, если кто-то поищет альтернативу.

let buffer = canvas.toBuffer('image/png'); //from node-canvas
Jimp.read(buffer)
.then(image => {
   image.resize(width>>1, height>>1).getBufferAsync(Jimp.MIME_PNG)
   .then(comprBuffer => {
      /* use the new buffer */
   });
})
.catch(err => { 
   console.log(err) 
});

1 Ответ

1 голос
/ 12 июля 2020

Я пробовал установить Sharp, и у меня не было проблем со следующими версиями:

Node v12.16.1 Npm v6.13.4

Как насчет использования вместо этого Jimp?

https://www.npmjs.com/package/jimp

...