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

任何未静态断言的特性都不会被重写。这允许代码在运行时确定特性是否存在。

提供的特性

这些特性由构建系统提供,以帮助识别特定环境或操作模式。

特性标志 描述
debug 提供一种方法来创建仅在调试或提供增强诊断(在生产构建中不需要)时可用的代码路径。默认值为 true,但在生产构建中应静态配置为 false
host-browser 确定当前环境是否在全局上下文中包含 windowdocument 对象,因此通常可以安全地假设代码在浏览器环境中运行。
host-node 尝试检测环境是否看起来是节点环境。
build-time-render 在构建时渲染系统构建时渲染期间静态定义。