web-dev-qa-db-ja.com

Reactネイティブアプリからconsole.logを削除する

Reactネイティブアプリをストアにデプロイする前にconsole.log()呼び出しを削除する必要がありますか?console.log()呼び出しを行うと、パフォーマンスやその他の問題が発生しますか?コードに保持されていますか?

タスクランナーでログを削除する方法はありますか(GruntやGulpなどのWeb関連のタスクランナーと同様の方法で)?開発/デバッグ/テスト段階ではまだ必要ですが、本番環境では必要ありません。

ありがとう!

21
RRikesh

ベストプラクティスは次のようなステートメントでデバッグコードをラップすることであると考えています...

if(__DEV__){
    console.log();
}

この方法では、パッケージャーまたはエミュレーター内で実行している場合にのみ実行されます。詳細はこちら... https://facebook.github.io/react-native/docs/performance#using-consolelog-statements

11
Chris Geirman

まあ、あなたはいつでも次のようなことをすることができます:

if (!__DEV__) {
  console.log = () => {};
}

したがって、console.logがtrueでなくなるとすぐに、すべての__DEV__が無効になります。

55
Lucas Bento

Babelトランスパイラーは、次のプラグインを使用してconsoleステートメントを削除できます。

npm i babel-plugin-transform-remove-console --save-dev

.babelrcを編集します。

{
  "env": {
    "production": {
      "plugins": ["transform-remove-console"]
    }
  }
}

また、consoleステートメントはコードから削除されます。

ソース: https://hashnode.com/post/remove-consolelog-statements-in-production-in-react-react-native-apps-cj2rx8yj7003s2253er5a9ovw

37
adambene

リモートデバッグを行っていない場合は、__ DEV__ === trueであってもログに記録する必要がないため、次のオプションが適切であることがわかりました。

実際、特定のバージョンのRN/JavaScriptCore/etcが、ログを記録すると(文字列だけでも)ほぼ停止することがわかりましたが、ChromeのV8エンジンの場合はそうではありません。

// only true if remote debugging
const debuggingIsEnabled = (typeof atob !== 'undefined');

if (!debuggingIsEnabled) {
    console.log = () => {};
}

リモートJSデバッグが有効になっているかどうかを確認

2
James Trickey

Sentryを使用して例外を追跡すると、本番環境ではconsole.logが自動的に無効になりますが、デバイスからのログの追跡にも使用されます。したがって、歩哨の例外の詳細(パンくずリスト)で最新のログを確認できます。

0