node.js - que - ¿Cómo ejecutar el script npm usando grunt-run?
package.json que es (1)
Tengo una tarea npm en mi archivo package.json de la siguiente manera para ejecutar la prueba de broma:
"scripts": {
"test-jest": "jest",
"jest-coverage": "jest --coverage"
},
"jest": {
"testEnvironment": "jsdom"
},
Quiero ejecutar esta tarea npm run test-jest
usando ronco. Instalé grunt-run para lo mismo y agregué la tarea de ejecución, pero ¿cómo invoco esta tarea npm allí?
run: {
options: {
// Task-specific options go here.
},
your_target: {
cmd: ''node''
}
}
Configure su Gruntfile.js
similar al ejemplo que se muestra en los documentos.
- Establezca el valor para el
cmd
anpm
. - Establezca
run
ytest-jest
enargs
Array.
Gruntfile.js
module.exports = function (grunt) {
grunt.loadNpmTasks(''grunt-run'');
grunt.initConfig({
run: {
options: {
// ...
},
npm_test_jest: {
cmd: ''npm'',
args: [
''run'',
''test-jest'',
''--silent''
]
}
}
});
grunt.registerTask(''default'', [ ''run:npm_test_jest'' ]);
};
Corriendo
Al ejecutar $ grunt
través de su CLI utilizando la configuración que se muestra arriba se invocará el npm run test-jest
.
Nota: Agregar --silent
(o su equivalente en taquigrafía) s a args
Array simplemente ayuda a evitar el registro adicional de npm en la consola.
EDITAR:
Plataforma cruzada
El uso de la solución de grunt-run
que se muestra arriba falló en el sistema operativo Windows cuando se ejecuta a través de cmd.exe
. El siguiente error fue arrojado:
Error: spawn npm ENOENT Warning: non-zero exit code -4058 Use --force to continue.
Para una solución multiplataforma, considere instalar y utilizar grunt-shell para invocar el npm run test-jest
lugar.
npm i -D grunt-shell
Gruntfile.js
module.exports = function (grunt) {
require(''load-grunt-tasks'')(grunt); // <-- uses `load-grunt-tasks`
grunt.initConfig({
shell: {
npm_test_jest: {
command: ''npm run test-jest --silent'',
}
}
});
grunt.registerTask(''default'', [ ''shell:npm_test_jest'' ]);
};
Notas
-
grunt-shell
requiere load-grunt-tasks para cargar la tarea en lugar de la típicagrunt.loadNpmTasks(...)
, por lo que deberá instalarla también:
npm i -D load-grunt-tasks
- Para la versión anterior de Windows tuve que instalar una versión anterior de
grunt-shell
, a saber, la versión1.3.0
, por lo que recomiendo instalar una versión anterior.
npm i -D [email protected]
EDIT 2
grunt-run
parece funcionar en Windows si usa la clave exec
en lugar de las teclas cmd
y args
...
Para propósitos de plataforma cruzada ... me pareció necesario especificar el comando como una cadena única usando la clave exec
según la documentación que dice:
Si desea especificar su comando como una sola cadena, útil para especificar múltiples comandos en una tarea, use la clave exec:
Gruntfile.js
module.exports = function (grunt) {
grunt.loadNpmTasks(''grunt-run'');
grunt.initConfig({
run: {
options: {
// ...
},
npm_test_jest: {
exec: ''npm run test-jest --silent'' // <-- use the exec key.
}
}
});
grunt.registerTask(''default'', [ ''run:npm_test_jest'' ]);
};