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.

Reply via email to