Ejecutar función en script desde línea de comando (Nodo JS)

Resuelto winhowes asked hace 9 años • 16 respuestas

Estoy escribiendo una aplicación web en Node. Si tengo algún archivo JS db.jscon una función, init¿cómo podría llamar a esa función desde la línea de comando?

winhowes avatar Jun 11 '15 20:06 winhowes
Aceptado

No hay comentarios sobre por qué quiere hacer esto, o cuál podría ser una práctica más estándar: aquí tiene una solución a su pregunta.... Tenga en cuenta que el tipo de comillas requeridas por su línea de comando puede variar.

En su db.js, exporte la initfunción. Hay muchas formas, pero por ejemplo:

    module.exports.init = function () {
      console.log('hi');
    };

Luego llámalo así, asumiendo que estás db.jsen el mismo directorio que tu símbolo del sistema:

node -e 'require("./db").init()'

Si db.jsfuera un módulo db.mjs, use una importación dinámica para cargar el módulo:

node -e 'import("./db.mjs").then( loadedModule => loadedModule.init() )'

Para otros lectores, la función del OP initpodría haberse llamado de cualquier manera, no es importante, es solo el nombre específico utilizado en la pregunta.

Lee Goddard avatar Apr 07 '2016 15:04 Lee Goddard

Actualización 2020 - CLI

Como señaló @ mix3d, puede simplemente ejecutar un comando donde file.jsestá su archivo y someFunctionsu función, opcionalmente seguida de parámetros separados con espacios.

npx run-func file.js someFunction "just some parameter"

Eso es todo.

file.jsllamado en el ejemplo anterior

const someFunction = (param) => console.log('Welcome, your param is', param)

// exporting is crucial
module.exports = { someFunction }

Descripción más detallada

Ejecutar directamente desde CLI (global)

Instalar

npm i -g run-func

Uso, es decir, ejecutar la función "init", debe exportarse, consulte la parte inferior

run-func db.js init

o

Ejecutar desde el script package.json (local)

Instalar

npm i -S run-func

Configuración

"scripts": {
   "init": "run-func db.js init"
}

Uso

npm run init

parámetros

Cualquier argumento siguiente se pasará como parámetro 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 };
Pawel avatar Apr 24 '2017 21:04 Pawel

Según las otras respuestas, agregue lo siguiente asomeFile.js

module.exports.someFunction = function () {
  console.log('hi');
};

Luego puede agregar lo siguiente apackage.json

"scripts": {
   "myScript": "node -e 'require(\"./someFile\").someFunction()'"
}

Desde el terminal podrá llamar

npm run myScript

Considero que esta es una manera mucho más fácil de recordar los comandos y usarlos.

GWed avatar Dec 24 '2017 17:12 GWed

Pruebe make-runnable .

En db.js, agregue require('make-runnable');al final.

Ahora puedes hacer:

node db.js init

Cualquier argumento adicional se pasaría al initmétodo, en forma de lista o pares clave-valor.

eye_mew avatar Jun 15 '2016 04:06 eye_mew