mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
* Introduce frontend_server that allows for interactive and batch modes. Example of batch mode: ``` $ dart $HOME/p/f/t11/flutter/engine/src/flutter/frontend_server/bin/server.dart --sdk-root=$HOME/p/f/t11/flutter/engine/src/out/android_debug/flutter_patched_sdk --platform-kernel-dill=$HOME/p/f/t11/flutter/engine/src/out/android_debug/flutter_patched_sdk/platform.dill $HOME/p/f/t11/flutter/flutter/examples/flutter_gallery/lib/main.dart out: result 79256789-598c-4909-a9e4-0ef36d4c26ba out: 'State&TickerProviderStateMixin^#U0^' is exported from both 'package:flutter/src/widgets/animated_cross_fade.dart' and 'package:flutter/src/widgets/animated_list.dart'. ... out: Superclass has no method named 'hitTest'. out: 79256789-598c-4909-a9e4-0ef36d4c26ba $HOME/p/f/t11/flutter/flutter/examples/flutter_gallery/lib/main.dart.dill $ ``` Example of interactive mode - communication via stdin/stdout: ``` $ dart $HOME/p/f/t11/flutter/engine/src/flutter/frontend_server/bin/server.dart --sdk-root=$HOME/p/f/t11/flutter/engine/src/out/android_debug/flutter_patched_sdk --platform-kernel-dill=$HOME/p/f/t11/flutter/engine/src/out/android_debug/flutter_patched_sdk/platform.dill --incremental out: Frontend server is ready. in: compile abc.dart out: result fd99c0f9-12bb-4083-818e-2521d454fdc8 out: fd99c0f9-12bb-4083-818e-2521d454fdc8 abc.dart.dill in: accept in: recompile kuka in: 123.dart in: 456.dart in: kuka out: result d12f8d05-6c79-44f7-a775-1d3469e1be53 in: quit $ ``` * Add test. Cleanup dependencies. * One more test with mocks * Remove platform-kernel option. Refactored CompilerOptions. Clean up comments. * Update license * Use Uri.base.resolve consistently. Ensure folder path for sdk root. Fix test. * Fix main_dart for frontend_server build target * Reintroduce .packages file, add README.md, revert changes to licenses_flutter * Run analyzer on frontend-server. Update .packages deps so tests can be run too. * Add analyzer options file * Clean up dependencies * Add frontend_server files to license file back * Fix comment in analysis_options.yaml * Run frontend_server tests in travis * Update licenses * Change a+x permission on travis/test.sh * pub get before pub run test * Fix path to when * Clarify accept/reject instructions * Formatting, fixed docs, style * Update license script to skip .travis.yml, when/example. Update license file. * Update style nits * Fix license * Trim license extracted text. Fix licenses * Update licenses_third_party signature * Few more tests * Update dart license * Update dart license * Style changes. Fix return value for Future<Null>
72 lines
2.5 KiB
Markdown
72 lines
2.5 KiB
Markdown
# Frontend Server
|
|
|
|
Frontend server is simple wrapper around Dart Frontend. It is a Dart application
|
|
that compiles Dart source into Dart Kernel binary (.dill-file).
|
|
Documentation on Dart Kernel (semantic, binary format, etc) can be found here:
|
|
https://github.com/dart-lang/sdk/wiki/Kernel-Documentation.
|
|
|
|
Frontend server runs in two modes:
|
|
- immediate mode, where Dart source file name is provided as command line
|
|
argument;
|
|
- interactive mode, where communication is happening over stdin/stdout.
|
|
|
|
## Interactive mode instructions
|
|
|
|
### Compile/Recompile
|
|
```
|
|
compile <input.dart>
|
|
```
|
|
Compiles <input.dart> Dart source file with Dart Frontend. Replies with `result` response.
|
|
|
|
```
|
|
recompile <boundary-key>
|
|
<path/to/updated/file1.dart>
|
|
<path/to/updated/file2.dart>
|
|
...
|
|
<boundary-key>
|
|
```
|
|
Incrementally recompiles Dart program previously compiled in current session, taking into account
|
|
changes in the listed files. Replies with `result` response.
|
|
|
|
Relative paths should be relative to current working directory for the shell that launched
|
|
Frontend Server.
|
|
|
|
### Accept/Reject
|
|
```
|
|
accept
|
|
```
|
|
Accepts results of incremental compilation, so that on next recompilation request Dart Frontend
|
|
will not include these recompiled files.
|
|
```
|
|
reject
|
|
```
|
|
Rejects results of incremental compilation, so that on next recompilation request Dart Frontend
|
|
will include compilation results from previously rejected recompilation in addition to what it
|
|
will recompile based on newly changed files.
|
|
Small technical detail is that Dart Frontend will not recompile files from previously rejected
|
|
recompilation attempts (unless they were changed since then), it will just include appropriate
|
|
kernel binaries it kept around from those previously rejected compilation requests.
|
|
|
|
One use of `accept` and `reject` instructions is in the context of Dart VM hot-reload. Dart VM can
|
|
reject user-provided incremental change to what is currently running. It could happen for variety
|
|
of Dart VM internal reasons. For example, if incremental update changes some `class` to `enum`,
|
|
such update can not be hot-reloaded by VM at this point, will be rejected.
|
|
|
|
### Quit
|
|
```
|
|
quit
|
|
```
|
|
Stops the server.
|
|
|
|
## Response from the server
|
|
|
|
```
|
|
result <boundary-key>
|
|
<compiler output>
|
|
<boundary-key> [<output.dill>]
|
|
```
|
|
Response from the Dart Frontend compiler is bracketed by `<boundary-key>` tags. If the compiler
|
|
was able to produce a Dart Kernel file, the name of this file `<output.dill>` is provided too.
|
|
If the compiler encountered unrecoverable errors, there will be no output file name provided.
|
|
|