Рубрики
Без рубрики

Все, что вам нужно знать о компиляторе угловой совместимости (NGCC)

В этой статье мы рассмотрим, как угловые избавляют нелюбивые библиотеки, совместимые с библиотеками плюща, используя компилятор совместимости NGCC

Автор оригинала: Ajit Singh.

В этой статье я говорил о том, как угловые компилирует код в последней версии (v9), но подумайте об этом, не весь код скомпилирован в то же время, есть библиотеки, модули NPM, там зависимые зависимости, и они не могут хорошо работать с дорогой NGTSC компилирует угловой код. Это может вызвать сбои во время выполнения, время компиляции и т. Д. К счастью, угловой уже решил эти проблемы для нас, используя компилятор угловой совместимости NGCC Отказ

Что такое NGCC ??

Сначала сначала увидимся от углового глоссария.

Компилятор угловой совместимости. Если вы создадите свое приложение, используя плющ, но это зависит от библиотек, которые не были скомпилированы с плющом, использует CLI NGCC Чтобы автоматически обновлять зависимые библиотеки для использования ivy.

Поскольку многие из них уже знают, что угловые изменили его компилятор по умолчанию для просмотра двигателя к плющему в версии 9. Большая часть кода, сгенерированного плющом, сильно отличается от кода, сгенерированного двигателем View. Таким образом, Code, генерируемый компилятором View Engine, не может быть использован компилирующим плющом, но это создает огромную проблему, что большинство библиотек и компонентов угловых средств генерируются с использованием компилятора View Engine. Если мы не сделаем эти совместимы, огромный кусок сообщества, увлечена бесполезным. Итак, чтобы выйти из этой проблемы Угловая команда создала компилятор совместимости NGCC Отказ Он обеспечивает просмотр кода двигателя, совместимый с плющами. Я действительно благодарен за этот инструмент.

Как работает NGCC?

Компилятор NGCC разбирается с предложенным кодом JavaScript, который производится компилятором ViewEngine, для компонентов, директив, труб, инъекций и т. Д. Затем он обновляет этот код так, что он так, как будто он был изначально составлен компилятором плюща.

Он изменяет все форматы JavaScript, которые необходимы в TE App, например, ES2015, ES5, UMD и т. Д. После этого он обновляет файл ввода, поскольку они необходимы для компилятора плюща для обработки файлов исходных файлов приложений.

NGCC в основном работает от крючка Postinstall в вашем Package.json Файл:

{
  "scripts": {
    "postinstall": "ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points"
  }
}

Сценарий PostInstall будет работать на каждой установке Node_Modules, в том числе выполняемых NG Update и NG Add Add.

Если вы выполняете несколько установок подряд, это может в конечном итоге медленнее, чем отпустить угловые CLI RUN NGCC на сборки.

Операции, выполняемые NGCC

  1. Сканировать node_modules Для пакетов, которые находятся в APF Угловой формат пакета Проверяя .Metadata.json файлы. (Это просто проверяет свое существование, чтобы определить, является ли пакет угловым пакетом или нет.).
  2. Производят со совместимым союзным версиями для каждого из этих пакетов

Для генерации со совместимым со словом NGCC создает __ivy_ngcc__ Попутники внутри каждого пакета, который он компилирует, если он вызывается с вариантом queate-vcy-inclue-points (что касается его CLI). Другой «режим» работы (без параметра «Create-Ivy-Points) – какое поведение по умолчанию, если вы вызовите NGCC вручную – обновляют файлы на месте.

Настройка NGCC.

NGCC Потому что Devalt может разработать, как скомпилировать любой пакет. Но иногда могут быть пакеты, которые отклоняются слишком далеко от пакетов по умолчанию APF стиль.

В таких случаях также можно предоставить конфигурацию для изменения того, как NGCC рассматривает определенные точки входа в пакеты, чтобы он мог их обработать.

Пакет/конфигурация входа

Входные точки к пакету настроен с использованием файла конфигурации NGCC.config.js.

module.exports = {
  packages: {
    'package-name': {
      entryPoints: { ... }
    },
    ...
  }
};

В этих файлах Выходные точки это свойство, клавиши которых являются путями к точке входа (относительно пакета). Например:

entryPoints: {
  // the primary (root) entry-point
  '.': { ... },
  // a secondary entry-point
  './testing': { ... },
}

Давайте теперь обсудим очки входа подробно:

По умолчанию точка входа использует следующее интерфейс

interface NgccEntryPointConfig {
  ignore?: boolean;  
  override?: PackageJsonFormatPropertiesMap;   
  ignoreMissingDependencies?: boolean;
  generateDeepReexports?: boolean;
}

Давайте теперь обсудим каждую из этих свойств подробно

  1. игнорировать – если правда, это не обрабатывает (или даже признать существование) этой точки входа
  2. Переопределить – это свойство, если они предоставлены, удерживает значения, которые будут переопределять эквивалентные свойства в пакете входа.
  3. IGNOREMISSINGDECTECTWORTS – NGCC Жанно пропускает компиляцию выпускников, которые содержат импорт, которые не могут быть разрешены или поняты. Если указана эта опция, NGCC будет продолжаться с составлением входной точки, даже если это такие недостающие зависимости.
  4. GeneratedeePreexports – Включение этой опции для entrypoint сообщает NGCC, что глубокий импорт может использоваться для файлов, которые он содержит, и что он должен генерировать частный реэкспорт наряду с NGModule всех директив/труб, которые он делает доступным в поддержку этих импорта.

Все вышеуказанные свойства являются необязательными. Мы можем даже пройти пустой объект. Простое существование объекта конфигурации входа сообщает NGCC, что это действительно является точкой входа, которая должна быть обработана, даже если она отсутствует необходимые файлы, такие как файл Metadata.json.

Уровни конфигурации

Конфигурация NGCC может быть сделана на разных уровнях. Конфигурация для точки входа на одном из уровней ниже будет переопределять уровни под ним.

Существует три типа уровней, на которых работает NGCC:

  • Уровень проекта
  • Уровень пакета
  • Уровень по умолчанию

Уровень проекта

Вы можете настроить NGCC для всех пакетов, которые используют ваш проект, поместив файл NGCC.config.js в корневой основе проекта рядом с файлом package.json. В этом случае разработчик предоставляет конфигурацию, которая исправляет проблемы, относящиеся к библиотекам, используемым в их применении.

В этом случае файл может настроить несколько пакетов, поэтому экспорт из файла является объектом, который имеет свойство пакетов, которое сам является объектом, в котором каждая клавиша является названием настраиваемого пакета.

Например:

module.exports = {
  packages: {
    "ng2-dragula": {
      entryPoints: {
        "./dist": {
          "ignore": true
        },
        ...
      }
    },
    "other": {
      entryPoints: {
        ... 
      }
    },
    ...
  }

Как если бы все пакеты не имеют никакого .Metadata.json Файлы в корневом каталоге, но только внутри Dist/ Отказ Без конфигурации NGCC не понимает, что это монтажный угловой пакет, который должен быть скомпилирован в плющ.

Уровень пакета

Автор пакета может предоставить конкретную конфигурацию, чтобы разрешить NGCC иметь возможность обрабатывать точки входа в их пакет. Конфигурация на этом уровне предусмотрена в файле NGCC.config.js в корне пакета, рядом с его собственным package.json файл.

В этом случае экспорт из файла является объектом, который описывает только настраиваемый пакет, и поэтому не будет содержать свойство пакетов. Например:

module.exports = {
  entryPoints: {
    "./inputtext": {
      "typings": "./inputtext.d.ts",
      "main": "./inputtest.js"
    },
    "./button": {
      "typings": "./button.d.ts",
      "main": "./button.js"
    },
    ...
  }
};

Уровень по умолчанию

Конфигурация по умолчанию для NGCC.

Это окончательная конфигурация Foxback, которую NGCC будет использовать, если нет конфигурации для пакета на уровне пакета или уровне проекта.

Эта конфигурация предназначена для пакетов, которые «мертвы» – то есть больше не поддерживаются, и поэтому вряд ли будут исправлены для работы с NGCC, а также не предоставляют конфигурацию уровня пакета.

Восходящий процесс для поиска конфигурации:

Проект -> Пакет -> по умолчанию

Если пакет предоставляет свою собственную конфигурацию, то это будет переопределить этот по умолчанию.

Также разработчики приложений всегда могут предоставлять конфигурацию на уровне проекта, который будет переопределять все остальное.

Обратите внимание, что Foxback является патендом на основе не входной точки. Например, если a есть конфигурация для пакета на уровне проекта, это заменит все конфигурации входных точек, которые, возможно, были предоставлены на уровне пакета или конфигурации уровня по умолчанию, даже если конфигурация уровня проекта не предусматривает данную запись -точка.

Бег NGCC вручную

MSTY CLI делает весь тяжелый подъем для нас во время использования NGCC, но если по какой-то причине вам нужно выполнить NGCC вручную, вы тоже можете сделать это.

NGCC можно найти в Node_Modules двоичной папчики, поэтому любой из следующих команд будет работать: пряжа NGCC/NPM запустить NGCC или Node_Modules/.bin/NGCC. Ots of Options доступны в NGCC, я извлек их, используя NGCC –help, я добавил их ниже для справки

Options:
  --version                          Show version number               [boolean]
  -s, --source                       A path (relative to the working directory)
                                     of the `node_modules` folder to process.
                                                     [default: "./node_modules"]
  -p, --properties                   An array of names of properties in
                                     package.json to compile (e.g. `module` or
                                     `es2015`)
                                     Each of these properties should hold the
                                     path to a bundle-format.
                                     If provided, only the specified properties
                                     are considered for processing.
                                     If not provided, all the supported format
                                     properties (e.g. fesm2015, fesm5, es2015,
                                     esm2015, esm5, main, module) in the
                                     package.json are considered.        [array]
  -t, --target                       A relative path (from the `source` path) to
                                     a single entry-point to process (plus its
                                     dependencies).
                                     If this property is provided then
                                     `error-on-failed-entry-point` is forced to
                                     true
  --first-only                       If specified then only the first matching
                                     package.json property will be compiled.
                                                                       [boolean]
  --create-ivy-entry-points          If specified then new `*_ivy_ngcc`
                                     entry-points will be added to package.json
                                     rather than modifying the ones in-place.
                                     For this to work you need to have custom
                                     resolution set up (e.g. in webpack) to look
                                     for these new entry-points.
                                     The Angular CLI does this already, so it is
                                     safe to use this option if the project is
                                     being built via the CLI.          [boolean]
  --legacy-message-ids               Render `$localize` messages with legacy
                                     format ids.
                                     The default value is `true`. Only set this
                                     to `false` if you do not want legacy
                                     message ids to
                                     be rendered. For example, if you are not
                                     using legacy message ids in your
                                     translation files
                                     AND are not doing compile-time inlining of
                                     translations, in which case the extra
                                     message ids
                                     would add unwanted size to the final source
                                     bundle.
                                     It is safe to leave this set to true if you
                                     are doing compile-time inlining because the
                                     extra
                                     legacy message ids will all be stripped
                                     during translation.
                                                       [boolean] [default: true]
  --async                            Whether to compile asynchronously. This is
                                     enabled by default as it allows
                                     compilations to be parallelized.
                                     Disabling asynchronous compilation may be
                                     useful for debugging.
                                                       [boolean] [default: true]
  -l, --loglevel                     The lowest severity logging message that
                                     should be output.
                                     [choices: "debug", "info", "warn", "error"]
  --invalidate-entry-point-manifest  If this is set then ngcc will not read an
                                     entry-point manifest file from disk.
                                     Instead it will walk the directory tree as
                                     normal looking for entry-points, and then
                                     write a new manifest file.
                                                      [boolean] [default: false]
  --error-on-failed-entry-point      Set this option in order to terminate
                                     immediately with an error code if an
                                     entry-point fails to be processed.
                                     If `-t`/`--target` is provided then this
                                     property is always true and cannot be
                                     changed. Otherwise the default is false.
                                     When set to false, ngcc will continue to
                                     process entry-points after a failure. In
                                     which case it will log an error and resume
                                     processing other entry-points.
                                                      [boolean] [default: false]
  --tsconfig                         A path to a tsconfig.json file that will be
                                     used to configure the Angular compiler and
                                     module resolution used by ngcc.
                                     If not provided, ngcc will attempt to read
                                     a `tsconfig.json` file from the folder
                                     above that given by the `-s` option.
                                     Set to false (via `--no-tsconfig`) if you
                                     do not want ngcc to use any `tsconfig.json`
                                     file.                              [string]
  --help                             Show help