mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-26 13:25:51 +08:00
Introduce Packager and App HMR WebSocket connection
Summary: public This diff adds infra to both the Packager and the running app to have a WebSocket based connection between them. This connection is toggled by a new dev menu item, namely `Enable/Disable Hot Loading`. Reviewed By: vjeux Differential Revision: D2787621 fb-gh-sync-id: d1dee769348e4830c28782e7b650d025f2b3a786
This commit is contained in:
committed by
facebook-github-bot-6
parent
f72cfdd9fa
commit
90781d3067
@@ -25,6 +25,11 @@ const JSTimersExecution = require('JSTimersExecution');
|
||||
BatchedBridge.registerCallableModule('Systrace', Systrace);
|
||||
BatchedBridge.registerCallableModule('JSTimersExecution', JSTimersExecution);
|
||||
|
||||
if (__DEV__) {
|
||||
const HMRClient = require('HMRClient');
|
||||
BatchedBridge.registerCallableModule('HMRClient', HMRClient);
|
||||
}
|
||||
|
||||
// Wire up the batched bridge on the global object so that we can call into it.
|
||||
// Ideally, this would be the inverse relationship. I.e. the native environment
|
||||
// provides this global directly with its script embedded. Then this module
|
||||
|
||||
40
Libraries/Utilities/HMRClient.js
Normal file
40
Libraries/Utilities/HMRClient.js
Normal file
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*
|
||||
* @providesModule HMRClient
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
let _activeWS;
|
||||
|
||||
/**
|
||||
* HMR Client that receives from the server HMR updates and propagates them
|
||||
* runtime to reflects those changes.
|
||||
*/
|
||||
const HMRClient = {
|
||||
setEnabled(enabled) {
|
||||
if (_activeWS && _activeWS) {
|
||||
_activeWS.close();
|
||||
_activeWS = null;
|
||||
}
|
||||
|
||||
if (enabled) {
|
||||
// TODO(martinb): parametrize the url and receive entryFile to minimize
|
||||
// the number of updates we want to receive from the server.
|
||||
_activeWS = new WebSocket('ws://localhost:8081/hot');
|
||||
_activeWS.onerror = (e) => {
|
||||
console.error('[Hot Module Replacement] Unexpected error', e);
|
||||
};
|
||||
_activeWS.onmessage = (m) => {
|
||||
// TODO(martinb): inject HMR update
|
||||
};
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = HMRClient;
|
||||
Reference in New Issue
Block a user