dojo dragon main logo

Conditional code

The build tool's static code analyzer is capable of removing dead code branches from the bundles it creates. Named conditional blocks are defined using Dojo framework's has module and can be statically set to true or false through .dojorc and removed at build time.

main.ts

import has from '@dojo/framework/has';

if (has('production')) {
    console.log('Starting in production');
} else {
    console.log('Starting in dev mode');
}

export const mode = has('production') ? 'dist' : 'dev';

.dojorc

{
    "build-app": {
        "features": {
            "production": true
        }
    }
}

The above production feature will be set true for production builds (dist mode). The build system uses @dojo/framework/has to identify code as unreachable and remove those dead code branches from the build.

For example, the above code would be rewritten as:

static-build-loader output

import has from '@dojo/framework/has';

if (true) {
    console.log('Starting in production');
} else {
    console.log('Starting in dev mode');
}

export const mode = true ? 'dist' : 'dev';

The build tool's dead branch removal would then remove the unreachable code.

Uglify output

console.log('Starting in production');
export const mode = 'dist';

Any features which are not statically asserted, are not re-written. This allows the code to determine at run-time if the feature is present.

Provided features

These features are provided by the build system to help identify a specific environment or mode of operation.

Feature Flag Description
debug Provides a way to create a code path for code that is only usable when debugging or providing enhanced diagnostics that are not desired in a production build. Defaults to true but should be configured statically as false in production builds.
host-browser Determines if the current environment contains a window and document object in the global context, therefore it is generally safe to assume the code is running in a browser environment.
host-node Attempts to detect if the environment appears to be a node environment.
build-time-render Statically defined by the build-time rendering system during build-time rendering.