Electron原生モジュールのコンパイルについてのポイントのまとめ


Electronは、PC端末のプラットフォームにまたがる開発フレームワークであり、nodejsを通じて、それらが提供する様々な底のAPIを呼び出すことができます.しかし、Electronは、自身のファイルサイズが小さく、持続可能な開発を保証するために、APIの数を制御している.幸い、ElectronもNodejs元モジュールをサポートしていますが、Electronの頭ファイルで再コンパイルが必要です.
プロジェクトの原本のnpmライブラリの管理が乱れていて、各クラスのディレクトリにはpackage.jsonがあります.そして、すべての使用を同期させていません.また、package-lock.jsonを通じてバージョン番号管理もしていません.そのため、以前は新しい設備、特にmac osで下開発と包装環境を新たに配合したいなら、難しいです.基本はマニュアルでnode_をコピーします.modules…
最近Linuxに開発環境を構築する必要があるということをきっかけに、プロジェクト全体の構造を再整理する.オペレーティングシステムを変えたので、プロジェクトに関わるNativeライブラリは、再コンパイルが必要です.
npmrcの設定
Electron公式文書で与えられたソリューションは、npmrcファイルに関連環境変数を配置することにより、npmがNativeモジュールをダウンロードする際に、その対応するElectronバージョンを自動的にダウンロードするように助けられます.npm config ls -lnpmrcは異なるシステムでの経路が異なり、上のコマンドでその位置を見つけ、手動で内容を追加します.
// Electron
target=1.7.11
arch=x64
target_arch=x64
disturl=https://atom.io/download/electron
runtime=electron
build_from_source=true
//target_platform=darwin
targetはElectronバージョンをコンパイルすると言っていますが、ご当地のElectronバージョン番号と一致する必要があります.ここ1.7.xは違いがあります.影響がない場合、エラーが発生する可能性があります.
'xx.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 57. This version of Node.js requires
NODE_MODULE_VERSION 54. Please try re-compiling or re-installing
手動コンパイル
NodejsのNativeモジュールは、ルートディレクトリの下にbinding.gypというファイルがあります.これはChromiumチームがnodejsのクロスプラットフォームのために設計したファイルです.node-gypやnode-pre-gypなどのnodejsコマンドツールでNativeモジュールを再コンパイルできます.npm i -g node-gypnode-gypを使う前に、システムは事前に以下の環境をインストールする必要があります.
Mac OS
  • Xcode、Terminal上でxcode-select --install
  • を実行します.
  • Python v 2.7は、一般的にはすでにデフォルトで
  • インストールされています.
    Windowsnpm i -g production windows-build-toolsLinux
  • C/C++ツール、例えばGCC
  • python v 2.7
  • node-gyp手動コンパイルElectronモジュール:cd node_modules/addonnode-gyp rebuild --target=1.7.11 --arch=x64 --target_platform=darwin --dist-url=https://atom.io/download/atom-shellnpmrcを作ったら、直接node-gyp rebuildでいいです.
    実践
    簡単なNativeモジュールは、npmrcを配置した後、直接ダウンロードできます.必要なファイルがあります.一部では、ElectronのHeaders以外にも、ローカル環境のサポートが必要です.例えば、canvas及びsqlite3
  • canvas canvasは、Cairoベースの画像処理ライブラリであり、このライブラリのコンパイルは、以下の環境をローカルにインストールする必要があります.
    OS
    Command
    OS X
    Using Homebrew:brew install pkg-config cairo pango libpng jpeg giflib librsvgUbuntsudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-devFedorasudo yum install gcc-c++ cairo-devel pango-devel libjpeg-turbo-devel giflib-develソラリスpkgin install cairo pango pkg-config xproto renderproto kbproto xextprotoWindows
    See the wiki
    以上の環境インストールが完了した後:cd node_modules/canvas node-gyp rebuildは、canvas/build/Release/の下でcanvas.nodeファイルを生成する
  • を見ることができます.
  • sqlite 3 sqlity 3自体のコンパイルは複雑ではありません.お手数をおかけしているのはbuilding for sql cipherです.暗号化されたsqlite 3バージョンをコンパイルします.MacOS
    npm install sqlite3 --build-from-source --sqlite_libname=sqlcipher --sqlite=`brew --prefix` --runtime=electron --target=1.7.11 --dist-url=https://atom.io/download/electron
    
    あるいは:cd node_modules/sqlite3
    node-gyp rebuild --sqlite_libname=sqlcipher --sqlite=`brew --prefix` --runtime=electron --target=1.7.11 --dist-url=https://atom.io/download/electron --module_path=../lib/binding/electron-v1.7-darwin-x64  --module_name=node-sqlite3
    
    macosには何の問題もありませんでしたが、linuxでは長い間苦しめられました.sqlite 3暗号化には、基本的なg++、sqliteコンパイルに必要なlibsqlite3-dev、ldモジュールに必要なsqlcipherなど、底の環境の様々なサポートが必要です.これらの問題は普遍性がないので、展開しないで、解決方法はつまり間違ってGoogleに行くことです.
  • 締め括りをつける
    Nodejsの原生モジュールは、Electron自体にもelectro-rebuildを提供するというツールがありますが、Nativeモジュールの自動コンパイルを実現するためにどのように配置するかを紹介しています.まだ試みていません.一般的な状況を考慮して、一つのマシンで三つのプラットフォームを包装したインストールパッケージです.結局は違うオペレーティングシステムでNativeモジュールを再コンパイルします.ですから、node-gypの手動コンパイルをマスターするのがもっと重要です.
    転載先:https://juejin.im/post/5c3326aee51d45524a11fd7d