Ошибка Karma: Не удается загрузить "ng-html2js", она не зарегистрирована

Я получаю сообщение об ошибке при запуске karma start:

$ karma start
INFO [karma]: Karma v0.10.2 server started at http://localhost:9876/
INFO [launcher]: Starting browser Chrome
WARN [preprocess]: Can not load "ng-html2js", it is not registered!
  Perhaps you are missing some plugin?

...

Но в моем файле пакета у меня есть "karma-ng-html2js-preprocessor": "*",, и папка с кодом для этого препроцессора существует в node_modules.

Любые идеи о том, как решить проблему?

Ответ 1

В моих случаях проблема была связана с отсутствием разделов karma-ng-html2js-preprocessor внутри karma config plugins. В учебниках я видел, что вам не нужно добавлять 'ng-html2js' внутри плагинов, но для меня это не работает без него.

Ответ 2

Если вы запускаете и запускаете глобальную установку Karma, которая установлена ​​с флагом -g и запускается без указания пути, то есть karma start path/to/config.js, убедитесь, что плагины также установлены глобально, т.е. npm install -g karma-ng-html2js-preprocessor.

Если вы используете локальную установку Karma, т.е. path/to/karma start path/to/config.js, убедитесь, что плагин также установлен локально для этого приложения.

Ответ 3

Откройте Загрузка плагинов в документах.

Если вы опустите свойство plugins, оно попытается загрузить все плагины, которые:

  • Префикс karma-.
  • Родственник к модулю karma npm.

Итак, если ваша файловая структура:

- node_modules
  - karma
  - karma-chrome-launcher
  - karma-firefox-launcher

... так как karma-chrome-launcher и karma-firefox-launcher являются братьями и сестрами для модуля karma, который используется, и поскольку оба они начинаются с karma-, они будут загружаться автоматически.


Но будьте осторожны - если у вас есть свойство plugins, оно будет загружать только те вещи, которые определены. То есть. если у вас есть plugins: ['karma-chrome-launcher'], он не загрузит karma-firefox-launcher.


Некоторые вопросы, которые нужно задать себе:

  • Вы используете локальную версию karma или глобальную версию?
  • Все ли в курсе? Если не попробовать npm update или npm uninstallnpm install.
  • Есть ли у вас глобальные версии karma-x, которые переопределяют локальные?

Ответ 4

Я видел слишком много разных ответов. И мне пришлось попробовать все разные методы, чтобы наконец понять, что происходит. У меня не было раздела plugins: в моем karma.conf.js.

Итак, у меня есть проект AwesomeKarmaTests, который содержит все файлы внутри папки с тем же именем.

AwesomeKarmaTests
\package.json
\karma.conf.js
\node_modules
            \karma
            \karma-jasmine
            ...

Каталог node_modules, очевидно, будет создан, когда вы cd AwesomeKarmaTests и запустите npm install.

npm затем просматривает содержимое package.json в папке, из которой он был вызван, и при необходимости установите все перечисленные пакеты и дополнительные зависимости.

Содержание моего package.json

{
  "name": "AwesomeKarmaTests",
  "version": "1.0.0",      
  "devDependencies": {
    "karma": "^1.6.0",
    "karma-jasmine": "^1.1.0",
    "karma-junit-reporter": "^1.2.0",
    "karma-ng-html2js-preprocessor": "^1.0.0",
    "karma-phantomjs-launcher": "^1.0.4"
  }
}

Я столкнулся с этой проблемой (Can not load "ng-html2js") изначально, потому что karma был установлен глобально в моей системе. Установка global karma будет пытаться искать пакет karma-ng-html2js-preprocessor глобально, и он, очевидно, не сможет найти его, поскольку я не установил предварительный процессор во всем мире.

И я не мог понять, что происходит, поскольку каждый из devDependencies в package.json уже был установлен в каталог node_modules внутри корневой папки проекта. Я продолжал работать karma start из AwesomeKarmaTests, не понимая, что это была глобальная установка кармы, которая выполнялась (глупо меня).

Однако после удаления karma из моей глобальной установки я начал получать ошибки /c/Users/fastasticUser/AppData/Roaming/npm/karma: No such file or directory. Это было тогда, когда я осознал свою ошибку.

Затем я изменил свой подход. Я начал выполнять свои тесты с помощью следующей команды, явно указывая путь локальной установки кармы.

./node_modules/karma/bin/karma start karma.conf.js из каталога AwesomeKarmaTests. И, как упоминалось в нескольких других сообщениях, карма действительно выбирала свои пакеты для сиблинга и плагины.

Поэтому не забудьте использовать локальные версии пакета karma, если полагаться на другие плагины или пакеты локально, иначе karma будет сложно определить, что вы хочу, чтобы это делалось.