dojo dragon main logo

按条件选取代码

构建工具的静态代码分析工具能够从它创建的包中移除无用的代码。命名的条件块是使用 dojo 框架的 has 模块定义的,并且可以在 .dojorc 中静态设置为 true 或 false,然后在构建阶段移除。

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
        }
    }
}

上述的 production 功能将构建生产版本dist 模式)设置为 true。构建系统使用 @dojo/framework/has 将代码标记为无法访问,并在构建时移除这些无用的代码。

比如,上述代码将重写为:

static-build-loader 输出

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';

然后,构建工具的无用分支移除工具将移除无用的代码。

Uglify 输出

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

任何没有被静态断言的功能都不会被重写。这就允许在运行时来确定是否存在这个功能。

已提供的功能

构建系统已提供以下功能(feature),用于帮助识别特定的环境或操作模式。

功能标记 描述
debug 提供了一种为代码创建代码路径的方法,该代码路径仅在调试或者提供更强的诊断时有用,在为 生产 构建时是不需要的。默认为 true,但在构建生产版本时应该静态地配置为 false
host-browser 确定当前环境下 global 上下文中是否包含 windowdocument 对象,因此通常可以安全地假设代码运行在浏览器环境下。
host-node 尝试检测当前环境是不是 node 环境。
build-time-render 在构建期间渲染时由 BTR 系统静态定义。