Я делаю приложение node.js, которое может изменять размеры изображений. Я могу сделать это успешно с jimp . Однако изменение размера изображения не является асинхронным и останавливает пользовательский интерфейс при изменении размера. Я хочу избежать этого, поэтому я попытался использовать веб-работника.
// main.js
var worker = new Worker(__dirname + '\\worker.js');
worker.addEventListener('message', function(e) {
if (e.data == 'done') { worker.terminate() } // Done
}, false);
worker.postMessage({'buff': buf, 'filename': filename}); // Start the worker
|
// worker.js
const Jimp = require('jimp'); // Oops, this doesn't work
self.addEventListener('message', function(e) {
resize(e.data.buf, e.data.filename);
}, false);
function resize(buf, filename) {
Jimp.read(buf).then(image => {
image.resize(1920, Jimp.AUTO);
image.writeAsync(filename).then(cb => { self.postMessage('done') });
});
}
Я обнаружил, что не могу использовать функции node.js, такие как require()
, в веб-приложении. Как я могу использовать Jimp в веб-приложении или изменить размер изображения другим асинхронным способом?
Редактировать: я пытаюсь использовать webworkify, копируя ответ из @RubyJunk. Когда я пытаюсь создать работника, я получаю ошибку Uncaught TypeError: Cannot convert undefined or null to object at Function.keys (<anonymous>)
. Кто-нибудь знает, как это исправить?
Редактировать 2: я использую электрон для создания моего приложения Node.js. У них есть свойство окна (nodeIntegrationInWorker) , из-за которого создается впечатление, что я могу запускать функции Node.js в Web Worker, но когда я пытаюсь использовать require (), оно все равно говорит мне, что это не функция.