Некоторое время назад были такие же проблемы, как у вас, но только с установкой пакетов для Electron'а. Необходимый мне NPM пакет я установил и заставил работать достаточно быстро, но так как я не до конца понимал процесс установки подобных пакетов, то решил потратить немного времени на изучение этого вопроса.
Большинство NPM пакетов, которые написаны на С/С++, поставляются с заранее скомпилированными *.node файлами под разные операционные системы и версии NodeJS. При установке пакетов под операционную систему и версию NodeJS, для которой нет заранее скомпилированных *.node файлов, происходит автоматическая компиляция NPM пакета из исходных файлов с использованием пакета node-gyp или node-pre-gyp. Эти два пакеты, можно так сказать, делают одно и то же — создают *.node файлы из исходников. Так как для Electron'а и NW.js никто, как правило, не компилирует *.node файлы предварительно, то это придеться делать самостоятельно, а если точнее, то компиляция всех необходимых файлов произойдет в автоматическом режиме во время установки пакета, но для ее успешного завершения необходимо выполнить рад условий.
И так, что же необходимо сделать для корректной установки любых NPM пакетов из исходников:
1. Установить все зависимости, которые нужны для работы NPM пакета node-gyp.
Подробное описание процесса установки всех зависимостей можно найти как на NPM странице пакета, так и на GitHub, но, как правило, на GitHub'е находится более актуальная информация, так как данные там обновляются в первую очередь.
Сам же пакет node-gyp глобально устанавливать не обязательно, потому как почти все пакеты, которые компилируются из исходников, имеют в списке своих зависимостей или пакет node-gyp, или node-pre-gyp.
Для OS Windows, в большинстве случаев, достаточно ввести следующую команду в консоли с правами администратора:
После ввода этой команды произойдет автоматическая установка и настройка всех зависимостей NPM пакета node-gyp.
Первый этап выполнен. Ничего больше, кроме ввода этой единственной команды, делать не надо.
После завершения этого этапа вы сможете устанавливать любые NPM пакеты из исходников, но только для текущей используемой версии NodeJS и операционной системы, то есть ни для Electron'a, ни для NW.js вы пока еще не сможете устанавливать пакеты, а если точнее, то установить пакеты вы сможете, но работать они не будут.
2. Указать переменные окружения NPM, которые использует пакет node-gyp/node-pre-gyp в процессе своей работы.
Именно значения переменных окружения NPM определяют для какой версии операционной системы и NodeJS необходимо компилировать устанавливаемые пакеты.
Вариантов установки переменных окружения есть несколько, но здесь я расскажу только об одном варианте, который, как я считаю, лучше всего подходит при установке пакетов и дальнейшего их использования в NW.js и Electron'е.
Что необходимо сделать:
1. Создать в директории текущего проекта, где находится файл package.json, файл .npmrc (с точкой в начале).
2. Добавить в этот файл все необходимые переменные окружения NPM. Пример файла для NW.js v0.32.3 64-bit:
3. Установить все необходимые пакеты используя команду:
npm install <package-name>
Вот и все. Теперь вы можете устанавливать любые пакеты из исходников, которые после установки будут корректно работать в NW.js, а не только NPM пакет sqlite3.
Несмотря на всю простоту установки новых пакетов из исходников под NW.js с использованием этого метода, хочу заметить, что данный метод имеет один и очень существенный минус — переменные окружения NPM распространяются на все устанавливаемые вами локальные пакеты. Другими словами, если кроме NW.js вы используете еще что-то, скажем Webpack, для которого необходимо установить какой-то пакет из исходников, то этот пакет, который планируется использовать внутри Webpack'а, будет скомпилирован для использования в NW.js, а не для NodeJS. В следствии чего, устанавливаемый из исходников пакет для Webpack'а, в большинстве случаев, будет работать некорректно. На самом же деле, не стоит слишком расстраиваться, если этот метод, как может показаться изначально, вам из-за этого недостатка не походит. На практике, все пакеты для Webpack'а, которые я устанавливал, у меня прекрасно работали, но правда только потому, что ни один из них не устанавливался из исходников.
Надеюсь, что эта информация поможет вам лучше разобраться с тем, как происходит установка пакетов из исходников.
Большинство NPM пакетов, которые написаны на С/С++, поставляются с заранее скомпилированными *.node файлами под разные операционные системы и версии NodeJS. При установке пакетов под операционную систему и версию NodeJS, для которой нет заранее скомпилированных *.node файлов, происходит автоматическая компиляция NPM пакета из исходных файлов с использованием пакета node-gyp или node-pre-gyp. Эти два пакеты, можно так сказать, делают одно и то же — создают *.node файлы из исходников. Так как для Electron'а и NW.js никто, как правило, не компилирует *.node файлы предварительно, то это придеться делать самостоятельно, а если точнее, то компиляция всех необходимых файлов произойдет в автоматическом режиме во время установки пакета, но для ее успешного завершения необходимо выполнить рад условий.
И так, что же необходимо сделать для корректной установки любых NPM пакетов из исходников:
Сам же пакет node-gyp глобально устанавливать не обязательно, потому как почти все пакеты, которые компилируются из исходников, имеют в списке своих зависимостей или пакет node-gyp, или node-pre-gyp.
Для OS Windows, в большинстве случаев, достаточно ввести следующую команду в консоли с правами администратора:
npm install --global --production windows-build-tools
После ввода этой команды произойдет автоматическая установка и настройка всех зависимостей NPM пакета node-gyp.
Первый этап выполнен. Ничего больше, кроме ввода этой единственной команды, делать не надо.
После завершения этого этапа вы сможете устанавливать любые NPM пакеты из исходников, но только для текущей используемой версии NodeJS и операционной системы, то есть ни для Electron'a, ни для NW.js вы пока еще не сможете устанавливать пакеты, а если точнее, то установить пакеты вы сможете, но работать они не будут.
Вариантов установки переменных окружения есть несколько, но здесь я расскажу только об одном варианте, который, как я считаю, лучше всего подходит при установке пакетов и дальнейшего их использования в NW.js и Electron'е.
Что необходимо сделать:
1. Создать в директории текущего проекта, где находится файл package.json, файл .npmrc (с точкой в начале).
2. Добавить в этот файл все необходимые переменные окружения NPM. Пример файла для NW.js v0.32.3 64-bit:
# комментарии в файле стирать не обязательно
runtime=node-webkit # node, electron, node-webkit
target=0.32.3 # используемая версия NW.js
arch=x64 # архитектура NW.js: ia32, x64
3. Установить все необходимые пакеты используя команду:
npm install <package-name>
Вот и все. Теперь вы можете устанавливать любые пакеты из исходников, которые после установки будут корректно работать в NW.js, а не только NPM пакет sqlite3.
Несмотря на всю простоту установки новых пакетов из исходников под NW.js с использованием этого метода, хочу заметить, что данный метод имеет один и очень существенный минус — переменные окружения NPM распространяются на все устанавливаемые вами локальные пакеты. Другими словами, если кроме NW.js вы используете еще что-то, скажем Webpack, для которого необходимо установить какой-то пакет из исходников, то этот пакет, который планируется использовать внутри Webpack'а, будет скомпилирован для использования в NW.js, а не для NodeJS. В следствии чего, устанавливаемый из исходников пакет для Webpack'а, в большинстве случаев, будет работать некорректно. На самом же деле, не стоит слишком расстраиваться, если этот метод, как может показаться изначально, вам из-за этого недостатка не походит. На практике, все пакеты для Webpack'а, которые я устанавливал, у меня прекрасно работали, но правда только потому, что ни один из них не устанавливался из исходников.
Надеюсь, что эта информация поможет вам лучше разобраться с тем, как происходит установка пакетов из исходников.