Оригинальный пост https://github.com/onmyway133/blog/issues/69

NODE_MODULE_VERSION

Сегодня я пытался установить sharp с yarn add sharp для работы в своем электронном приложении IconGenerator, но получаю следующую ошибку

Неперехваченная ошибка: модуль '/Users/khoa/MyElectronApp/node_modules/sharp/build/Release/sharp.node'
был скомпилирован для другой версии Node.js с использованием
NODE_MODULE_VERSION 57. Эта версия Node .js требует
NODE_MODULE_VERSION 54. Попробуйте перекомпилировать или переустановить
модуль

Собственный модуль узла

Немного поискав, это было потому, что Sharp — это родной модуль узла, который использует libvips под капотом.

Надстройки Node.js — это динамически связанные общие объекты, написанные на C++, которые можно загрузить в Node.js с помощью функции require() и использовать так же, как если бы они были обычным модулем Node.js. Они используются в основном для обеспечения интерфейса между JavaScript, работающим в Node.js, и библиотеками C/C++.

Подробнее о том, как создать нативный модуль узла, можно узнать здесь https://blog.risingstack.com/writing-native-node-js-modules/

Версия узла

Я использую nvm для управления версией узла, и nvm list показывает 8.4.0 как последнюю версию узла, которую я использую.

v6.10.1
v7.8.0
v7.9.0
v8.0.0
-> v8.4.0
система

Поиск по Node releases показывает, что Node 8.4.0 имеет NODE_MODULE_VERSION из 57, так что это версия узла, которую npm использует для компиляции sharp.

Однако я не могу найти NODE_MODULE_VERSION 54, который использует Sharp. Я попробовал узел 8.0.0, который, как полагают, имеет NODE_MODULE_VERSION 54, но это не сработало.

Электронная версия

На момент написания этого поста у электрона была версия 7.9.0, вы можете проверить здесь или запустив process.versions в консоли Javascript.

Использование электронного восстановления

Итак, после того, как я прочитал это Использование собственных узловых модулей, я установил electron-rebuilder для перекомпиляции sharp.

yarn add electron-rebuild — dev
yarn add sharp
./node_modules/.bin/electron-rebuild

Теперь работает 🎉

Читать далее

- https://blog.risingstack.com/writing-native-node-js-modules/