React Developer Tools、Redux DevTools 能夠給開發人員在研發階段調試程序帶來極大的方便。 可是,不少人忽略了一點:上了生產環境後,把一些代碼細節輕易讓外部人員獲取,並非好事。javascript
解決方案就是:生產環境下,將DevTools禁止使用。java
如下是實現的代碼react
// 項目入口文件index.tsx
import {
disableReactDevTools
} from '@utils/js/other';
if(process.env.NODE_ENV == 'production'){
disableReactDevTools();
}
複製代碼
// @utils/js/other.ts
export const disableReactDevTools = (): void => {
const noop = (): void => undefined;
const DEV_TOOLS = (window as any).__REACT_DEVTOOLS_GLOBAL_HOOK__;
if (typeof DEV_TOOLS === 'object') {
for (const [key, value] of (<any>Object).entries(DEV_TOOLS)) { DEV_TOOLS[key] = typeof value === 'function' ? noop : null; } } }; 複製代碼
禁止思路以下:git
window.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject = function () {}
複製代碼
這樣能夠阻止devtools訪問React上下文github
window.__REACT_DEVTOOLS_GLOBAL_HOOK__
下掛載的方法,將其重置爲空函數。windwo.__REACT_DEVTOOLS_GLOBAL_HOOK__
的,因此要進行安全防禦。綜合以上3點,就能夠得出disableReactDevTools
方法。redux
另外,只在生產環境禁止,則須要讀取process.env.NODE_ENV
的值,進行判斷。符合要求,則執行disableReactDevTools
方法。瀏覽器
Redux DevTools的做者作得比較全面,已經給出了標準的解決方案。安全
具體實現步驟以下:函數
'process.env.NODE_ENV': JSON.stringify('production')
redux-devtools-extension/developmentOnly
引入方法如下是個人項目代碼片段:oop
import {
composeWithDevTools
} from 'redux-devtools-extension/developmentOnly';
// other code...
const store = createStore(
rootReducer,
composeWithDevTools(middlewareEnhancer)
);
// other code...
複製代碼
喜歡我文章的朋友,能夠經過如下方式關注我: