Lorsque vous utilisez ng-packagr pour empaqueter un projet @ my/common-util, il n'y a aucun problème. Cette classe contient une classe abstraite appelée AbstractPerson dans abstract-person.ts.
Dans un autre projet appelé @ my/common-impl, une autre classe Person a été créée qui étend AbstractPerson et l'importe en utilisant le nom de package @ my/common-util. Lorsque j'utilise ng-packagr pour l'empaqueter, j'obtiens l'erreur suivante ->
Aucun nom n'a été fourni pour le module externe '@ my/common/abstract-person' dans options.globals - deviner 'abstractPerson'
Comme il semblait que c'était un avertissement, je continue à installer npm @ my/common et @ my/common-impl dans un autre projet, mais j'obtiens l'erreur suivante lorsque j'importe la classe Person de @ my/common-impl
ERREUR dans ./node_modules/@my/common-impl/esm5/common-impl.js Module introuvable: Erreur: impossible de résoudre '@ my/common/abst ract-person' dans 'C:\Data\me\node_modules\@my\common-impl\e sm5 'résoudre' @ my/common/abstract-person 'dans' C:\Data\me\node_modules\@my\common-impl\esm5 'La requête analysée est un module utilisant la description fichier: C:\Data\me\node_modules\@my\co mmon-impl\package.json (chemin relatif: ./esm5) Le champ 'browser' ne contient pas de configuration d'alias valide après avoir utilisé le fichier de description: C:\Les données\me\node_modules\@my\common-impl\package.json (chemin relatif: ./esm5) sont résolues en tant que module
J'ai essayé plusieurs choses comme externals, globals, umdModuleIds dans package.json (voir ci-dessous), mais rien de tout cela n'a fonctionné.
Voici 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"
}
}
}
}
Que faut-il encore pour rectifier cela?
Je travaillais avec un module npm appelé katex . L'ajout de cela au umdModuleIds
dans le ./ projects/myLibname/ng-package.json a fonctionné pour moi.
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/documentations",
"lib": {
"entryFile": "src/public_api.ts",
"umdModuleIds": {
"katex": "katex"
}
}
}
Cela a fait disparaître l'avertissement suivant
Aucun nom n'a été fourni pour le module externe 'katex' dans output.globals - deviner 'katex'
Vous devez utiliser la propriété "chemins" de tsconfig.lib.json
dans votre bibliothèque.
Voici le problème:
J'ajoute ma bibliothèque1 et ma bibliothèque2 dans mon dossier de projet monorepo
.
project:
-> library1
-> tsconfig.lib.json
-> ...
-> library2
-> tsconfig.lib.json
-> ...
-> tsconfig.json
-> ...
tsconfig.json
{
...
"compilerOptions": {
...
"paths": {
"library1": [
"../dist/library1"
],
"library2": [
"../dist/library2"
],
},
}
Et j'ai utilisé import {lib1Module} from 'library1'
dans le code library2. pour résoudre no module lib1Module found
erreur dans le chemin de bibliothèque1 dans la bibliothèque2 tsconfig.lib.json
tsconfig.lib.json
{
"extends": "../../tsconfig.json",
"compilerOptions": {
...
"paths": {
"library1": [
"../../../dist/library1"
]
},
...
},
Votre problème sera probablement résolu si vous utilisez la propriété paths
au lieu de "umdModuleIds", "globals" et "externals"
Et enfin, je dois mentionner ce fait, les "externes" n'existent plus dans ng-packagr
schéma .