web-dev-qa-db-fra.com

Angular 6 et le karma 'Impossible de charger "@ angular-devkit / build-angular", il n'est pas enregistré "

J'ai dû migrer vers la version la plus récente angular. Après cela, les tests de karma ont cessé de fonctionner et continuent à être écrasés avec un journal des erreurs:

14 04 2018 14: 17: 00.453: ERREUR [pré-traitement]: Impossible de charger "@ angular-devkit/build-angular", il n'est pas enregistré! Peut-être vous manque un plugin?

...\parkandrest-ui\node_modules\@ angular-devkit\build-angular\fichiers src\angular-cli-fichiers\plugins\packages\angular_devkit\build_angular\src\fichiers angulaires-cli\plugins\karma.ts: 52 const options = config.buildWebpack.options; ^ TypeError: Impossible de lire la propriété 'options' d'undefined chez init (...\parkandrest-ui\node_modules\@ angular-devkit\build-angular\src\angular-cli-files\plugins\packages\angular_devkit\build_angular\src\angular-cli-files\plugins\karma.ts: 52: 39) sur Array.invoke (...\parkandrest-ui\node_modules\di\lib\injector.js: 75: 15) sur Injector.get (. ..\parkandrest-ui\node_modules\di\lib\injector.js: 48: 43) à l'adresse E:\Workspace\Formation\spring-boot-tutorial\parkandrest-ui\node_modules\karma\lib\server.js: 166 : 20 sur Array.forEach () sur Server._start (...\parkandrest-ui\node_modules\karma\lib\server.js: 165: 21) sur Injector.invoke (...\parkandrest-ui\node_modules\di\lib\injector.js: 75: 15) sur Server.start (...\parkandrest-ui\node_modules\karma\lib\server.js: 126: 18) sur Object.

Mon fichier karma.conf.js ressemble à ceci:

module.exports = function (config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine', '@angular-devkit/build-angular'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-coverage-istanbul-reporter'),
      require('@angular-devkit/build-angular/plugins/karma')
    ],
    client:{
      clearContext: false // leave Jasmine Spec Runner output visible in browser
    },
    files: [
      { pattern: './src/test.ts', watched: false }
    ],
    preprocessors: {
      './src/test.ts': ['@angular-devkit/build-angular']
    },
    mime: {
      'text/x-TypeScript': ['ts','tsx']
    },
    coverageIstanbulReporter: {
      dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ],
      fixWebpackSourcePaths: true
    },
    angularCli: {
      config: './angular.json',
      environment: 'dev'
    },
    reporters: config.angularCli && config.angularCli.codeCoverage
              ? ['progress', 'coverage-istanbul']
              : ['progress', 'kjhtml'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false
  });
};

@ angular-devkit\build-angular est bien entendu installé. J'apprécie toute aide.

EDIT: J'ai une solution qui combine en fait la plupart des réponses des utilisateurs à ma question avec la mienne. Tout d'abord, j'ai mis à jour tout mon projet vers la version stable angular 6. Ensuite, j'ai généré un projet vide, comme l'a suggéré @ R.Richards, puis j'ai remplacé la quasi-totalité des configurations de mon ancien projet par le nouveau. Enfin, , J'ai rencontré un problème qui m'avait été signalé par @Suvendu. J'ai utilisé sa solution pour le résoudre. Malheureusement, il me reste un problème avec mon environnement (Intellij IDEA 2017.3.4 Ultimate) qui ne me permet pas pour démarrer les tests de karma directement à partir de mon IDE (j'ai la même erreur que @Suvendu mentionne)], cependant, c'est un sujet pour la question suivante.

19
pokemzok

Ma solution était un peu différente, car je devais déplacer le karma.conf.js.

  1. Mettez à jour toutes les dépendances et assurez-vous que l'application elle-même fonctionne comme prévu
  2. Si ce n'est déjà fait: Remplacement de chaque occurrence de @angular/cli avec @angular-devkit/build-angular dans le karma.conf.js
  3. Suppression complète de files et de preprocessor du fichier karma.conf.js. Tout cela est défini dans angular.json et devrait être géré automatiquement par le plugin @ anguler-devkit karma.
27

Impossible de trouver le module "@ angular-devkit/build-angular"

voici ce qui a fonctionné pour mon projet:

  1. npm install -g @ angular/cli
  2. npm install @ angular/cli
  3. ng update @ angular/cli --migrate-only --from = 1.7.0
  4. ng update @ angular/core
  5. npm installer rxjs-compat
  6. ng servir

J'espère que cela fonctionne pour vous!

9

Essayez d’installer karma-webpack avec npm puis de l’ajouter au tableau des plugins -

 plugins: [
  ...
  require('karma-webpack'),
  ...
],

et remplacez les pré-processeurs par ceci -

preprocessors: {
  './src/test.ts': ['webpack']
},

Cela a fonctionné dans mon cas et fonctionnera également pour la future erreur anticipée ci-dessous.

Erreur: Le plug-in karma '@ angular-devkit/build-angular/plugins/karma' est destiné à être utilisé de l'intérieur Angular et ne fonctionnera pas correctement en dehors de celui-ci.

J'espère que cela t'aides.

2
Suvendu

La solution pour moi était que ma variable d'environnement NODE_ENV soit définie sur "production". Lors de la mise à niveau vers Angular 6), je ne savais pas que @ angular-devkit/build-angular était répertorié dans mes devDependencies, qui ne sont pas installés dans un environnement de production.

L'exécution de "unset NODE_ENV" et la suppression de NODE_ENV de/etc/environment ont résolu mon problème. (Remarque: veillez à modifier cette variable dans un environnement de production réel).

2
Scott Reed

J'ai suivi ce guide pour effectuer une migration propre du projet, ce qui a résolu le même problème pour moi.

2
René