Hello,
On CMake-based projects where I want to keep separate the web app code
(= several vanilla JS files) from the various emscripten modules that
are used (= several emscripten-generated JS/wasm), I conveniently use
Closure as provided by Emscripten directly from my CMakefile to
bundle/optimize the web app code.
=> CMakeList.txt is looking like:
add_executable(<my_emscripten_module_1> file_1.cpp file_2.cpp --closure 1) # =>
my_emscripten_module_1.js/wasm
add_executable(<my_emscripten_module_2> file_3.cpp file_4.cpp --closure 1) # =>
my_emscripten_module_2.js/wasm
add_custom_target(<my_webapp_using_the_emscripten_modules>COMMAND
"java""-jar""$ENV{EMSDK}/upstream/emscripten/third_party/closure-compiler/compiler.jar"
"--js" "<file_1>.js"
"--js" "<file_2>.js"
"--js_output_file" "<my_webapp_using_the_emscripten_module>.js"
"--language_in=ECMASCRIPT_2017"
"--language_out=ECMASCRIPT_2017"
"--compilation_level""<BUNDLE|SIMPLE|ADVANCED>"
DEPENDS <my_emscripten_module_1> <my_emscripten_module_2) # =>
my_webapp_using_the_emscripten_modules.js
Then, to build the app, I just have to do:
make <my_webapp_using_the_emscripten_modules>
And pretty much, that's it, the 3 bundles are created: the web app code
(closure optimized/bundled vanilla JS), the emscripten module 1 (closure
optimized generated JS+wasm), and emscripten module 2 (closure optimized
generated JS+wasm)
I find this very convenient to do, as it allows to do everything from
CMake, and without having to use another module bundler (Webpack, and
co.) and the full node/npm ecosystem that I simply don't need. I admit
it feels a bit old-school/an heterodox way of doing things on the Web
(using Make!?), but I find this much more in spirit with the C++ way of
building projects. After all, we are using Emscripten for a reason,
isn't it ?
But I suppose that scenario would be feasible also if Closure was
provided through npm and not through a .jar directly in Emscripten
distribution (I would have to call some npm command for this, right
?). I can live with a scary 'node_module' folder ;)
Cheers,
gabriel
Hello all,
the PRs
https://github.com/emscripten-core/emsdk/pull/404,
https://github.com/emscripten-core/emscripten/pull/9989, and
https://github.com/emscripten-core/emscripten/pull/9990
propose migrating Closure compiler and html-minifier to reside outside
the Emscripten tree, and be installed via npm.
The benefits of this change are:
1. Future updates to closure and html-minifier will not bloat up the
size of the Emscripten git repository (each update would increase the
size of the git repository by ~+10% otherwise)
2. Emscripten developers do not need to maintain a CDN and code for
distributing closure/html-minifier, easing CDN and testing burden from
emsdk,
3. Tracking which version of closure and html-minifier we are on
becomes explicit and idiomatic to people familiar with npm community
(can be found in package.json) rather than having to look up git logs,
4. Updating versions become easier, as migrating to a new versions
can be changed into the file package.json
The drawbacks of this change are:
5. developers who follow the "I git cloned all repositories myself"
approach and do not use emsdk need to run "npm install" once in the
Emscripten root directory if they want to use closure or
html-minifier,
6. If npm goes down, it will disrupt emsdk installation
Can people think of other benefits/drawbacks that should influence
this design change?
Cheers,
Jukka
--
You received this message because you are subscribed to the Google Groups
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/emscripten-discuss/3e9f7095-dee6-711e-1623-ae715c81c5ce%40gmail.com.