dart_spawner
Runs a Dart script/File/Uri inside a new Isolate of the current Dart VM. It also can spawn a Dart File from another Dart project/package, using its dependencies, into the current Dart VM.
Usage
You can run a Dart script (from a String
) into a new Isolate:
import 'package:dart_spawner/dart_spawner.dart';
void main() async {
var spawner = DartSpawner();
print(spawner);
var script = r'''
void main(List<String> args) {
print('>> From Script! Args: $args');
}
''';
var spawned = await spawner.spawnDart(script, ['a', 'b', 'c']);
print('Spawned: $spawned');
var exitCode = await spawned.exitCode;
print('Exit code: $exitCode');
}
Output:
DartSpawner{ id: 1, spawned: false, finished: false }
>> From Script! Args: [a, b, c]
Spawned: SpawnedIsolate{ id: 1, type: <script>, finished: false, projectDirectory: Directory: '/path/to/current/dart_project' }
Exit code: 0
Spawning a Dart file inside the current Dart project:
To run a Dart File inside the current Dart project (used in the main Dart entry point).
import 'package:dart_spawner/dart_spawner.dart';
void main() async {
var spawner = DartSpawner();
print(spawner);
var file = await spawner.projectSubFile('test/hello-world.dart');
print('Spawning file: $file');
var spawned = await spawner.spawnDart(file, ['x', 'y']);
print('Spawned: $spawned');
var exitCode = await spawned.exitCode;
print('Exit code: $exitCode');
}
Spawning a Dart file in ANOTHER Dart project:
You can also run a Dart script/file that exists in another Dart project/package,
passing the project directory to the DartSpawner
constructor:
import 'dart:io';
import 'package:dart_spawner/dart_spawner.dart';
void main() async {
var spawner = DartSpawner(
directory: Directory('/path/to/another/dart_project/'),
);
print(spawner);
var file = await spawner.projectSubFile('example/project_example.dart');
print('Spawning file: $file');
var spawned = await spawner.spawnDart(file, ['some', 'args']);
print('Spawned: $spawned');
var exitCode = await spawned.exitCode;
print('Exit code: $exitCode');
}
- NOTE: It will use the dependencies of the target project and not the ones used in the current
Isolate
.
Dart VM
Note that DartSpawner
uses Isolate.spawnUri
to run a Dart Entry Point (script/file/Uri). This is not supported outside the Dart VM
or in a compiled dart file (dart compile exe foo.dart
)!
Features and bugs
Please file feature requests and bugs at the issue tracker.
Author
Graciliano M. Passos: gmpassos@GitHub.
License
Dart free & open-source license.
Libraries
- dart_spawner
- Dart Spawner Library.