Haxe Code Cookbook
Haxe programming cookbookCompilationWriting target-specific modules differentiated by filename

Writing target-specific modules differentiated by filename

Reading time: 1 minute

Please note that the file naming method described here requires for Haxe 4.

The standard way of naming module files in haxe is <Modulename>.hx - the module name spelled with first letter capital, and ending with .hx as extension. Let's say we have the following class called Example:

// Example.hx
class Example {
    public function new() {
        trace('Hello from Example!');
    }
}

If we want to write target-specific code, the most common way is using conditional compilation:

// Example.hx
class Example {
    public function new() {
    #if (js)
        // when compiled and run for JavaScript:
        trace('Hello from JavaScript-specific example!');
        #else
        // when compiled and run on any other target:
        trace('Hello from Example!');
        #end
    }
}

Using <Modulename>.<target>.hx as filename

If using Haxe 4, we can as an alternative put the target specific code in a separate file, using the <Modulename>.<target>.hx naming convention.

A JavaScript-specific file for our Example class would then be named Example.js.hx:

// Example.js.hx <-- Note .js. in the filename!
class Example {
    public function new() {        
        trace('Hello from JAVASCRIPT-SPECIFIC Example!');
    }
}

Whenever compiled for JavaScript, the compiler first looks for Example.js.hx and - if present - uses that. If a target specific file is not found, it looks for Example.hx.

Please note that the <target> name used should be the target define for each target respectively: js for JavaScript, cpp for C++, neko for Neko target etc.

See https://haxe.org/manual/lf-target-specific-files.html


Contributors:
Last modified:
Created:
Category:  Compilation