Ejecutar función en script desde línea de comando (Nodo JS)
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 comando?
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 init
función. Hay muchas formas, pero por ejemplo:
module.exports.init = function () {
console.log('hi');
};
Luego llámalo así, asumiendo que estás db.js
en el mismo directorio que tu símbolo del sistema:
node -e 'require("./db").init()'
Si db.js
fuera 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 init
podría haberse llamado de cualquier manera, no es importante, es solo el nombre específico utilizado en la pregunta.
Actualización 2020 - CLI
Como señaló @ mix3d, puede simplemente ejecutar un comando donde file.js
está su archivo y someFunction
su función, opcionalmente seguida de parámetros separados con espacios.
npx run-func file.js someFunction "just some parameter"
Eso es todo.
file.js
llamado 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 };
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.
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 init
método, en forma de lista o pares clave-valor.