Skip to content

Commit cedce68

Browse files
brentvatnefacebook-github-bot
authored andcommitted
Add support for custom log reporter cli option for local server
Summary: In Expo tools such as XDE, exp we listen listen to stdout from the packager process and print it in our own buffer. In the case of XDE, an electron app, our log pane is DOM-based, and before printing each log chunk we need to remove special tty characters and sometimes parse it to get information that we need (eg: progress bar). By using a custom reporter, we can take the raw events and pass them along in a format that is easy to consume by XDE and exp. This same motivation applies to create-react-native-app, where we currently don't show a progress bar in the terminal, but we can with this change. Create `LogReporter.js` in the root of a project with the CLI changes included in this PR. ``` class LogReporter { update(event) { console.log(JSON.stringify(event)); } } module.exports = LogReporter; ``` Now, run `react-native start --customLogReporterPath=LogReporter.js` -- all of the raw events will be output as JSON (while the logs Closes facebook/react-native#13172 Differential Revision: D4795760 Pulled By: hramos fbshipit-source-id: 80164b2f30e33a3f9965f4865a8404f8640a52c1
1 parent 09006b6 commit cedce68

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

server/runServer.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
const InspectorProxy = require('./util/inspectorProxy.js');
1212
const ReactPackager = require('../../packager/react-packager');
13-
const TerminalReporter = require('../../packager/src/lib/TerminalReporter');
1413

1514
const attachHMRServer = require('./util/attachHMRServer');
1615
const connect = require('connect');
@@ -86,6 +85,21 @@ function getPackagerServer(args, config) {
8685
const providesModuleNodeModules =
8786
args.providesModuleNodeModules || defaultProvidesModuleNodeModules;
8887

88+
let LogReporter;
89+
if (args.customLogReporterPath) {
90+
try {
91+
// First we let require resolve it, so we can require packages in node_modules
92+
// as expected. eg: require('my-package/reporter');
93+
LogReporter = require(args.customLogReporterPath);
94+
} catch(e) {
95+
// If that doesn't work, then we next try relative to the cwd, eg:
96+
// require('./reporter');
97+
LogReporter = require(path.resolve(args.customLogReporterPath));
98+
}
99+
} else {
100+
LogReporter = require('../../packager/src/lib/TerminalReporter');
101+
}
102+
89103
return ReactPackager.createServer({
90104
assetExts: defaultAssetExts.concat(args.assetExts),
91105
blacklistRE: config.getBlacklistRE(),
@@ -96,7 +110,7 @@ function getPackagerServer(args, config) {
96110
platforms: defaultPlatforms.concat(args.platforms),
97111
projectRoots: args.projectRoots,
98112
providesModuleNodeModules: providesModuleNodeModules,
99-
reporter: new TerminalReporter(),
113+
reporter: new LogReporter(),
100114
resetCache: args.resetCache,
101115
transformModulePath: transformModulePath,
102116
verbose: args.verbose,

server/server.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@ module.exports = {
118118
}, {
119119
command: '--reset-cache, --resetCache',
120120
description: 'Removes cached files',
121+
}, {
122+
command: '--custom-log-reporter-path, --customLogReporterPath [string]',
123+
description: 'Path to a JavaScript file that exports a log reporter as a replacement for TerminalReporter',
121124
}, {
122125
command: '--verbose',
123126
description: 'Enables logging',

0 commit comments

Comments
 (0)