バンドル プロセスに接続することで出力されるバンドルを保護する Metro プラグインです。このプラグインは、「ファースト パーティ」のアプリケーション コードであるモジュールのみを処理したり、サード パーティ製モジュールや React Native 関連のブートストラップ コードを含むバンドル全体を処理したりするように構成できます。
サポートされるバージョンとバンドルの形式
サポートされる React Native のバージョン:0.59.0 以降
サポートされるバンドルの形式:プレーン バンドル
制限事項
Metro バンドラーに欠落している機能があるため、JSDefender Metro プラグインは Metro バンドラー サーバーでは機能しません。バンドラー サーバーを react-native start
で起動したり react-native run-android
(既定では --variant=debug
オプション)または react-native run-ios
(既定では --configuration Debug
オプション)を実行して起動したりすると、要求されたバンドルが保護されません。また、これは Android(cd android && ./gradlew bundleDebug
)および iOS 用のデバッグ アプリ パッケージを作成する場合にも該当します。
以下のコマンドは、Metro バンドル サーバーを使用しないため、機能します。
-
react-native run-android --variant=release
- Android エミュレーターまたはデバイスで実行する -
react-native run-ios --configuration Release
- iOS エミュレーターまたはデバイスで実行する -
react-native bundle --entry-file index.js --bundle-output index.bundle
-index.js
とindex.bundle
を独自のパスで置き換える必要があるバンドルを作成する。これにより、既定では開発バンドルが生成されます。--dev false
引数を渡すことで、リリース バンドルを生成することもできます。 -
cd android && ./gradlew bundleRelease
- Android 用のリリース APK を生成し、それをデバイス/エミュレーターで実行するか、または Play ストアに公開する - Android Studio を使用して Android プロジェクトをビルドし、それをデバイス/エミュレーターで実行するか、または Play ストアに公開する
- Xcode を使用して iOS プロジェクトをビルドし、それをデバイス/エミュレーターで実行するか、または App Store に公開する
「開発者ツールのブロックの保護」は React Native をサポートしません。この保護が有効になっている場合、JSDefender Metro プラグインはエラーを出力しビルドを停止します。
インストール
このプラグインをプロジェクトにインストールします。
npm install <package-directory>/preemptive-jsdefender-core-{version}.tgz <package-directory>/preemptive-jsdefender-metro-plugin-{version}.tgz --save-dev
または
yarn add file:<package-directory>/preemptive-jsdefender-core-{version}.tgz file:<package-directory>/preemptive-jsdefender-metro-plugin-{version}.tgz --dev
@preemptive/jsdefender-core
もインストールする必要があります。使用法
このプラグインを metro.config.js
に追加します。
const jsdefenderMetroPlugin = require("@preemptive/jsdefender-metro-plugin")(
// --JSDefender 構成
{
configurationFile: "jsdefender.config.json", // 構成ファイルがある場合は、構成ファイルへのパスをオプションとして指定します。既定では `jsdefender.config.json` となります
quietMode: false, // false の場合はすべてのログ メッセージが表示され、そうでない場合はエラーと警告のみが表示されます。既定値は false です
protectUserModulesOnly: false, // false の場合はバンドル全体が保護され、そうでない場合は「ファースト パーティ」のアプリケーション コードのみが保護されます。既定値は false です
enableInDevelopmentMode: false, // false の場合は非本番モードでは保護がスキップされ、そうでない場合はすべてのモードで保護が実行されます。既定値は false です
/* その他の JSDefender オプション(`settings: { booleanLiterals: true, stringLiterals: true }` など)もここで指定できます */
},
// --メトロ構成
{
resolver: {
/* resolver メトロ オプション */
},
transformer: {
/* transformer メトロ オプション */
},
serializer: {
/* serializer メトロ オプション */
},
server: {
/* server メトロ オプション */
}
/* 一般的なメトロ オプション */
}
)
module.exports = jsdefenderMetroPlugin;
enableInDevelopmentMode
オプションを true
に設定します。構成
JSDefender の Metro プラグインは、JSDefender の構成ファイルと同じ構成オブジェクトを受け付けます。詳細については、このドキュメントのホームを参照してください。プラグインは JSDefender CLI と同様、既定の構成を使用します。これは、プラグインに明示的に構成を指定することによって上書きできます。このように、独自のメトロ型オプションを指定して適用することもできます。
configurationFile
を指定している場合、その個々の構成行は、metro.config.js
ファイル内で直接使用されている JSDefender 構成によって上書きされます。たとえば、metro.config.js
の jsdefenderMetroPlugin
に booleanLiterals: true
を設定したが、configurationFile
には booleanLiterals: false
が設定されていた場合、前者が優先されます。つまり、最終的な値は booleanLiterals: true
になります。