NODE_ENVを設定するためにgulpとenvifyを使用して、本番用の反応アプリをブラウザ化しようとしています。そのため、コンソールでの反応警告、エラー報告、およびrequire-react-addons-perfなどの一部の機能を無効にするコードを削除できます。
そしてそれは素晴らしい働きをしています。 app.jsで「production」を検索して、これらの典型的な条件があるかどうかを確認すると、
if("development" !== "production") {
...
}
何もないので、私が言ったように、それはうまくいくようです。
しかし、まだ開発Webサイトにいるかのように、Chromeのすべての反応コンポーネントを備えたChromeの反応DevToolsタブが表示されます。 Chromeの開発ツールでこのタブを無効にするにはどうすればよいですか?
ここに私の根性のあるタスクがあります:
var production = process.env.NODE_ENV === 'production' ? true : false;
var environment = process.env.NODE_ENV ? process.env.NODE_ENV : 'dev';
...
var bundler = browserify({
debug: !production,
// These options are just for Watchify
cache: {}, packageCache: {}, fullPaths: true
})
.require(require.resolve('./dev/client/main.js'), { entry: true })
.transform(envify({global: true, _: 'purge', NODE_ENV: environment}), {global: true})
.transform(babelify)
.transform(reactify);
var start = Date.now();
bundler.bundle()
.on('error', function (err) {
console.log(err.toString());
this.emit("end");
})
.pipe(source('main.js'))
.pipe(gulpif(options.uglify, streamify(uglify())))
.pipe(gulpif(!options.debug, streamify(stripDebug())))
.pipe(gulp.dest(options.dest))
.pipe(notify(function () {
console.log('Built in ' + (Date.now() - start) + 'ms');
}));
};
Githubの問題によると、reactがロードされる前に単一のjavascript行を追加して実行を防ぐことができます。
From #191 of react-devtools から
<script>
window.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject = function () {}
</script>
次に、サーバー側のレンダリングで以下のように実行できるように、これを環境条件でラップすることを検討できます。パグ(以前はジェイドとして知られていました)としましょう:
#{process.env.NODE_ENV == 'production' ? "window.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject = function(){}" : ""}
ただし、ビジネスロジックと機密データをサーバーに戻すことは、依然として適切な方法です。
redux-devtools-extension
を使用している場合は、これを行うことができます。
const devTools =
process.env.NODE_ENV === "production"
? applyMiddleware(...middlewares)
: composeWithDevTools(applyMiddleware(...middlewares));
const store = createStore(rootReducer, initialState, devTools);
これにより、devtools拡張機能が開発環境でのみ機能し、本番環境では機能しないことが保証されます
@peteriodの回答を改善して、Devツールがインストールされているかどうかを確認してください
if (typeof window.__REACT_DEVTOOLS_GLOBAL_HOOK__ === 'object') {
__REACT_DEVTOOLS_GLOBAL_HOOK__.inject = function() {};
}
また、package.jsonファイルに以下のコマンドを追加して、ビルド後にすべてのソースマップを削除することもできます。
"scripts":{
...,
"build": "react-scripts build",
"postbuild": "rimraf build/**/*.map"
}
コンポーネントをナビゲートするのが少し難しくなり、それらをdevtoolsで非表示にします-ソース