Мне также было трудно понять документы. Параметр ng-packagr umdModuleIds
в ng-package.json
представляет собой сопоставление имен импорта с идентификаторами модулей, которые UMD регистрирует в объекте javascript global
.
Под именем импорта, я имею в виду, в вашем коде машинописи :
import * as moment from 'moment';
Строка moment
должна быть ключом в umdModuleIds
.
Значение должно совпадать с глобальной переменной, зарегистрированной в пакете UMD для пакета. Если вы посмотрите на импортируемый файл JS, вы увидите, что установлено значение global.X
. На момент. js кодовый блок:
//! moment.js
;(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
global.moment = factory()
}(this, (function () { 'use strict';
Строка global.moment = ...
дает вам то, что вам нужно. Итак, чтобы правильно импортировать момент, ваш ng-package.json
должен включать:
"lib": {
"entryFile": "src/public-api.ts",
"umdModuleIds": {
"moment": "moment"
}
}
В этом случае оказывается, что догадка ng-packagr верна - имя импорта соответствует глобальной переменной UMD, но вам нужно чтобы указать его явно, чтобы ng-packagr знал наверняка.
Должен быть другой (и лучший) способ исправить это для NPM зависимостей, а именно добавить библиотечные зависимости в библиотеку * Файл 1026 * (пакет. json в том же каталоге, что и файл ng-package. json). Сначала я попробовал бы - я считаю, что ng-packagr правильно находит идентификаторы модуля UMD, когда зависимость включена в пакет. json.
Однако, в случае, если вы используете локальные библиотеки (библиотеки в том же рабочем пространстве angular) или библиотеках, которые иначе не могут быть проанализированы с помощью ng-packagr, необходимо взглянуть на идентификаторы UMD и убедиться, что они совпадают. Например, если вы используете имена областей / областей имен для своих внутренних библиотек, например @mycompany/util
, вы увидите, что идентификаторы модулей UMD зарегистрированы следующим образом:
File: ~/dist/util/bundles/mycompany-util.umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define('@mycompany/util', ['exports'], factory) :
(global = global || self, factory((global.mycompany = global.mycompany || {}, global.mycompany.util = {})));
}(this, (function (exports) { 'use strict';
, поэтому с учетом строки global.mycompany.util =
вам необходимо указать идентификаторы модулей UMD, например:
"umdModuleIds": {
"@mycompany/util": "mycompany.util"
...
}