Повышение ошибки времени компиляции в зависимости от значения переменных среды - PullRequest
0 голосов
/ 10 марта 2020

Как я могу вызвать ошибку времени компилятора в angular, чтобы компилятор не продолжал и выдавал ошибку в зависимости от значений в моем файле enviroments.ts. Например, рассмотрим следующий сценарий, в котором приложение должно использовать метод проверки подлинности 1 или 2, но не оба:

environment.ts имеет следующее содержимое:

export const environment = {
  production: false,
  enableAuthenticationMethod1: true,
  enableAuthenticationMethod2: false
};

while environment.prod. ts имеет следующее содержимое:

export const environment = {
  production: true,
  enableAuthenticationMethod1: false,
  enableAuthenticationMethod2: true
};

Теперь в режиме prod у нас отключен AuthenticationMethod1 и включен AuthenticationMethod2. Как убедиться, что будет выдана ошибка времени компиляции для файла среды со следующим (неправильным) содержимым:

export const environment = {
  production: true,
  enableAuthenticationMethod1: true,
  enableAuthenticationMethod2: true
};

1 Ответ

0 голосов
/ 10 марта 2020

OOTB нет способа вызвать исключение во время компиляции. Единственный способ, который я вижу, это возможно, если вы выбросили конфигурацию веб-пакета и создали плагин, который проверяет ваши настройки для вас. (Я бы не рекомендовал извлекать конфигурацию веб-пакета, если только вам это абсолютно не нужно).

Однако вы можете создать собственное правило TSLint, которое проверяет environment.ts, чтобы увидеть, настройка действительна

https://palantir.github.io/tslint/develop/custom-rules/

Пример правила TSLint, которое запрещает все операторы import:

import * as Lint from "tslint";
import * as ts from "typescript";

export class Rule extends Lint.Rules.AbstractRule {
    public static FAILURE_STRING = "import statement forbidden";

    public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
        return this.applyWithWalker(new NoImportsWalker(sourceFile, this.getOptions()));
    }
}

// The walker takes care of all the work.
class NoImportsWalker extends Lint.RuleWalker {
    public visitImportDeclaration(node: ts.ImportDeclaration) {
        // create a failure at the current position
        this.addFailure(this.createFailure(node.getStart(), node.getWidth(), Rule.FAILURE_STRING));

        // call the base version of this visitor to actually parse this node
        super.visitImportDeclaration(node);
    }
}
...