elsassph / haxe-modular

Haxe-JS code splitting, NPM dependencies bundling, hot-reload
116 stars 14 forks source link
code-splitting haxe javascript

Haxe Modular

TravisCI Build Status Haxelib Version npm Version Downloads Join the chat at https://gitter.im/haxe-react/haxe-modular

Code splitting and hot-reload for Haxe JavaScript applications.

Why?

If you use Haxe for JavaScript, directly or indirectly (React, OpenFl,...), then you probably want to:

Haxe has an excellent, compact and optimised JS output, but it's always a single file; even with good minification / gzip compression it can be a large payload.

Modular can split gigantic Haxe-JS outputs into load-on-demand features, without size/speed overhead, and without losing sourcemaps.

How?

import MyClass;
...
load(MyClass).then(function(_) {
    var c = new MyClass();
});

The approach is to reference one class asynchronously in your code:

Where to start?

There are 2 ways to use Haxe Modular, depending on your project/toolchain/goals:

  1. standalone Modular; zero dependencies, for any Haxe-JS project,
  2. Webpack Haxe Loader; leverage the famous JS toolchain.

In both cases, it is advisable to read about the technical details:

What is the difference?

Both solutions:

What should I use?

  1. Standalone Modular is an easy, drop-in, addition to a regular Haxe JS build process - it is very lightweight and unobstrusive, and you don't need to learn Webpack.

    Using NPM modules however requires a bit of ceremony: all the NPM dependencies have to be gathered (manually) in a libs.js which is loaded upfront.

  2. Webpack Haxe Loader is a more powerful setup but you'll have to learn Webpack. Webpack is a complex and large system offering vast possibilities from the JS ecosystem.

FAQ

Q: Where can I get more help? I have questions / issues...

Q: Is it only for React projects?

Q: Is it possible to minify the code?

Q: Can I extract a library/package from my code?

Q: Can I still use the includeFile macro to inject JS code in the output?

Q: Does it support Haxe 4's ES6 output? (-D js-es=6)