按条件选取代码

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

main.ts

  1. import has from '@dojo/framework/has';
  2. if (has('production')) {
  3. console.log('Starting in production');
  4. } else {
  5. console.log('Starting in dev mode');
  6. }
  7. export const mode = has('production') ? 'dist' : 'dev';

.dojorc

  1. {
  2. "build-app": {
  3. "features": {
  4. "production": true
  5. }
  6. }
  7. }

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

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

static-build-loader 输出

  1. import has from '@dojo/framework/has';
  2. if (true) {
  3. console.log('Starting in production');
  4. } else {
  5. console.log('Starting in dev mode');
  6. }
  7. export const mode = true ? 'dist' : 'dev';

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

Uglify 输出

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

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

已提供的功能

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

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