Оригинальный пост 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/