NG-Packagr дает имя не было предоставлено для внешнего модуля
При использовании ng-packagr для упаковки одного проекта @my/common-util проблем не возникает. Этот класс содержит абстрактный класс с именем AbstractPerson в abstract-person.ts.
В другом проекте под названием @my/common-impl был создан другой класс Person, который расширяет AbstractPerson и импортирует его, используя имя пакета @my/common-util. Когда я использую ng-packagr для упаковки, я получаю следующую ошибку ->
Не было задано имя для внешнего модуля '@my/common/abstract-person' в options.globals - угадывание 'abstractPerson'
Так как казалось, что это было предупреждение, я продолжаю npm устанавливать оба @ my / common и @my/common-impl в другой проект, но получаю следующую ошибку при импорте класса Person из @my/common-impl
ОШИБКА в./node_modules/@my/common-impl/esm5/common-impl.js Модуль не найден: Ошибка: не удается разрешить '@ my / common / abst ract-person' в 'C:\Data\me\node_modules\@my\common-impl\e sm5' resol' @ my / common / abstract-person 'в' C: \ Data \ me \ node_modules \ @my \ common-impl \ esm5 'Анализируемый запрос - это модуль, использующий описание file: C:\Data\me\node_modules\@my\co mmon-impl\package.json (относительный путь: ./esm5) Поле 'browser' не содержит допустимой конфигурации псевдонима после использования файла описания: C: \ Данные \ me \ node_modules \ @my \ common-impl \ package.json (относительный путь: ./esm5) разрешаются как модуль
Я пробовал несколько вещей, таких как внешние, глобальные, umdModuleIds в package.json (см. Далее), но ни одна из них не сработала.
Вот package.json
{
"name": "@my/common-impl",
"version": "1.0.0-alpha.0",
"private": true,
"dependencies": {
"@my/common": "1.0.0-alpha.0"
},
"peerDependencies": {
"lodash": "^4.17.4"
},
"ngPackage": {
"$schema": "./node_modules/ng-packagr/ng-package.schema.json",
"dest": "dist/common-impl",
"workingDirectory": "../.ng_build",
"lib": {
"entryFile": "src/public_api.ts",
"externals": [
"@my/common/abstract-person"
],
"globals": {
"@my/common/abstract-person": "AbstractPerson"
},
"umdModuleIds": {
"abstract-person" : "AbstractPerson"
}
}
}
}
Что еще требуется для того, чтобы это было исправлено?
2 ответа
Я работал с модулем npm под названием katex. Добавление этого к umdModuleIds
в ./projects/myLibname/ng-package.json работал для меня.
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/documentations",
"lib": {
"entryFile": "src/public_api.ts",
"umdModuleIds": {
"katex": "^0.10.0"
}
}
}
Это сделало следующее предупреждение исчезнуть
Не указано имя для внешнего модуля 'katex' в output.globals - угадывание 'katex'
Вы должны использовать свойство "paths" tsconfig.lib.json
в вашей библиотеке.
Это проблема:
Я добавляю свои library1 и library2 в мой monorepo
папка проекта.
project:
-> library1
-> tsconfig.lib.json
-> ...
-> library2
-> tsconfig.lib.json
-> ...
-> tsconfig.json
-> ...
tsconfig.json
{
...
"compilerOptions": {
...
"paths": {
"library1": [
"../dist/library1"
],
"library2": [
"../dist/library2"
],
},
}
И я использовал import {lib1Module} from 'library1'
в коде library2. для разрешения no module lib1Module found
ошибка я ovveride путь библиотеки1 в библиотеке2 tsconfig.lib.json
tsconfig.lib.json
{
"extends": "../../tsconfig.json",
"compilerOptions": {
...
"paths": {
"library1": [
"../../../dist/library1"
]
},
...
},
Вероятно, ваша проблема будет решена, если вы используете paths
свойство вместо "umdModuleIds", "globals" и "externals"
И, наконец, я должен упомянуть этот факт, "внешние" больше не существует в ng-packagr
схема
В моем случае я решил предупреждения таким образом.
ng-package.json
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/test-lib",
"lib": {
"entryFile": "src/public-api.ts",
"umdModuleIds": {
"@libs/shared": "../../dist/shared",
"@libs/animations": "../../dist/animations",
"saturn-datepicker": "saturn-datepicker",
"moment": "moment"
}
}
}
tsconfig.json
{
"compileOnSave": false,
"compilerOptions": {
"importHelpers": true,
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"module": "esnext",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"es2019",
"dom"
],
"allowSyntheticDefaultImports": true,
"baseUrl": "./",
"paths": {
"@app/*": [ "projects/test-app/src/app/*" ],
"@libs/*": [ "dist/*" ],
"shared": [ "dist/shared" ],
"shared/*": [ "dist/shared/*" ],
"animations": [ "dist/animations" ],
"animations/*": [ "dist/animations/*" ],
}
}
}