実行環境の互換性
target は実際の実行環境に合わせて選んでください。Browser と Node のビルドでは含まれる防御が異なる場合があり、Browser ターゲットは Node の代用にはなりません。
target
browser:Chrome、Firefox、Safari、Edge。browser-no-eval:browserと同じですが、出力でeval()を使用しません。対象ページの Content Security Policy がeval/unsafe-evalを禁止している場合に使用します。node:Node.js 環境。ブラウザー固有のオプションは無効になります(window/documentを必要とし、Node では何もしないかエラーを投げるためです)。ブラウザー専用 API に依存する一部のvmSelfDefendingの防御(ヘッドレスブラウザーの検知、iframe を使ったクリーンな realm の復元、インスペクター対策 / DOM のチェック)は、このターゲットでは出力されません。service-worker:Service Worker のコンテキスト。windowもdocumentもなく、selfグローバルも異なります。userscript:ユーザースクリプトマネージャー(Tampermonkey など)のサンドボックス。vmSelfDefendingの防御はそれに合わせて調整されます。VM 難読化(または Parse HTML)と難読化ツール v6.9.0 以降が必要です。bytenode:bytenode で.jscにコンパイルするコード向けです。VM 難読化(または Parse HTML)と難読化ツール v6.13.0 以降が必要です。
ブラウザー環境とドメイン
コードが実行される場所に関する宣言は、実際のデプロイ環境と一致している必要があります。browserEnvironment はビルドが実際にどのように配信されるかを記述していなければならず(Browser Environment を参照)、VM Domain Lock にはビルドを配信するすべてのドメインを列挙する必要があります(VM Domain Lock を参照)。自動化ツールやデバッガーは高度な防御を作動させることがあります。テストと CI を参照してください。
JavaScript
関数名と関数のソーステキストは、難読化によって変わる可能性があります。.name や .toString() を安定したアプリケーションデータとして使わず、明示的な識別子を使用してください。設定によって必要な場合、公開グローバルは見えるまま残ることがあります。
strictMode
strictMode: null と strictMode: false でも、明示的なディレクティブ、ES モジュール、クラスメソッドは strict として認識されます。strictMode: true はすべての入力を strict として扱います。最終的な実行コンテキストに合わせてください。難読化の後でバンドラーが strict モードを追加すると、動作が変わる可能性があります。
ビルドパイプライン
最終的な難読化の前に、TypeScript や JSX をコンパイルし、アプリケーションをバンドルしてください。comment モードがコメントを見つけられるよう、/* javascript-obfuscator:vm */ コメントはそのビルドを通して残しておいてください。Self Defending や VM Self Defending の出力を後からミニファイ、整形、その他の方法で書き換えないでください。VM 難読化と HTML 難読化ではソースマップを利用できません。
