angularjs - Karma arroja un error: No se puede cargar "ng-html2js", no está registrado
karma-runner (4)
Me aparece un error cuando ejecuto el 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?
...
Pero en mi archivo de paquete tengo "karma-ng-html2js-preprocessor": "*",
y la carpeta con código para este preprocesador existe en node_modules
.
¿Alguna idea sobre cómo resolver el problema?
Echa un vistazo a Cargando complementos en los documentos.
Si omite la propiedad de los plugins
, intentará cargar todos los complementos que sean:
- Prefijo con
karma-
. - Un hermano del módulo
karma
npm.
Entonces, si su estructura de archivos es:
- node_modules
- karma
- karma-chrome-launcher
- karma-firefox-launcher
... ya que karma-chrome-launcher
y karma-firefox-launcher
son hermanos del módulo de karma
que está en uso, y dado que ambos comienzan con karma-
se karma-
automáticamente.
Pero ten cuidado: si tienes la propiedad de los plugins
definida, solo cargará las cosas que están definidas. Es decir. si tienes plugins: [''karma-chrome-launcher'']
, no cargará karma-firefox-launcher
.
Algunas preguntas para hacerse a sí mismo:
- ¿Estás usando una versión local de
karma
o una versión global? - ¿Está todo actualizado? Si no, pruebe
npm update
onpm uninstall
->npm install
. - ¿Tienes versiones globales de
karma-x
que están anulando las locales?
En mi caso, el problema estaba relacionado con la falta de karma-ng-html2js-preprocessor
dentro de las secciones de los plugins
configuración de karma. En los tutoriales vi que no es necesario agregar ''ng-html2js''
dentro de los complementos, pero para mí no funciona sin él.
He visto demasiados tipos diferentes de respuestas sobre esto. Y tuve que probar todos los diferentes métodos para finalmente entender lo que estaba pasando. No tenía una sección de plugins:
en mi karma.conf.js
tampoco.
Así que tengo un proyecto AwesomeKarmaTests
que contiene todos los archivos dentro de una carpeta con el mismo nombre.
AwesomeKarmaTests
/package.json
/karma.conf.js
/node_modules
/karma
/karma-jasmine
...
El directorio node_modules
obviamente se creará cuando cd AwesomeKarmaTests
y ejecute npm install
.
npm
luego npm
el contenido del package.json
en la carpeta desde la que se invocó e instalará todos los paquetes enumerados y otras dependencias si es necesario.
Contenido de mi 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"
}
}
Encontré este problema ( Can not load "ng-html2js"
) inicialmente porque karma
se instaló globalmente en mi sistema. La instalación global de karma
trataría de buscar el paquete karma-ng-html2js-preprocessor
globalmente, y obviamente no lo encontraría ya que no había instalado el pre-procesador globalmente.
Y no podía entender lo que estaba pasando, ya que todas y cada una de las devDependencies
en el package.json
ya estaban instaladas en el directorio node_modules
dentro de la carpeta raíz del proyecto. Seguí ejecutando karma start
desde la carpeta AwesomeKarmaTests
sin darme cuenta de que era la instalación global de karma lo que se estaba ejecutando (tonto).
Sin embargo, después de desinstalar el karma
de mi instalación global, comencé a obtener /c/Users/fastasticUser/AppData/Roaming/npm/karma: No such file or directory
errores de /c/Users/fastasticUser/AppData/Roaming/npm/karma: No such file or directory
. Fue entonces cuando me di cuenta de mi error.
Luego cambié mi enfoque. Empecé a ejecutar mis pruebas usando el siguiente comando, especificando explícitamente la ruta de la instalación local de karma.
./node_modules/karma/bin/karma start karma.conf.js
del directorio AwesomeKarmaTests
. Y como se menciona en varios otros mensajes, el karma eligió sus paquetes y complementos para hermanos.
Por lo tanto, recuerde utilizar las versiones locales del paquete de karma
cuando dependa de otros complementos o paquetes instalados localmente , de lo contrario, karma
tendrá problemas para identificar lo que quiere que haga.
Si está iniciando y ejecutando una instalación global de Karma, una que está instalada con el indicador -g
, y se ejecuta sin especificar una ruta, es decir, karma start path/to/config.js
, entonces asegúrese de que los complementos también estén instalados globalmente, es decir, npm install -g karma-ng-html2js-preprocessor
.
Si está ejecutando una instalación local de Karma, es decir, path/to/karma start path/to/config.js
, asegúrese de que el complemento también esté instalado localmente en esa aplicación.