javascript - nodejs - Ejecutar función en script desde la línea de comando(Nodo JS)
stdin nodejs (10)
Este está sucio pero funciona
:)
Llamaré a la función
main()
desde mi script.
Anteriormente solo ponía llamadas a main al final del script.
Sin embargo, agregué algunas otras funciones y las exporté del script (para usar funciones en otras partes del código), pero no quiero ejecutar la función main () cada vez que importo otras funciones en otros scripts.
Así que hice esto, en mi script eliminé call to main (), y en su lugar al final del script puse esta verificación:
if (process.argv.includes(''main'')) {
main();
}
Entonces, cuando quiero llamar a esa función en la CLI:
node src/myScript.js main
Estoy escribiendo una aplicación web en Node.
Si tengo un archivo JS
db.js
con una función
init
, ¿cómo podría llamar a esa función desde la línea de comandos?
Hago un IIFE, algo así:
(() => init())();
Este código se ejecutará inmediatamente e invocará la función init.
Instale run-func a su proyecto
npm i -D run-func
Ejecute cualquier función exportada
run-func db.js init
Los siguientes argumentos se pasarán como parámetros de función
init(param1, param2)
run-func db.js init param1 param2
Esto también puede ejecutarse desde la sección "scripts" en package.json
"db-init": "run-func db.js init"
Importante:
la función (en este ejemplo,
init
) debe exportarse en el archivo que la contiene
module.exports = { init };
o exportación ES6
export { init };
No hay comentarios sobre por qué quiere hacer esto, o lo que podría ser una práctica más estándar: aquí hay una solución a su pregunta ... Tenga en cuenta que el tipo de citas requeridas por su línea de comando puede variar.
En su
db.js
, exporte la función
init
.
Hay muchas formas, pero por ejemplo:
module.exports.init = function () {
console.log(''hi'');
};
Luego
db.js
esta manera, suponiendo que su
db.js
esté en el mismo directorio que su símbolo del sistema:
node -e ''require("./db").init()''
Para otros lectores, la función
init
del OP podría haberse llamado de cualquier forma, no es importante, es solo el nombre específico utilizado en la pregunta.
Prueba make-runnable .
En db.js, agrega
require(''make-runnable'');
hasta el final.
Ahora puedes hacer:
node db.js init
Cualquier argumento adicional pasaría al método
init
.
Según las otras respuestas, agregue lo siguiente a
someFile.js
module.exports.someFunction = function () {
console.log(''hi'');
};
Luego puede agregar lo siguiente a
package.json
"scripts": {
"myScript": "node -e ''require(/"./someFile/").someFunction()''"
}
Desde la terminal, puede llamar
npm run myScript
Me parece una forma mucho más fácil de recordar los comandos y usarlos.
Si convierte
db.js
en un módulo, puede requerirlo de
db_init.js
y solo:
node db_init.js
.
db.js:
module.exports = {
method1: function () { ... },
method2: function () { ... }
}
db_init.js:
var db = require(''./db'');
db.method1();
db.method2();
Si su archivo solo contiene su función, por ejemplo:
myFile.js:
function myMethod(someVariable) {
console.log(someVariable)
}
Al llamarlo desde la línea de comando así no sucederá nada:
node myFile.js
Pero si cambia su archivo:
myFile.js:
myMethod("Hello World");
function myMethod(someVariable) {
console.log(someVariable)
}
Ahora esto funcionará desde la línea de comando:
node myFile.js
Simple, en el archivo javascript testfile.js:
module.exports.test = function () {
console.log(''hi'');
};
this.test();
Ejecutando en el indicador:
node testfile.js
manera simple:
supongamos que tiene el archivo db.js en un directorio de ayuda en la estructura del proyecto.
ahora ve al directorio de ayudantes y ve a la consola del nodo
helpers $ node
2) requiere el archivo db.js
> var db = require("./db")
3) llame a su función (en su caso, su init ())
> db.init()
espero que esto ayude