React を使用した Electron でのクイック スタート
項目一覧
Overview
このページには、「 React App 」を使用してアプリケーションを開発し、Realm を Electron アプリケーションに迅速に統合するための情報が含まれています。
始める前に、以下のものがあることを確認してください。
注意
バージョン要件 - Electron
Realm は、公式にサポートされている Electron バージョンのいずれかで動作します。 ただし、Electron はアップデートごとに常に変化するため、このドキュメントとの互換性のために Electron バージョン13.2 .x を使用することをお勧めします。 公式にサポートされている Electron のバージョンを確認するには、 Electron リリース を確認してください ドキュメント。
注意
バージョン要件 - React.js
このガイドは React.js バージョン17.0 のサポートを使用して作成されています および React アプリ バージョン の作成4 。0 。これら以外のバージョンでは、React.js と React App の作成の両方に新しい依存関係が頻繁に追加されるため、アプリケーションの構築中にエラーが発生する可能性があります。
セットアップ
Realm を使用して Electron アプリケーションを設定するには、次の手順に従います。
React アプリケーションの作成
Create React App を使用してアプリケーションを足場 ツールチェーン。ターミナルに次のコマンドを入力します。
npx create-react-app my_electron_react_application
アプリケーションには、次のファイルが含まれている必要があります。 CSS、サービスワーカー、テストファイルなど、プロジェクト内の一部の追加ファイルは以下には含まれません。
. |-- package.json |-- package-lock.lock |-- public | |-- index.html |-- src | |-- App.js // renderer process |-- |-- index.js // renderer process
src
ディレクトリ内のすべてのJavaScriptファイルは renderer process
で実行されます。
注意
各 Electron アプリケーションには 1 つのメイン プロセスのみを含めることができます。 メインのプロセスはウェブページを作成します。 各ウェブページはレンダリング プロセスと呼ばれる独自のプロセスで実行されます。 これについて詳しくは、公式の Electron プロセス モデル を参照してください ドキュメント。
Web-visuals の依存関係を削除する
React アプリ バージョン4.0 + には、 Web 経由 での React アプリの作成 モジュール。「web-vitals」は Electron 環境ではなく Web で動作するように設計されているため、このモジュールを含めるとアプリケーション構築時に"chunk runtime-main [entry] Cannot convert undefined or null to
object"
エラーが発生する可能性があります。 このエラーを回避するには、次のコマンドを実行してweb-vitals
パッケージをアンインストールします。
npm uninstall web-vitals
次に、 reportWebVitals.js
ファイルを削除します。
rm src/reportWebVitals.js
最後に、 src/index.js
ファイルから次の行を削除します。
import reportWebVitals from './reportWebVitals'; reportWebVitals();
Webback 構成を変更するための CRACO のインストール
アプリケーションが Electron で適切に動作できるようにするには、Webback の構成を変更する必要があります。 デフォルトでは、create-react-app 経由で作成されたアプリケーションは事前構成された Webhook ファイルを使用し、エンドユーザーには非表示になります。 React アプリのデフォルトの Webhook 構成は Realm と互換性がないため、上書きする必要があります。 CRACO を使用できます これらのデフォルト値を上書きします。以下のコマンドを使用して CRACO をインストールします。
npm install @craco/craco
CRACO 構成ファイルの作成
事前構成された Webhook 値を上書きするには、アプリケーションのルートにcraco.config.js
という CRACO 構成ファイルを作成します。 このファイルに以下を追加します。
const nodeExternals = require("webpack-node-externals"); module.exports = { webpack: { configure: { target: "electron-renderer", externals: [ nodeExternals({ allowlist: [/webpack(\/.*)?/, "electron-devtools-installer"], }), ], }, }, };
ターゲット は、Electron 組み込みモジュールのブラウザ環境用にアプリケーションをコンパイルするために、「electron-renderer」に設定されています。すべての Node_module がバンドルされないようにするには、 nodeExternals
も指定します。 nodeExternals
に渡されるオブジェクトのallowList
キーは、バンドルに含めるモジュールのリスト(この場合は electron の Developer Tools と webback)を指定します。 webbuck-node-externals を使用するには、次のコマンドを実行します。
npm install webpack-node-externals --save-dev
Electron のメイン プロセス ファイルを作成する
Electron main process
ファイルは、アプリケーションへのエントリ ポイントと考えることができます。 このファイルは、React アプリのindex.html
ファイルを Electron によって作成されたBrowserWindow
にロードする原因となります。
注意
各 Electron アプリケーションには 1 つのメイン プロセスのみを含めることができます。 メイン プロセスはウェブページを作成できます。 各ウェブページはレンダリング プロセスと呼ばれる独自のプロセスで実行されます。 これについて詳しくは、公式の Electron プロセス モデル を参照してください ドキュメント。
次のコードを、 public
ディレクトリ内のelectron.js
という新しいファイルに追加します。
const electron = require("electron"); const path = require("path"); const app = electron.app; const BrowserWindow = electron.BrowserWindow; let mainWindow; function createWindow() { // Create the browser window. mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true, contextIsolation: false }, }); // and load the index.html of the app. console.log(__dirname); mainWindow.loadFile(path.join(__dirname, "../build/index.html")); } // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. app.on("ready", createWindow);
これで、アプリケーションには次のファイルが含まれるはずです。 CSS、サービスワーカー、テストファイルなど、プロジェクト内の一部の追加ファイルは以下には含まれません。
. |-- package.json |-- package-lock.lock |-- craco.config.js |-- public | |-- index.html | |-- electron.js // main process |-- src | |-- App.js // renderer process |-- |-- index.js // renderer process
src
ディレクトリ内のすべてのJavaScriptファイルは renderer
プロセスで実行されます。 electron.js とそれに必要なファイルは、メイン プロセスで実行されます。
Realm を開く
ユーザーを認証し、スキーマを定義し、有効にした Device Sync を同期するには、Realm をインポートしたファイルでRealm.open()を呼び出します。
Realm を開くと、Realm に書込み ( write) ができるようになります。
const app = new Realm.App({ id: "<Your App ID>" }); // create a new instance of the Realm.App async function run() { // login with an anonymous credential await app.logIn(Realm.Credentials.anonymous()); const DogSchema = { name: "Dog", properties: { _id: 'int', name: "string", age: "int", }, primaryKey: '_id' }; const realm = await Realm.open({ schema: [DogSchema], sync: { user: app.currentUser, partitionValue: "myPartition", }, }); // The myPartition realm is now synced to the device. You can // access it through the `realm` object returned by `Realm.open()` // write to the realm } run().catch(err => { console.error("Failed to open realm:", err) });
注意
プロセスと プロセスの両方から Realmrenderer
main
への書き込みの例については、 Realm-Electron-Advanced-クイックスタートをご覧 ください リポジトリを使用します。
注意
現在の React Native バイナリはrealm
パッケージに含まれています。 ビルドからバイナリとreact-native
ディレクトリを削除できます。 package.json
ファイルにbuild.files
エントリを追加し、その値を!**/node_modules/realm/react-native
に設定します。