Estoy escribiendo una aplicación web en Node. Si tengo algún archivo JS db.js
con una función init
, ¿cómo podría llamar a esa función desde la línea de comandos?
fuente
Estoy escribiendo una aplicación web en Node. Si tengo algún archivo JS db.js
con una función init
, ¿cómo podría llamar a esa función desde la línea de comandos?
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
, exportar la init
función. Hay muchas formas, pero por ejemplo:
module.exports.init = function () {
console.log('hi');
};
Luego llámelo de esta manera, suponiendo que db.js
esté en el mismo directorio que su símbolo del sistema:
node -e 'require("./db").init()'
Para otros lectores, la init
función del OP podría haberse llamado de cualquier forma, no es importante, es solo el nombre específico utilizado en la pregunta.
module.exports.init = function () { console.log('hi'); };
y node -e 'require("./db").init()'
de alguna manera no funcionó para mí. No estoy seguro de lo que hice mal, pero siguiendo su idea, usé module.exports = myFunction,
y luego node -e 'require("./myFunction")()'
trabajé para mí.
node -e 'require("./index").handler(require("./fixtures/sample_event_01.json"), {}, console.log)'
. El medio {}
sería el contexto, siéntase libre de adaptarse. También console.log es un poco primitivo pero un buen comienzo. Por supuesto, también puede escribir un CLI.js dedicado que a su vez requiera () el index.js / handler como se indica en otros comentarios.
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.
Prueba make-runnable .
En db.js, agregue require('make-runnable');
hasta el final.
Ahora puedes hacer:
node db.js init
Cualquier argumento adicional pasaría al init
método.
Ejecutar directamente desde CLI (global)
Instalar en pc
npm i -g run-func
Uso, es decir, ejecutar la función "init", debe exportarse, ver la parte inferior
run-func db.js init
o
Ejecutar desde el script package.json (local)
Instalar en pc
npm i -S run-func
Preparar
"scripts": {
"init": "run-func db.js init"
}
Uso
npm run init
Params
Los siguientes argumentos se pasarán como parámetros de función init(param1, param2)
run-func db.js init param1 param2
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 };
make-runnable
, pero creo que esto es mucho mejor que eso. Gracias.
npm i -g run-func
manera simple:
supongamos que tiene el archivo db.js en un directorio de ayuda en la estructura del proyecto.
ahora vaya dentro del directorio de ayudantes y vaya 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
Si se convierte db.js
en un módulo, puede solicitarlo db_init.js
y simplemente:node db_init.js
.
db.js:
module.exports = {
method1: function () { ... },
method2: function () { ... }
}
db_init.js:
var db = require('./db');
db.method1();
db.method2();
Este está sucio pero funciona :)
Estare llamando main()
función 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 CLI: node src/myScript.js main
Hago un IIFE, algo así:
(() => init())();
Este código se ejecutará inmediatamente e invocará la función init.
node init.js
y el archivo contiene un IIFE, funcionará. Creo que no entendí completamente tu pregunta. Lo siento.
(init)();
si quieres :)
A veces desea ejecutar una función a través de CLI, a veces lo desea require
desde otro módulo. Aquí se explica cómo hacer ambas cosas.
// file to run
const runMe = () => {}
if (require.main === module) {
runMe()
}
module.exports = runMe
Simple, en el archivo javascript testfile.js:
module.exports.test = function () {
console.log('hi');
};
this.test();
Ejecutando en el indicador:
node testfile.js
test
se ejecuta cada vez, por lo que tendría que cambiar el archivo para llamar a otra función)
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