Угловая схема: Как определить переменные по умолчанию в schema.json?(название проекта) - PullRequest
0 голосов
/ 05 февраля 2019

Как определить переменные по умолчанию для "свойств" угловой схемы в schema.json?

Я пытался заглянуть в угловой исходный код , но не смог понять,Я обнаружил, что если используется ключевое слово «$ source», то строка перед ним будет разрешена до некоторого значения.

Например, «argv» и «projectName» - это две переменные, которые онибудут преобразованы в фактические значения, когда они будут записаны следующим образом:

     "project": {
         "alias": "p",
         "type": "string",
         "description": "The name of the project.",
         "$default": {
             "$source": "projectName"
         }
     },

или

    "name": {
      "type": "string",
      "description": "The package name for the new schematic.",
      "$default": {
        "$source": "argv",
        "index": 0
      }
    },

Итак, как я могу определить свою собственную переменную?Они на самом деле переменные?Какие еще переменные доступны?

Я также нашел другой пример, который не работает, если я скопировал и вставил его в свой собственный проект:

    "version": {
      "type": "string",
      "description": "The version of the Angular CLI to use.",
      "visible": false,
      "$default": {
        "$source": "ng-cli-version"
      }
    },

Здесь вы найдете полный код

Исходя из моих наблюдений, я ожидаю, что это будет разрешено до значения, но я получаю неопределенность.

Заранее благодарю вас, ребята!

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Просто используйте "default": "YOUR_VALUE", но не забудьте запустить npm run build после.

0 голосов
/ 15 февраля 2019

Переменные, которые вы определяете, будут определенно зависеть от поведения вашей схемы.Например, у меня есть новая схема приложения с пользовательской переменной, позволяющей пользователям указывать тип аутентификации для скаффолдинга в приложении:

Чтобы вызвать эту схему из командной строки,пользователь будет вводить ng new my-application-schematic-with-sso --collection=@simple-schematic --authentication=SSO (x-prompt предоставляет пользователю список параметров, если переключатель командной строки не указан явно. См. также Угловая ng-новая схема для параметров стиля .

"authentication": {
    "description": "The authentication strategy to use",
    "default": "None",
    "x-prompt": {
        "message": "Which authentication strategy would you like to use?",
        "type": "list",
        "items": [
            {
                "value": "None",
                "label": "None"
            },
            {
                "value": "SSO",
                "label": "SSO"
            }
        ]
    }
},

Эта схема также использует шаблон argv для захвата имени рабочей области:

"name": {
    "description": "The name of the workspace",
    "type": "string",
    "$default": {
        "$source": "argv",
        "index": 0
    }
},...

Таким образом, синтаксис командной строки для вызова этой схемы будет выглядеть примерно так: ng new my-new-schematic --collection=@simple-schematicи сгенерирует новое рабочее пространство под названием my-new-schematic . Поскольку флаг --authentication не указан, пользователю будет предложено выбрать либо Нет , либо SSO .

Одно важное поведение, связанное с определяемой вами схемой и переменными, может привести к проблеме undefined (особенно, если ваша переменная имеет значение по умолчанию)t значение), которое вы отметили в исходном вопросе, неправильно связывает схему со схемой.

Например, свойство schema объекта схемы ng-new указывает, как преобразовать предоставленные входные данные CLI.в соответствующий объект , переданный в пользовательскую схему.

{
  "$schema": "../node_modules/@angular-devkit/schematics/collection-schema.json",
  "extends": "@schematics/angular",
  "schematics": {
    "ng-new": {
      "description": "new workspace",
      "factory": "./ng-new",
      "schema": "./ng-new/schema.json"
    }
  }
}

Два разных снимка экрана при отладке тестов в зависимости от того, указано свойство schema или нет:

No schema property fails to pick up default values specified

И снова со схемой, явно указанной: Schema property picks up default values

...