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