Skip to content

elsassph/haxe-modular

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
bin
 
 
doc
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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:

  • make your web app load instantly,
  • make your HTML5 game load quicker,
  • load sections / features / mini-games on-demand.

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:

  • at compile time, the dependency graph of the class is built and one additional JS file will be emitted (bundling this class and all its dependencies),
  • at run time, when the aynchronous reference is evaluated, the additional JS is loaded (once) automatically.

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:

  • use Modular splitting under the hood,
  • split automatically using a single hxml build configuration,
  • support NPM dependencies,
  • allow hot-reloading of code.

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?

  • Of course not; anything targeting JavaScript can use it.
  • However it does offer React-specific additional features for code hot-reloading.

Q: Is it possible to minify the code?

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

  • Yes: you can split libraries, but for technical reasons, extracting a library (e.g. many classes used across the application) has some limitations.

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

  • Yes, but only when the code is inserted at the top of the file; this is the default position when using --macro includeFile('my-lib.js').

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

  • Yes since 0.12.0

About

Haxe-JS code splitting, NPM dependencies bundling, hot-reload

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published