dart-lang / webdev

A CLI for Dart web development.
https://pub.dev/packages/webdev
212 stars 71 forks source link

[webdev] Generate auto-switching combined build for dart2js and dart2wasm output #2296

Open parlough opened 7 months ago

parlough commented 7 months ago

I'm not exactly sure at what layer this should be in, but webdev seems like an most appropriate place. Happy to hear what other's think! Perhaps it does make sense directly as a dart subcommand, not sure.

Building on https://github.com/dart-lang/sdk/commit/0df58fc2d07107846ec5fb28764283b32e6bd1dc and eventually https://github.com/dart-lang/build/issues/3621:

I think webdev should have a release mode that generates output with both dart2js (dart compile js) and dart2wasm (dart compile wasm). Then it should generate a JS script which chooses between them based on browser capabilities.

Developers can technically do this themselves, but I imagine it will be common enough that it's worth having some built-in functionality to do so.

Perhaps for a while, this can be a separate mode from the existing --release, but eventually I'd expect this to be the default.

\cc @kevmoo @jakemac53 For general thoughts, including about where this functionality could live.

jakemac53 commented 7 months ago

This probably has to be a part of the build package explicitly, because usually we don't support compiling the same app with multiple compilers (as a part of a single build). We could though, and I had just yesterday started some informal conversations regarding how we should do the switching too, as a part of https://github.com/dart-lang/build/issues/3621 :).

mit-mit commented 1 month ago

Functionally I think we'd want something like this:

jakemac53 commented 1 month ago

That seems pretty reasonable, and I was looking into doing this before, but I need good direction from the dart2js/wasm teams on how to implement the JS/Wasm switching.

kevmoo commented 1 month ago

@jakemac53 – @eyebrowsoffire has figured this out for Flutter. We should look to share logic as much as possible!