条件代码
构建工具的静态代码分析器能够从其创建的包中删除无用代码分支。命名条件块使用 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 |
确定当前环境是否在全局上下文中包含 window 和 document 对象,因此通常可以安全地假设代码在浏览器环境中运行。 |
host-node |
尝试检测环境是否看起来是节点环境。 |
build-time-render |
在构建时渲染系统构建时渲染期间静态定义。 |