web-dev-qa-db-fra.com

ng-packagr donne Aucun nom n'a été fourni pour le module externe

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?

17
AngularAngle

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'

21
ngfelixl

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 .

2
Hasan Beheshti