В этой статье я говорил о том, как угловые компилирует код в последней версии (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
- Сканировать
node_modules
Для пакетов, которые находятся в APF Угловой формат пакета Проверяя.Metadata.json
файлы. (Это просто проверяет свое существование, чтобы определить, является ли пакет угловым пакетом или нет.). - Производят со совместимым союзным версиями для каждого из этих пакетов
Для генерации со совместимым со словом 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; }
Давайте теперь обсудим каждую из этих свойств подробно
- игнорировать – если правда, это не обрабатывает (или даже признать существование) этой точки входа
- Переопределить – это свойство, если они предоставлены, удерживает значения, которые будут переопределять эквивалентные свойства в пакете входа.
- IGNOREMISSINGDECTECTWORTS –
NGCC
Жанно пропускает компиляцию выпускников, которые содержат импорт, которые не могут быть разрешены или поняты. Если указана эта опция, NGCC будет продолжаться с составлением входной точки, даже если это такие недостающие зависимости. - 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